FRDM_wahadlo_torsyjne
Dependencies: mbed BufferedSerial
Fork of FRDM_wahadlo_torsyjne by
Diff: main.cpp
- 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 +} +