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: HCSR04v2 Servo mbed
Fork of STM_read by
Revision 3:1a391dd91a35, committed 2016-06-24
- Comitter:
- jguzik
- Date:
- Fri Jun 24 13:43:08 2016 +0000
- Parent:
- 2:26a9f90142a0
- Child:
- 4:84f836aaf390
- Commit message:
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Tue Jun 21 09:19:17 2016 +0000
+++ b/main.cpp Fri Jun 24 13:43:08 2016 +0000
@@ -16,15 +16,15 @@
char bufor[BufferSize];
char prawa[3];
char lewa[3];
-char poziom[2];
-char pion[2];
+char dodaj_poziom[2];
+char dodaj_pion[2];
+int akt_pion=0, akt_poziom=0;
int l=0;
int p=0;
int po=0;
int pi=0;
Timer t, t_sonar;
long distance;
-
//*************** Funkcja czyszczaca bufor *****************
void cleanBuffer(char *buffor)
@@ -34,6 +34,27 @@
buffor[BufferSize]=NULL;
}
+char* intToChar(int value, char tab[3])
+{
+ tab[0]= (char)(value/100 + 48);
+ tab[1]= (char)((value-(100*(value/100)))/10 + 48);
+ tab[2]= (char)(value-(100*(value/100))-(10*((value-(100*(value/100)))/10)) + 48);
+ /*stm.printf("Tablica z distance to: ");
+ for (int i=0; i<3; ++i)
+ stm.printf("%c",tab[i]);
+ stm.printf("\n");*/
+ return tab;
+}
+
+void send2rpi(char tag, int wartosc){
+ char tablicaf[3];
+ stm.putc(tag);
+ intToChar(wartosc, tablicaf);
+ for (int f=0; f<3; f++){
+ stm.putc(tablicaf[f]);
+ }
+}
+
//***************OPIS FUNKCJI isCorrectPacket******************************************************//
// funkcja sprawdza czy ramka spelnia wymagania protokolu: @ZCCCZCCC$ lub &ZCCCZCCC$ gdzie Z={+/-} C={0,1,...9} //
//*******************KONIEC OPISU******************************************************************//
@@ -41,39 +62,33 @@
bool isCorrectPacket(char *buffor){
if (bufor[0]!='@')
{
- // stm.printf("ZLY ZNAK POCZATKU\n");
- stm.printf("blad\n");
+ // stm.printf("ZLY ZNAK POCZATKU\n");
return false;
}
if((buffor[1] != '+') && (buffor[1] != '-'))
{
- // stm.printf("ZLY ZNAK +/- LEWY\n");
- stm.printf("blad\n");
+ // stm.printf("ZLY ZNAK +/- LEWY\n");
return false;
}
if((buffor[5] != '+') && (buffor[5] != '-'))
{
- // stm.printf("ZLY ZNAK +/- PRAWY\n");
- stm.printf("blad\n");
+ // stm.printf("ZLY ZNAK +/- PRAWY\n");
return false;
}
if((bufor[9]!='$')&&(bufor[9]!='&'))
{
// stm.printf("ZLY ZNAK KONCA\n");
- stm.printf("blad\n");
- return false;
+ 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");
+ // stm.printf("NA PRAWE KOLO: NIE LICZBA\n");
return false;
}
}
@@ -81,7 +96,7 @@
return true;
}
-void move_wheels()
+void actualize_speed()
{
//*******PRZYPISANIE DO TABLICY LEWEJ LICZBY*********//
for(int j=0; j<=2; j++){
@@ -100,92 +115,127 @@
}
if(abs(p)>100){
p=100;
- }
- //************WYPISYWANIE*******************//
- for(int j=0; j<=BufferSize; j++){
- stm.putc(bufor[j]);
- }
+ }
//******KOREKCJA ZNAKU***********//
if(bufor[1]=='-') l=-l;
- if(bufor[5]=='-') p=-p;
- //**********ODPALANIE SILNIKOW******//
+ if(bufor[5]=='-') p=-p;
+
+}
+
+
+void move_wheels()
+{
eng_left.move(l);
eng_right.move(p);
}
-void move_camera()
-{
+
+void actualize_servo_values()
+{
//*******PRZYPISANIE DO KAMERY POZIOM*********//
for(int m=0; m<2; m++){
- poziom[m]=bufor[m+3];
+ dodaj_poziom[m]=bufor[m+3];
}
//*******PRZYPISANIE DO KAMERY PION*********//
for(int n=0; n<2; n++){
- pion[n]=bufor[n+7];
+ dodaj_pion[n]=bufor[n+7];
}
//*******KONWERSJA CHAROW NA INTY*********//
- sscanf(poziom, "%2d", &po);
- sscanf(pion, "%2d", &pi);
- //********KOREKCJA***************//
- if(abs(po)>90){
- po=90;
- }
- if(abs(pi)>90){
- pi=90;
- }
- //************WYPISYWANIE*******************//
- for(int j=0; j<=BufferSize; j++){
- stm.putc(bufor[j]);
- }
+ sscanf(dodaj_poziom, "%2d", &po);
+ sscanf(dodaj_pion, "%2d", &pi);
+ //********KOREKCJA***************//
if(bufor[1]=='-') po=-po;
if(bufor[5]=='-') pi=-pi;
- //**********RUCH KAMERĄ******//
- cam_poziom.position(po);
- cam_pion.position(pi);
+
+ akt_poziom = akt_poziom + po;
+ akt_pion = akt_pion + pi;
+
+ if(akt_poziom>90)
+ akt_poziom=90;
+ else if (akt_poziom<-90)
+ akt_poziom=-90;
+
+ if(akt_pion>90)
+ akt_pion=90;
+ else if (akt_pion<-90)
+ akt_poziom=-90;
}
+
+void move_camera()
+{
+ cam_poziom.position(akt_poziom);
+ cam_pion.position(akt_pion);
+}
+
+
+
int main(){
int i = 0;
cleanBuffer(bufor);
stm.baud(115200);
t_sonar.start();
- while(true){
- if(t.read_ms()>200){ //jesli przez ponad 200ms nie ma nowej ramki, zatrzymujemy robota
+ distance = 0;
+ move_camera();
+
+ while(true)
+ {
+
+ if(t.read_ms()>500){ //jesli przez ponad 200ms nie ma nowej ramki, zatrzymujemy robota
eng_left.move(0);
eng_right.move(0);
}
if(t_sonar.read_ms()>1200){
distance = sensor.distance();
- stm.printf("dystans %d \n",distance);
t_sonar.stop();
t_sonar.reset();
t_sonar.start();
}
- if(bufor[9] == NULL){
+ if(bufor[9] == NULL)
+ {
bufor[i] = stm.getc();
- if(i==0){
+ if(i==0)
+ {
if(bufor[i]=='@') //zaczynamy zapelniac bufor jak dostaniemy @
++i;
}
- else if(bufor[i]=='@'){ // i != 0 //interpretujemy jakby potencjalny poczatek ramki
+ else if(bufor[i]=='@')
+ { // i != 0 //interpretujemy jakby potencjalny poczatek ramki
cleanBuffer(bufor);
bufor[0]='@';
i=1; //bo zerowy znak '@' juz zczytal
- }
+ }
else i++;
- continue;
+
+ continue;
}
- if(isCorrectPacket(bufor)){
+ if(isCorrectPacket(bufor))
+ {
t.stop();
t.reset();
- t.start();
+ t.start();
}
if(bufor[9]=='$'){
- move_wheels();
+ actualize_speed();
+ if(distance>25){
+ move_wheels();
+ }
+ else if (distance<=25){
+ if(l<=0 && p<=0 || l*p<0){
+ move_wheels();
+ }
+ else{
+ eng_left.move(0);
+ eng_right.move(0);
+ }
+ }
}
else if(bufor[9]=='&'){
- move_camera();
+ actualize_servo_values();
+ move_camera();
}
i=0;
+ //send2rpi('s', distance);
cleanBuffer(bufor);
+
}
-}
\ No newline at end of file
+}
