New xbee sent protocol

Dependencies:   mbed C12832 XBee

Revision:
3:a7a7dc5e687f
Parent:
2:2bf280435a91
Child:
4:ccfba1cbb448
--- a/main.cpp	Wed Mar 23 11:50:22 2016 +0000
+++ b/main.cpp	Wed Mar 23 12:47:46 2016 +0000
@@ -16,7 +16,7 @@
 
 C12832 lcd(p5, p7, p6, p8, p11);    //Used for the LCD
 
-char Source=0b00000010;
+char Source=0b00000010; //ID hardcoden
 char Des=0b00000001;
 char Item,Status,Checksum;
 
@@ -24,151 +24,144 @@
 
 bool sending=1;
 
-char control[4];
+char control[6];
 int teller;
 
 Timer t;
-
+//methode om te verzenden
 void send(){
-    xbee.putc(0x7E);
-    xbee.putc(Source);
-    xbee.putc(Des);
-    xbee.putc(Item);
-    xbee.putc(Status);
-    xbee.putc(Checksum);
-    xbee.putc(0x7E);
+    xbee.putc(0x7E);    //beginflag
+    xbee.putc(Source);  //waarvan wordt er verzonden
+    xbee.putc(Des);     //naar waar wordt er verzonden
+    xbee.putc(Item);    //over welke knop gaat het
+    xbee.putc(Status);  //wat is de nieuwe status van de knop
+    xbee.putc(Checksum);//controle van het bericht
+    xbee.putc(0x7E);    //eindflag
 }
-
+//methode als de joystick omhoog komt
  void CalChecksumup(){
-    Status=0b00000000;
+    Status=0b00000000; //status op "omhoog zetten"
     myled1=1;
     lcd.cls();
     lcd.locate(0,3);
-    if(up.read()&&!left.read()&&!right.read()){
-        lcd.printf("up");
-        Item=0b00000000;
+    if(up.read()&&!left.read()&&!right.read()){ //als de joystick enkel omhoog staat 
+        lcd.printf("up");                       
+        Item=0b00000000;                        //item wordt joystick 0°
     }
-    if(up.read()&&right.read()){
+    if(up.read()&&right.read()){                //als de joystick enkel rechtsomhoog staat 
         lcd.printf("upright");
-        Item=0b00000001;
+        Item=0b00000001;                        //item wordt joystick 45°
     }
-    if(right.read()&&!up.read()&&!down.read()){
+    if(right.read()&&!up.read()&&!down.read()){ //als de joystick rechts staat 
         lcd.printf("right");
-        Item=0b00000010;
+        Item=0b00000010;                        //item wordt joystick 90°
     }
-    if(down.read()&&right.read()){
+    if(down.read()&&right.read()){              //als de joystick rechtsomlaag staat
         lcd.printf("downright");
-        Item=0b00000011;
+        Item=0b00000011;                        //item wordt joystick 135°
     }
-    if(down.read()&&!left.read()&&!right.read()){
+    if(down.read()&&!left.read()&&!right.read()){//als de joystick omlaag staat
         lcd.printf("down");
-        Item=0b00000100;
+        Item=0b00000100;                        //item wordt joystick 180°
     }
-    if(down.read()&&left.read()){
+    if(down.read()&&left.read()){               //als joystick linkomlaag staat
         lcd.printf("downleft");
-        Item=0b00000101;
+        Item=0b00000101;                        //item wordt joystick 225°
     }
-    if(left.read()&&!up.read()&&!down.read()){
+    if(left.read()&&!up.read()&&!down.read()){  //als joystick link staat
         lcd.printf("left");
-        Item=0b00000110;
+        Item=0b00000110;                        //item wordt joystick 270°
     }
-    if(up.read()&&left.read()){
+    if(up.read()&&left.read()){                 //als joystick linksomhoog staat
         lcd.printf("upleft");
-        Item=0b00000111;
+        Item=0b00000111;                        //item wordt joystick 315°
     }
-    Checksum=(Source+Des+Item+Status)%255;
-    sending=0;
-    send();
-    t.start();
+    Checksum=(Source+Des+Item+Status)%255;      //de checksum wordt berekend
+    sending=0;                                  //sending wordt op nul gezet zodat de xbee kan lezen
+    send();                                     //de methode send wordt aangeroepen
+    t.start();                                  //een timer wordt gestart
 }
-
+//methode als de joystick terug losgelaten worden
  void CalChecksumdown(){
-    Status=0b00000001;
+    Status=0b00000001;          //status wordt op omlaag gezet
     myled1=0;
     lcd.cls();
     lcd.locate(0,3);
-    if(Item==0b00000000){
+    if(Item==0b00000000){       //als de joystick omhoog stond wordt deze als omlaag verzonden
         lcd.printf("back");
         Item=0b00000000;
     }
-    if(Item==0b00000001){
+    if(Item==0b00000001){       //als de joystick rechtsomhoog stond wordt deze als omlaag verzonden
         lcd.printf("back");
         Item=0b00000001;
-        if(up.read()){
+        if(up.read()){          //als de joystick naar omhoog verplaatst wordt, wordt de status overschreven naar hoog en de item naar 0°
             Item=0b00000000;
             Status=0b00000000;
-            send();
         }
-        if(right.read()){
+        if(right.read()){       //als de joystick naar rechts verplaatst wordt, wordt de status overschreven naar hoog en de item naar 90°
             Item=0b00000010;
             Status=0b00000000;
-            send();
         }
     }
-    if(Item==0b00000010){
+    if(Item==0b00000010){       //als de joystick naar rechts stond wordt deze als omlaag verzonden
         lcd.printf("back");
         Item=0b00000010;
     }
-    if(Item==0b00000011){
-        if(right.read()){
+    if(Item==0b00000011){       //als de joystick naar rechtsonder stond wordt dezel als omlaag verzonden
+        lcd.printf("back");
+        Item=0b00000011;
+        if(right.read()){       //als de joystick naar rechts verplaatst wordt, wordt de status overschreven naar hoog en de item naar 90°
             Item=0b00000010;
             Status=0b00000000;
-            send();
         }
-        if(down.read()){
+        if(down.read()){        //als de joystick naar onder verplaatst wordt, wordt de status overschreven naar hoog en de item naar 180°
             Item=0b00000100;
             Status=0b00000000;
-            send();
         }
-        lcd.printf("back");
-        Item=0b00000011;
     }
-    if(Item==0b00000100){
+    if(Item==0b00000100){       //als de joystick naar onder stond wordt deze als omlaag verzonden
         lcd.printf("back");
         Item=0b00000100;
     }
-    if(Item==0b00000101){
-        if(down.read()){
+    if(Item==0b00000101){       //als de joystick naar linksonder stond wordt deze als omlaag verzonden
+        lcd.printf("back");
+        Item=0b00000101;
+        if(down.read()){        //als de joystick naar onder verplaatst wordt, wordt de status overschreven naar hoog en de item naar 180°
             Item=0b00000100;
             Status=0b00000000;
-            send();
         }
-        if(left.read()){
+        if(left.read()){        //als de joystick naar links verplaatst wordt, wordt de status overschreven naar hoog en de item naar 270°
             Item=0b00000110;
             Status=0b00000000;
-            send();
         }
-        lcd.printf("back");
-        Item=0b00000101;
     }
-    if(Item==0b00000110){
+    if(Item==0b00000110){       //als de joystick naar links stond wordt deze als omlaag verzonden
         lcd.printf("back");
         Item=0b00000110;
     }
-    if(Item==0b00000111){
-        if(left.read()){
+    if(Item==0b00000111){       //als de joystick naar linksboven stond wordt deze als omlaag verzonden
+        lcd.printf("back");
+        Item=0b00000111;
+        if(left.read()){        //als de joystick naar links verplaatst wordt, wordt de status overschreven naar hoog en de item naar 270°
             Item=0b00000110;
             Status=0b00000000;
-            send();
         }
-        if(up.read()){
+        if(up.read()){          //als de joystick naar boven verplaatst wordt, wordt de status overschreven naar hoog en de item naar 0°
             Item=0b00000000;
             Status=0b00000000;
-            send();
         }
-        lcd.printf("back");
-        Item=0b00000111;
     }
-    Checksum=(Source+Des+Item+Status)%255;
-    sending=0;
-    send();
-    t.start();
+    Checksum=(Source+Des+Item+Status)%255;// de checksum wordt berekend
+    sending=0;                            //sending wordt op 0 gezet zodat de xbee kan ontvangne
+    send();                               //de send methode wordt aangeroepen
+    t.start();                            //de timer wordt gestart
 }
 
 int main() {
-    xbee.baud(57600);
+    xbee.baud(57600);//initatilatien van de xbee
     while(1) {
-        if(sending){
+        if(sending){//als sendeing =1 is kan er verzonden worden
+            //als de joystick omhoog of terug bewogen word zal de functie up of down aangeroepen worden
             up.rise(&CalChecksumup);
             up.fall(&CalChecksumdown);
             down.rise(&CalChecksumup);
@@ -178,46 +171,53 @@
             right.rise(&CalChecksumup);
             right.fall(&CalChecksumdown);
         }
-        if(!sending){
-            if(xbee.readable()) {       //Checks if the data is readable
-                xbee.gets(control,5);        //Get the first character that's in the buffer
-                if(control[3]==0b00001111){
-                    sending=1;
-                    lcd.cls();
-                    lcd.locate(0,3);
-                    lcd.printf("ACK");
-                    t.stop();
-                    t.reset();
-                    teller=0;
-                    while(i<5){
-                        control[i]=0;
-                        i++;
+        if(!sending){                       //als sending =0 is kan de xbee de ack of nack lezen
+            if(xbee.readable()) {           //Checks if the data is readable
+                xbee.gets(control,6);       //de xbee leest de ontvangen frame in de array in
+                if(control[0]==0x7D){        //als de beginflag ontvangen is wordt er gekeken of de eindflag juist ontvangen is
+                    if(control[5]==0x7D){    //als de eindflag juist ontvangne is wordt de checksum gecontroleerd
+                        Checksum=(control[1]+control[2]+control[3])%255;
+                        if(Checksum==control[4]){   //als de checksum correct is wordt er bekeken of het ACK of NACK signaal ontvan is 
+                            if(control[3]==0b00001111){ //als het ACK ontvangen is
+                                sending=1;                  //sending wordt terug op 1 gezet waardoor er terug een knop verzonden kan worden
+                                lcd.cls();
+                                lcd.locate(0,3);
+                                lcd.printf("ACK");
+                                t.stop();                   //de timer wordt gestopt en gereset
+                                t.reset();
+                                teller=0;                   //de teller wordt op nul gezet
+                                while(i<7){                 //de controle array wordt gewist
+                                    control[i]=0;
+                                    i++;
+                                }
+                                i=0;
+                            }
+                            if(control[3]==0b11110000){     //als de checksum niet correct is
+                                lcd.cls();
+                                lcd.locate(0,3);
+                                lcd.printf("NACK");
+                                if(teller<10){              //wordt er max 10 maal de frames herzonden
+                                    send();
+                                    teller++;
+                                }
+                                if(teller==10){             //als het signaal na 10 maal niet correct wordt doorgestuurd wordt het ge negeert
+                                    sending=1;
+                                    teller=0;
+                                }   
+                                lcd.cls();
+                                lcd.locate(0,3);
+                                lcd.printf("NO REACTION");
+                            }
+                        }   
                     }
-                    i=0;
+                    if(t>=1){   //als er na 1 seconden geen signaal aankomt wordt deze herzonden
+                        t.stop();
+                        t.reset();
+                        send();
+                        t.start();
+                    }
                 }
-                if(control[3]==0b11110000){
-                    lcd.cls();
-                    lcd.locate(0,3);
-                    lcd.printf("NACK");
-                    if(teller<10){
-                        send();
-                        teller++;
-                    }
-                    if(teller==10){
-                        sending=1;
-                        teller=0;
-                    }   
-                    lcd.cls();
-                    lcd.locate(0,3);
-                    lcd.printf("NO REACTION");
-                }
-            }   
-        }
-        if(t>=1){
-            t.stop();
-            t.reset();
-            send();
-            t.start();
-        }
+            }
+        }   
     }
 }
\ No newline at end of file