![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
main + engine
Fork of AktalnyCZOSN by
main.cpp
- Committer:
- yruiewyrui3
- Date:
- 2016-06-08
- Revision:
- 2:35dd310320e5
- Parent:
- 1:cad75f28ec58
File content as of revision 2:35dd310320e5:
#include "mbed.h" #include "Engine.h" Serial stm(PA_2, PA_3); const int BufferSize=17; char bufor[BufferSize]; char prawa[3]; char lewa[3]; int p=0; int l=0; long counter=0; Timer t; void cleanBuffer(char *buffor) { for(int i=0; i<BufferSize; i++) buffor[i]=NULL; } bool isCorrectPacket(char *buffor){ if(bufor[0]!='@') { // stm.printf("ZLY ZNAK POCZATKU\n"); stm.printf("blad\n"); return false; } if((buffor[1] != '+') && (buffor[1] != '-')) { // stm.printf("ZLY ZNAK +/- LEWY\n"); stm.printf("blad\n"); return false; } if((buffor[5] != '+') && (buffor[5] != '-')) { // stm.printf("ZLY ZNAK +/- PRAWY\n"); stm.printf("blad\n"); return false; } if(bufor[9]!='$') { // stm.printf("ZLY ZNAK MIEDZY INFORMACJAMI\n"); stm.printf("blad\n"); return false; } if(bufor[16]!='&') { // stm.printf("ZLY ZNAK KONCA\n"); stm.printf("blad\n"); return false; } for(int i=2; i< 5; i++){ if(((int)buffor[i]) < 48 || ((int)buffor[i]) > 57) { // stm.printf("NA LEWE KOLO: NIE LICZBA\n"); stm.printf("blad\n"); return false; } if(((int)buffor[i+4]) < 48 || ((int)buffor[i+4]) > 57) { // stm.printf("NA PRAWE KOLO: NIE LICZBA\n"); stm.printf("blad\n"); return false; } if(((int)buffor[i+8]) < 48 || ((int)buffor[i+8]) > 57) { // stm.printf("KAMERA GORA/DOL: NIE LICZBA\n"); stm.printf("blad\n"); return false; } if(((int)buffor[i+11]) < 48 || ((int)buffor[i+11]) > 57) { // stm.printf("KAMERA LEWO/PRAWO: NIE LICZBA\n"); stm.printf("blad\n"); return false; } } //stm.printf("pakiet poprawny\n"); return true; } int main(){ Engine eng_left = Engine(PB_13, PB_4, PB_10); Engine eng_right = Engine(PB_14, PB_5, PB_3); int i = 0; stm.baud(115200); while(true){ if(t.read_ms()>200){ //jesli przez ponad 200ms nie ma nowej ramki, zatrzymujemy robota eng_left.move(0); eng_right.move(0); //stm.printf("TIMEOUT-ROBOT STOP\n"); } //if((bufor[9] == NULL)&&(stm.readable())) if(bufor[9] == NULL) { bufor[i] = stm.getc(); if(i==0){ if(bufor[i]=='@') //zaczynamy zapelniac bufor jak dostaniemy @ ++i; }else if(bufor[i]=='@'){ // i != 0 //interpretujemy jakby potencjalny poczatek ramki cleanBuffer(bufor); //stm.printf("blad\n"); bufor[0]='@'; i=1; //bo zerowy znak '@' juz zczytal //end added part// }else i++; continue; } if(isCorrectPacket(bufor)) { t.stop(); t.reset(); t.start(); counter++; stm.printf("%ld\n", counter); for(int j=0; j<=2; j++) { lewa[j]=bufor[j+2]; } for(int k=0; k<=2; k++) { prawa[k]=bufor[k+6]; } sscanf(prawa, "%3d", &p); sscanf(lewa, "%3d", &l); if(abs(l)>100) { l=100; } if(abs(p)>100) { p=100; } // stm.printf("%ld\n", counter); for(int j=0; j<=BufferSize; j++) //wypisz { stm.printf("%c", bufor[j]); } stm.printf("\n"); //stm.printf("liczba lewa: %d \n", l); //stm.printf("liczba prawa: %d \n", p); if(bufor[1]=='-') l=-l; if(bufor[5]=='-') p=-p; eng_left.move(l); eng_right.move(p); } i=0; cleanBuffer(bufor); } }