New xbee sent protocol
Dependencies: mbed C12832 XBee
Diff: main.cpp
- 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