FRDM_wahadlo_torsyjne

Dependencies:   mbed BufferedSerial

Fork of FRDM_wahadlo_torsyjne by Wojciech M

main.cpp

Committer:
wojtekmir
Date:
2014-06-14
Revision:
12:103f3fbeab78
Parent:
11:b3bd4b86f914
Child:
13:8810ad3ccc04

File content as of revision 12:103f3fbeab78:

#include "mbed.h"
#include "TSISensor.h"
//#include "Timer.h"

Ticker triger1;                                             //przerwanie sterowania silnikiem
Ticker triger2;                                             //przerwanie wysyłania danych
//TSISensor tsi;                                              //sensor dotykowy

int motor_PWM_period_us = 200;                              //okres sygnału PWM (w mikrosekundach) wyzwalającego kolejny krok silnika
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 zero_analog_IN_0 = 0;
int zero_analog_IN_1 = 0;
 
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
AnalogIn analog_IN_0(PTB0);                                 //odczyt napięcia z wejścia analogowego 0 (kąt obrotu kolumny)
AnalogIn analog_IN_1(PTB1);                                 //odczyt napięcia z wejścia analogowego 1 (kąt obrotu ciała swobodnego)
PwmOut motor(PTA5);                                         //sygnał PWM do sterowania sterownikiem silnika krokowego
Serial pc(USBTX,USBRX);                                     //komunikacja z PC

//Timer timer;

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() { 
        myled = !myled;
        direction = !direction;
} 

void task2() { 
    get_voltage_in(analog_IN_0, zero_analog_IN_0);
    get_voltage_in(analog_IN_1, zero_analog_IN_1);
    pc.printf("%.3f\t%.3f\n", get_voltage_in(analog_IN_0, zero_analog_IN_0), get_voltage_in(analog_IN_1, zero_analog_IN_1));
} 

int main() {    
    motor.period_us(motor_PWM_period_us);
    motor = 0.5;                                // wypełnienie PWM sygnału CLK
    pc.baud(115200);                            // największa szybkość standardowa, jaką można zadać to 19200  
                                                //dla 115200 mamy mniejsze czasy wysyłania (możemy wysyłać częściej- co 10ms
    zero_analog_IN_0 = analog_IN_0.read();
    zero_analog_IN_1 = analog_IN_1.read();
    wait(5);                                    //czas na ustawienia początkowe 5 sek.   
    triger2.attach(&task2, 0.02);
    triger1.attach(&task1, switch_dir_time);  

    while (true) {
//        if (tsi.readPercentage() < 0.5)
//            motor = 0.5;
//        else motor = 0.0;
        wait(10);     // "nic nierobienie, żeby się nie zawiesił"  
    }
}