tim003 tim003
/
Lv9-Grupa4-Tim003-z2
Pejović Luka Elma Gazetić
main.cpp
- Committer:
- tim003
- Date:
- 2014-05-12
- Revision:
- 0:7ecda32385e2
File content as of revision 0:7ecda32385e2:
#include "mbed.h" #include <cstdlib> Serial pc(USBTX, USBRX); char c[5] = {'0','0','0','0',0}; char * itoa(int i){ for(int i = 0; i < 5; i++) c[i] = '0'; c[4] = 0; c[3] = i%10 + '0'; c[2] = (i/10) % 10 + '0'; c[1] = (i/100) % 10 + '0'; c[0] = (i/1000) % 10 + '0'; return c; } class Motor{ DigitalOut _p1, _p2, _p3, _p4; bool _smjer_cw; int _polozaj; float _brzina;// u sekundama bool _jel_ide; Ticker ticker; void postavi(int i){ switch(i){ case 1: _p1 = 1; _p2 = _p3 = _p4 = 0; break; case 2: _p1 = _p2 = 1; _p3 = _p4 = 0; break; case 3: _p1 = _p3 =_p4 = 0; _p2 = 1; break; case 4: _p1 = _p4 = 0; _p3 = _p2 = 1; break; case 5: _p1 = _p2 =_p4 = 0; _p3 = 1; break; case 6: _p1 = _p2 = 0; _p3 = _p4 = 1; break; case 7: _p1 = _p2 = _p3 = 0; _p4 = 1; break; case 8: _p1 = _p4 = 1; _p2 = _p3 = 0; break; } } void ugajguli(){ _polozaj = 0; //jos skontati postaviti na neki 0 poloza; } public: Motor(PinName p1, PinName p2, PinName p3, PinName p4): _p1(p1), _p2(p2), _p3(p3), _p4(p4), _smjer_cw(true), _brzina(0.6), _jel_ide(false) { ugajguli(); } void cw(float time = 1000){ for(int i = 1; i <= 8; i++){ postavi(i); wait_us(time); } _polozaj = (_polozaj + 1) % 500; } void ccw(float time = 1000){ for(int i = 7; i >= 1; i--){ postavi(i); wait_us(time); } postavi(8); wait_us(time); _polozaj = (_polozaj - 1) % 500; } void napravi_korak(){ if(_smjer_cw) cw(); else ccw(); } void postavi_cw(){_smjer_cw = true;} void postavi_ccw(){_smjer_cw = false;} void promijeni_smjer(){ if(_smjer_cw) _smjer_cw = false; else _smjer_cw = true; } bool Smjer() const { return _smjer_cw;} void postavi_brzinu(float sekunde){ _brzina = sekunde; if(_jel_ide){ stani(); kreni(); } } void idi_na(int i, bool smjer = true){ i %= 500; if(smjer) { while(_polozaj != i){ cw(); wait_us(1000); } } else { while(_polozaj != i){ ccw(); wait_us(1000); } } } void idi_na_polozaj(int kut){ kut%=360; char buf[20]; pc.puts(itoa(kut)); int p = int(kut*1.62 + 0.5); idi_na(p, true); } void kreni(){ if(_jel_ide) ticker.detach(); ticker.attach(this, &Motor::napravi_korak, _brzina); _jel_ide = true; } void stani(){ if(_jel_ide) ticker.detach(); _jel_ide = false; } void okreni(int kut){ int p = kut*1.62 + 0.5; while(p > 0){ napravi_korak(); p--; } /*if(kut >= 0){ int p = kut*1.62 + 0.5; while(p > 0){ cw(); p--; } } else { kut *= -1; int p = kut*1.62 + 0.5; while(p > 0){ ccw(); p--; } }*/ } }; Motor motor(dp13, dp11, dp10, dp9); int uzmiBroj(){ char c = pc.getc(); int broj = 0; while(c >= '0' && c <= '9'){ broj *= 10; broj += c - '0'; c=pc.getc(); } pc.putc('o'); pc.putc('k'); return broj; } void funkcija(){ if(!pc.readable()) return; switch(pc.getc()) { case'K': motor.kreni(); break; case'S': motor.stani(); break; case'I': int i = uzmiBroj(); motor.idi_na_polozaj(i); break; case 'O': motor.okreni(uzmiBroj()); break; case'P': motor.promijeni_smjer(); break; } } int main(){ motor.postavi_brzinu(0.01); pc.attach(funkcija); while(1){ } }