FRDM_wahadlo_torsyjne

Dependencies:   mbed BufferedSerial

Fork of FRDM_wahadlo_torsyjne by Wojciech M

main.cpp

Committer:
Pawel_13
Date:
2014-06-10
Revision:
8:434d613f0929
Parent:
6:9414a292d7f2
Child:
9:3540ad710232

File content as of revision 8:434d613f0929:

#include "mbed.h"
#include "TSISensor.h"

int motor_PWM_period_us = 100;  //okres sygnału PWM (w mikrosekundach) wyzwalającego kolejny krok silnika

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;

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
}


int main() {    
    motor.period_us(motor_PWM_period_us);
    motor = 0.0;
    pc.baud(19200); // największa szybkość standardowa, jaką można zadać

    int i_start = 0;
    int EXC_angle = 3200/3;       //360 stopni / 1
    int DIR_switched = 0;
    int SWITCH_DIR = EXC_angle;
    
    wait(15);                   //czas na ustawienia początkowe 15 sek.
    
    int zero_analog_IN_0 = analog_IN_0.read();
    int zero_analog_IN_1 = analog_IN_1.read();
    
    while (true) {
        if (tsi.readPercentage() < 0.5)
            motor = 0.5;
        else motor = 0.0; // silnik zatrzyma się po dotknięciu prawej strony potencjometru
                
//        pc.printf("%.2f\n", get_voltage_in(analog_IN_0, zero_analog_IN_0)); // zbyt długo wstrzymuje procedurę
        
        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;
                }
            }
        }
        wait_us(motor_PWM_period_us);
    }
}