FRDM_wahadlo_torsyjne

Dependencies:   mbed BufferedSerial

Fork of FRDM_wahadlo_torsyjne by Wojciech M

Revision:
10:497e9a0da7d6
Parent:
9:3540ad710232
Child:
11:b3bd4b86f914
--- a/main.cpp	Thu Jun 12 09:07:39 2014 +0000
+++ b/main.cpp	Thu Jun 12 17:30:39 2014 +0000
@@ -2,8 +2,16 @@
 #include "TSISensor.h"
 #include "Timer.h"
 
+Ticker triger1; 
+Ticker triger2;
+
 int motor_PWM_period_us = 200;  //okres sygnału PWM (w mikrosekundach) wyzwalającego kolejny krok silnika
-
+int i_start = 0;
+int EXC_angle = 3200/4;       //360 stopni to 3200 krok. przy mkrok. = 1.8/16
+float switch_dir_time=(float)((float)EXC_angle/500.0)*((float)motor_PWM_period_us/1000.0);
+int DIR_switched = 0;
+int SWITCH_DIR = EXC_angle;
+    
 DigitalOut direction(PTC7);     //zmiana wartości logicznej na wyjściu PTC7 powoduje zmianę kieruneku obrotów
 DigitalOut myled(LED_GREEN);    //dioda zielona sygnalizuje zmianę kierunku obrotów
 
@@ -20,49 +28,58 @@
 float get_voltage_in(AnalogIn analog_in, float zero_analog_in) {
     return (analog_in.read() - zero_analog_in) * 2.9035;       // przesunięcie do zera i skalowanie napiecia do zakresu
 }
+void task1() { 
+    //i_start += 1;1
+    //if (i_start == SWITCH_DIR) {
+      //  i_start = 0;
+        myled = !myled;
+        direction = !direction;
+        /*if (DIR_switched == 0) {
+            if (SWITCH_DIR == EXC_angle) {
+                SWITCH_DIR = 2*EXC_angle;
+                DIR_switched = 1;
+            }
+        }*/
+    //}
+} 
 
+void task2() { 
+    //wyslij dane
+    int zero_analog_IN_0 = analog_IN_0.read();
+    int zero_analog_IN_1 = analog_IN_1.read();
+
+    get_voltage_in(analog_IN_0, zero_analog_IN_0);
+    pc.printf("%.3f\t\n", get_voltage_in(analog_IN_0, zero_analog_IN_0));
+} 
 
 int main() {    
     motor.period_us(motor_PWM_period_us);
     motor = 0.0;    // wypełnienie PWM sygnału CLK
-    pc.baud(9600); // największa szybkość standardowa, jaką można zadać to 19200
-
-    int i_start = 0;
-    int EXC_angle = 3200/4;       //360 stopni to 3200 krok. przy mkrok. = 1.8/16
-    int DIR_switched = 0;
-    int SWITCH_DIR = EXC_angle;
+    pc.baud(115200); // największa szybkość standardowa, jaką można zadać to 19200
+   
+    wait(5);                   //czas na ustawienia początkowe 15 sek.
+    
+    triger2.attach(&task2, 0.02); //1/1000000); 
+    
     
-    wait(15);                   //czas na ustawienia początkowe 15 sek.
+    motor = 0.5;
     
-    int zero_analog_IN_0 = analog_IN_0.read();
-    int zero_analog_IN_1 = analog_IN_1.read();
-    timer.start();
-    int t0, t1;
-    int t0_t1 = 0;
+    //wait(switch_dir_time/2);      //tu jest teoretyczna ćwiartka obrotu
+    //direction = !direction;
     
+    triger1.attach(&task1, switch_dir_time); //motor_PWM_period_us/1000000); 
+     
+
     while (true) {
-        t0 = timer.read_us();
-        if (tsi.readPercentage() < 0.5)
-            motor = 0.5;
-        else motor = 0.0; // silnik zatrzyma się po dotknięciu prawej strony potencjometru
-        get_voltage_in(analog_IN_0, zero_analog_IN_0);
-        
-//        pc.printf("%.3f\t%d\n", get_voltage_in(analog_IN_0, zero_analog_IN_0), t0_t1); // zbyt długo trwa - wstrzymuje procedurę
+      //  t0 = timer.read_us();
+        //if (tsi.readPercentage() < 0.5)
+    
+        //else motor = 0.0; // silnik zatrzyma się po dotknięciu prawej strony potencjometru
+        wait(10);     // "nic nierobienie, żeby się nie zawiesił"  
         
-        i_start += 1;
-        if (i_start == SWITCH_DIR) {
-            i_start = 0;
-            myled = !myled;
-            direction = !direction;
-            if (DIR_switched == 0) {
-                if (SWITCH_DIR == EXC_angle) {
-                    SWITCH_DIR = 2*EXC_angle;
-                    DIR_switched = 1;
-                }
-            }
-        }
-        t1 = timer.read_us();
-        t0_t1 = t1 - t0;
-        wait_us(motor_PWM_period_us);
+        //t1 = timer.read_us();
+        //t0_t1 = t1 - t0;
+        //wait_us(motor_PWM_period_us);
     }
-}
\ No newline at end of file
+}
+