New xbee sent protocol

Dependencies:   mbed C12832 XBee

Committer:
nnoitre
Date:
Wed Mar 23 12:47:46 2016 +0000
Revision:
3:a7a7dc5e687f
Parent:
2:2bf280435a91
Child:
4:ccfba1cbb448
Commentaar

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nnoitre 0:ce2085295a51 1 #include "mbed.h"
nnoitre 1:9ffff91aeeb2 2 #include "C12832.h"
nnoitre 1:9ffff91aeeb2 3 #include "XBee.h"
nnoitre 0:ce2085295a51 4
nnoitre 0:ce2085295a51 5 DigitalOut myled1(LED1);
nnoitre 0:ce2085295a51 6 DigitalOut myled2(LED2);
nnoitre 0:ce2085295a51 7 DigitalOut myled3(LED3);
nnoitre 0:ce2085295a51 8 DigitalOut myled4(LED4);
nnoitre 0:ce2085295a51 9
nnoitre 1:9ffff91aeeb2 10 InterruptIn down(p12);
nnoitre 1:9ffff91aeeb2 11 InterruptIn left(p13);
nnoitre 1:9ffff91aeeb2 12 InterruptIn up(p15);
nnoitre 1:9ffff91aeeb2 13 InterruptIn right(p16);
nnoitre 0:ce2085295a51 14
nnoitre 0:ce2085295a51 15 Serial xbee(p9,p10);
nnoitre 0:ce2085295a51 16
nnoitre 1:9ffff91aeeb2 17 C12832 lcd(p5, p7, p6, p8, p11); //Used for the LCD
nnoitre 1:9ffff91aeeb2 18
nnoitre 3:a7a7dc5e687f 19 char Source=0b00000010; //ID hardcoden
nnoitre 1:9ffff91aeeb2 20 char Des=0b00000001;
nnoitre 1:9ffff91aeeb2 21 char Item,Status,Checksum;
nnoitre 1:9ffff91aeeb2 22
nnoitre 2:2bf280435a91 23 int i;
nnoitre 2:2bf280435a91 24
nnoitre 1:9ffff91aeeb2 25 bool sending=1;
nnoitre 0:ce2085295a51 26
nnoitre 3:a7a7dc5e687f 27 char control[6];
nnoitre 1:9ffff91aeeb2 28 int teller;
nnoitre 0:ce2085295a51 29
nnoitre 1:9ffff91aeeb2 30 Timer t;
nnoitre 3:a7a7dc5e687f 31 //methode om te verzenden
nnoitre 0:ce2085295a51 32 void send(){
nnoitre 3:a7a7dc5e687f 33 xbee.putc(0x7E); //beginflag
nnoitre 3:a7a7dc5e687f 34 xbee.putc(Source); //waarvan wordt er verzonden
nnoitre 3:a7a7dc5e687f 35 xbee.putc(Des); //naar waar wordt er verzonden
nnoitre 3:a7a7dc5e687f 36 xbee.putc(Item); //over welke knop gaat het
nnoitre 3:a7a7dc5e687f 37 xbee.putc(Status); //wat is de nieuwe status van de knop
nnoitre 3:a7a7dc5e687f 38 xbee.putc(Checksum);//controle van het bericht
nnoitre 3:a7a7dc5e687f 39 xbee.putc(0x7E); //eindflag
nnoitre 1:9ffff91aeeb2 40 }
nnoitre 3:a7a7dc5e687f 41 //methode als de joystick omhoog komt
nnoitre 1:9ffff91aeeb2 42 void CalChecksumup(){
nnoitre 3:a7a7dc5e687f 43 Status=0b00000000; //status op "omhoog zetten"
nnoitre 1:9ffff91aeeb2 44 myled1=1;
nnoitre 1:9ffff91aeeb2 45 lcd.cls();
nnoitre 1:9ffff91aeeb2 46 lcd.locate(0,3);
nnoitre 3:a7a7dc5e687f 47 if(up.read()&&!left.read()&&!right.read()){ //als de joystick enkel omhoog staat
nnoitre 3:a7a7dc5e687f 48 lcd.printf("up");
nnoitre 3:a7a7dc5e687f 49 Item=0b00000000; //item wordt joystick 0°
nnoitre 1:9ffff91aeeb2 50 }
nnoitre 3:a7a7dc5e687f 51 if(up.read()&&right.read()){ //als de joystick enkel rechtsomhoog staat
nnoitre 1:9ffff91aeeb2 52 lcd.printf("upright");
nnoitre 3:a7a7dc5e687f 53 Item=0b00000001; //item wordt joystick 45°
nnoitre 1:9ffff91aeeb2 54 }
nnoitre 3:a7a7dc5e687f 55 if(right.read()&&!up.read()&&!down.read()){ //als de joystick rechts staat
nnoitre 1:9ffff91aeeb2 56 lcd.printf("right");
nnoitre 3:a7a7dc5e687f 57 Item=0b00000010; //item wordt joystick 90°
nnoitre 1:9ffff91aeeb2 58 }
nnoitre 3:a7a7dc5e687f 59 if(down.read()&&right.read()){ //als de joystick rechtsomlaag staat
nnoitre 1:9ffff91aeeb2 60 lcd.printf("downright");
nnoitre 3:a7a7dc5e687f 61 Item=0b00000011; //item wordt joystick 135°
nnoitre 1:9ffff91aeeb2 62 }
nnoitre 3:a7a7dc5e687f 63 if(down.read()&&!left.read()&&!right.read()){//als de joystick omlaag staat
nnoitre 1:9ffff91aeeb2 64 lcd.printf("down");
nnoitre 3:a7a7dc5e687f 65 Item=0b00000100; //item wordt joystick 180°
nnoitre 1:9ffff91aeeb2 66 }
nnoitre 3:a7a7dc5e687f 67 if(down.read()&&left.read()){ //als joystick linkomlaag staat
nnoitre 1:9ffff91aeeb2 68 lcd.printf("downleft");
nnoitre 3:a7a7dc5e687f 69 Item=0b00000101; //item wordt joystick 225°
nnoitre 1:9ffff91aeeb2 70 }
nnoitre 3:a7a7dc5e687f 71 if(left.read()&&!up.read()&&!down.read()){ //als joystick link staat
nnoitre 1:9ffff91aeeb2 72 lcd.printf("left");
nnoitre 3:a7a7dc5e687f 73 Item=0b00000110; //item wordt joystick 270°
nnoitre 1:9ffff91aeeb2 74 }
nnoitre 3:a7a7dc5e687f 75 if(up.read()&&left.read()){ //als joystick linksomhoog staat
nnoitre 1:9ffff91aeeb2 76 lcd.printf("upleft");
nnoitre 3:a7a7dc5e687f 77 Item=0b00000111; //item wordt joystick 315°
nnoitre 1:9ffff91aeeb2 78 }
nnoitre 3:a7a7dc5e687f 79 Checksum=(Source+Des+Item+Status)%255; //de checksum wordt berekend
nnoitre 3:a7a7dc5e687f 80 sending=0; //sending wordt op nul gezet zodat de xbee kan lezen
nnoitre 3:a7a7dc5e687f 81 send(); //de methode send wordt aangeroepen
nnoitre 3:a7a7dc5e687f 82 t.start(); //een timer wordt gestart
nnoitre 1:9ffff91aeeb2 83 }
nnoitre 3:a7a7dc5e687f 84 //methode als de joystick terug losgelaten worden
nnoitre 1:9ffff91aeeb2 85 void CalChecksumdown(){
nnoitre 3:a7a7dc5e687f 86 Status=0b00000001; //status wordt op omlaag gezet
nnoitre 1:9ffff91aeeb2 87 myled1=0;
nnoitre 1:9ffff91aeeb2 88 lcd.cls();
nnoitre 1:9ffff91aeeb2 89 lcd.locate(0,3);
nnoitre 3:a7a7dc5e687f 90 if(Item==0b00000000){ //als de joystick omhoog stond wordt deze als omlaag verzonden
nnoitre 1:9ffff91aeeb2 91 lcd.printf("back");
nnoitre 1:9ffff91aeeb2 92 Item=0b00000000;
nnoitre 1:9ffff91aeeb2 93 }
nnoitre 3:a7a7dc5e687f 94 if(Item==0b00000001){ //als de joystick rechtsomhoog stond wordt deze als omlaag verzonden
nnoitre 1:9ffff91aeeb2 95 lcd.printf("back");
nnoitre 1:9ffff91aeeb2 96 Item=0b00000001;
nnoitre 3:a7a7dc5e687f 97 if(up.read()){ //als de joystick naar omhoog verplaatst wordt, wordt de status overschreven naar hoog en de item naar 0°
nnoitre 1:9ffff91aeeb2 98 Item=0b00000000;
nnoitre 1:9ffff91aeeb2 99 Status=0b00000000;
nnoitre 1:9ffff91aeeb2 100 }
nnoitre 3:a7a7dc5e687f 101 if(right.read()){ //als de joystick naar rechts verplaatst wordt, wordt de status overschreven naar hoog en de item naar 90°
nnoitre 1:9ffff91aeeb2 102 Item=0b00000010;
nnoitre 1:9ffff91aeeb2 103 Status=0b00000000;
nnoitre 1:9ffff91aeeb2 104 }
nnoitre 1:9ffff91aeeb2 105 }
nnoitre 3:a7a7dc5e687f 106 if(Item==0b00000010){ //als de joystick naar rechts stond wordt deze als omlaag verzonden
nnoitre 1:9ffff91aeeb2 107 lcd.printf("back");
nnoitre 1:9ffff91aeeb2 108 Item=0b00000010;
nnoitre 1:9ffff91aeeb2 109 }
nnoitre 3:a7a7dc5e687f 110 if(Item==0b00000011){ //als de joystick naar rechtsonder stond wordt dezel als omlaag verzonden
nnoitre 3:a7a7dc5e687f 111 lcd.printf("back");
nnoitre 3:a7a7dc5e687f 112 Item=0b00000011;
nnoitre 3:a7a7dc5e687f 113 if(right.read()){ //als de joystick naar rechts verplaatst wordt, wordt de status overschreven naar hoog en de item naar 90°
nnoitre 1:9ffff91aeeb2 114 Item=0b00000010;
nnoitre 1:9ffff91aeeb2 115 Status=0b00000000;
nnoitre 1:9ffff91aeeb2 116 }
nnoitre 3:a7a7dc5e687f 117 if(down.read()){ //als de joystick naar onder verplaatst wordt, wordt de status overschreven naar hoog en de item naar 180°
nnoitre 1:9ffff91aeeb2 118 Item=0b00000100;
nnoitre 1:9ffff91aeeb2 119 Status=0b00000000;
nnoitre 1:9ffff91aeeb2 120 }
nnoitre 1:9ffff91aeeb2 121 }
nnoitre 3:a7a7dc5e687f 122 if(Item==0b00000100){ //als de joystick naar onder stond wordt deze als omlaag verzonden
nnoitre 1:9ffff91aeeb2 123 lcd.printf("back");
nnoitre 1:9ffff91aeeb2 124 Item=0b00000100;
nnoitre 1:9ffff91aeeb2 125 }
nnoitre 3:a7a7dc5e687f 126 if(Item==0b00000101){ //als de joystick naar linksonder stond wordt deze als omlaag verzonden
nnoitre 3:a7a7dc5e687f 127 lcd.printf("back");
nnoitre 3:a7a7dc5e687f 128 Item=0b00000101;
nnoitre 3:a7a7dc5e687f 129 if(down.read()){ //als de joystick naar onder verplaatst wordt, wordt de status overschreven naar hoog en de item naar 180°
nnoitre 1:9ffff91aeeb2 130 Item=0b00000100;
nnoitre 1:9ffff91aeeb2 131 Status=0b00000000;
nnoitre 1:9ffff91aeeb2 132 }
nnoitre 3:a7a7dc5e687f 133 if(left.read()){ //als de joystick naar links verplaatst wordt, wordt de status overschreven naar hoog en de item naar 270°
nnoitre 1:9ffff91aeeb2 134 Item=0b00000110;
nnoitre 1:9ffff91aeeb2 135 Status=0b00000000;
nnoitre 1:9ffff91aeeb2 136 }
nnoitre 1:9ffff91aeeb2 137 }
nnoitre 3:a7a7dc5e687f 138 if(Item==0b00000110){ //als de joystick naar links stond wordt deze als omlaag verzonden
nnoitre 1:9ffff91aeeb2 139 lcd.printf("back");
nnoitre 1:9ffff91aeeb2 140 Item=0b00000110;
nnoitre 1:9ffff91aeeb2 141 }
nnoitre 3:a7a7dc5e687f 142 if(Item==0b00000111){ //als de joystick naar linksboven stond wordt deze als omlaag verzonden
nnoitre 3:a7a7dc5e687f 143 lcd.printf("back");
nnoitre 3:a7a7dc5e687f 144 Item=0b00000111;
nnoitre 3:a7a7dc5e687f 145 if(left.read()){ //als de joystick naar links verplaatst wordt, wordt de status overschreven naar hoog en de item naar 270°
nnoitre 1:9ffff91aeeb2 146 Item=0b00000110;
nnoitre 1:9ffff91aeeb2 147 Status=0b00000000;
nnoitre 1:9ffff91aeeb2 148 }
nnoitre 3:a7a7dc5e687f 149 if(up.read()){ //als de joystick naar boven verplaatst wordt, wordt de status overschreven naar hoog en de item naar 0°
nnoitre 1:9ffff91aeeb2 150 Item=0b00000000;
nnoitre 1:9ffff91aeeb2 151 Status=0b00000000;
nnoitre 1:9ffff91aeeb2 152 }
nnoitre 1:9ffff91aeeb2 153 }
nnoitre 3:a7a7dc5e687f 154 Checksum=(Source+Des+Item+Status)%255;// de checksum wordt berekend
nnoitre 3:a7a7dc5e687f 155 sending=0; //sending wordt op 0 gezet zodat de xbee kan ontvangne
nnoitre 3:a7a7dc5e687f 156 send(); //de send methode wordt aangeroepen
nnoitre 3:a7a7dc5e687f 157 t.start(); //de timer wordt gestart
nnoitre 0:ce2085295a51 158 }
nnoitre 0:ce2085295a51 159
nnoitre 0:ce2085295a51 160 int main() {
nnoitre 3:a7a7dc5e687f 161 xbee.baud(57600);//initatilatien van de xbee
nnoitre 0:ce2085295a51 162 while(1) {
nnoitre 3:a7a7dc5e687f 163 if(sending){//als sendeing =1 is kan er verzonden worden
nnoitre 3:a7a7dc5e687f 164 //als de joystick omhoog of terug bewogen word zal de functie up of down aangeroepen worden
nnoitre 1:9ffff91aeeb2 165 up.rise(&CalChecksumup);
nnoitre 1:9ffff91aeeb2 166 up.fall(&CalChecksumdown);
nnoitre 1:9ffff91aeeb2 167 down.rise(&CalChecksumup);
nnoitre 1:9ffff91aeeb2 168 down.fall(&CalChecksumdown);
nnoitre 1:9ffff91aeeb2 169 left.rise(&CalChecksumup);
nnoitre 1:9ffff91aeeb2 170 left.fall(&CalChecksumdown);
nnoitre 1:9ffff91aeeb2 171 right.rise(&CalChecksumup);
nnoitre 1:9ffff91aeeb2 172 right.fall(&CalChecksumdown);
nnoitre 0:ce2085295a51 173 }
nnoitre 3:a7a7dc5e687f 174 if(!sending){ //als sending =0 is kan de xbee de ack of nack lezen
nnoitre 3:a7a7dc5e687f 175 if(xbee.readable()) { //Checks if the data is readable
nnoitre 3:a7a7dc5e687f 176 xbee.gets(control,6); //de xbee leest de ontvangen frame in de array in
nnoitre 3:a7a7dc5e687f 177 if(control[0]==0x7D){ //als de beginflag ontvangen is wordt er gekeken of de eindflag juist ontvangen is
nnoitre 3:a7a7dc5e687f 178 if(control[5]==0x7D){ //als de eindflag juist ontvangne is wordt de checksum gecontroleerd
nnoitre 3:a7a7dc5e687f 179 Checksum=(control[1]+control[2]+control[3])%255;
nnoitre 3:a7a7dc5e687f 180 if(Checksum==control[4]){ //als de checksum correct is wordt er bekeken of het ACK of NACK signaal ontvan is
nnoitre 3:a7a7dc5e687f 181 if(control[3]==0b00001111){ //als het ACK ontvangen is
nnoitre 3:a7a7dc5e687f 182 sending=1; //sending wordt terug op 1 gezet waardoor er terug een knop verzonden kan worden
nnoitre 3:a7a7dc5e687f 183 lcd.cls();
nnoitre 3:a7a7dc5e687f 184 lcd.locate(0,3);
nnoitre 3:a7a7dc5e687f 185 lcd.printf("ACK");
nnoitre 3:a7a7dc5e687f 186 t.stop(); //de timer wordt gestopt en gereset
nnoitre 3:a7a7dc5e687f 187 t.reset();
nnoitre 3:a7a7dc5e687f 188 teller=0; //de teller wordt op nul gezet
nnoitre 3:a7a7dc5e687f 189 while(i<7){ //de controle array wordt gewist
nnoitre 3:a7a7dc5e687f 190 control[i]=0;
nnoitre 3:a7a7dc5e687f 191 i++;
nnoitre 3:a7a7dc5e687f 192 }
nnoitre 3:a7a7dc5e687f 193 i=0;
nnoitre 3:a7a7dc5e687f 194 }
nnoitre 3:a7a7dc5e687f 195 if(control[3]==0b11110000){ //als de checksum niet correct is
nnoitre 3:a7a7dc5e687f 196 lcd.cls();
nnoitre 3:a7a7dc5e687f 197 lcd.locate(0,3);
nnoitre 3:a7a7dc5e687f 198 lcd.printf("NACK");
nnoitre 3:a7a7dc5e687f 199 if(teller<10){ //wordt er max 10 maal de frames herzonden
nnoitre 3:a7a7dc5e687f 200 send();
nnoitre 3:a7a7dc5e687f 201 teller++;
nnoitre 3:a7a7dc5e687f 202 }
nnoitre 3:a7a7dc5e687f 203 if(teller==10){ //als het signaal na 10 maal niet correct wordt doorgestuurd wordt het ge negeert
nnoitre 3:a7a7dc5e687f 204 sending=1;
nnoitre 3:a7a7dc5e687f 205 teller=0;
nnoitre 3:a7a7dc5e687f 206 }
nnoitre 3:a7a7dc5e687f 207 lcd.cls();
nnoitre 3:a7a7dc5e687f 208 lcd.locate(0,3);
nnoitre 3:a7a7dc5e687f 209 lcd.printf("NO REACTION");
nnoitre 3:a7a7dc5e687f 210 }
nnoitre 3:a7a7dc5e687f 211 }
nnoitre 2:2bf280435a91 212 }
nnoitre 3:a7a7dc5e687f 213 if(t>=1){ //als er na 1 seconden geen signaal aankomt wordt deze herzonden
nnoitre 3:a7a7dc5e687f 214 t.stop();
nnoitre 3:a7a7dc5e687f 215 t.reset();
nnoitre 3:a7a7dc5e687f 216 send();
nnoitre 3:a7a7dc5e687f 217 t.start();
nnoitre 3:a7a7dc5e687f 218 }
nnoitre 1:9ffff91aeeb2 219 }
nnoitre 3:a7a7dc5e687f 220 }
nnoitre 3:a7a7dc5e687f 221 }
nnoitre 0:ce2085295a51 222 }
nnoitre 1:9ffff91aeeb2 223 }