Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed BufferedSerial
Fork of FRDM_wahadlo_torsyjne by
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);
}
}
