FRDM_wahadlo_torsyjne

Dependencies:   mbed BufferedSerial

Fork of FRDM_wahadlo_torsyjne by Wojciech M

main.cpp

Committer:
wojtekmir
Date:
2014-06-12
Revision:
10:497e9a0da7d6
Parent:
9:3540ad710232
Child:
11:b3bd4b86f914

File content as of revision 10:497e9a0da7d6:

#include "mbed.h"
#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

AnalogIn analog_IN_0(PTB0);     //odczyt napięć z wejść analogowych (kąty obrotu)
AnalogIn analog_IN_1(PTB1);

PwmOut motor(PTA5);             //sygnał PWM do sterowania sterownikiem silnika krokowego
Serial pc(USBTX,USBRX);         //komunikacja z PC

TSISensor tsi;

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() { 
    //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(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); 
    
    
    motor = 0.5;
    
    //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)
    
        //else motor = 0.0; // silnik zatrzyma się po dotknięciu prawej strony potencjometru
        wait(10);     // "nic nierobienie, żeby się nie zawiesił"  
        
        //t1 = timer.read_us();
        //t0_t1 = t1 - t0;
        //wait_us(motor_PWM_period_us);
    }
}