New xbee sent protocol
Dependencies: mbed C12832 XBee
Revision 4:ccfba1cbb448, committed 2016-03-23
- Comitter:
- nnoitre
- Date:
- Wed Mar 23 12:54:59 2016 +0000
- Parent:
- 3:a7a7dc5e687f
- Commit message:
- Update commentaar
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Wed Mar 23 12:47:46 2016 +0000 +++ b/main.cpp Wed Mar 23 12:54:59 2016 +0000 @@ -16,7 +16,7 @@ C12832 lcd(p5, p7, p6, p8, p11); //Used for the LCD -char Source=0b00000010; //ID hardcoden +char ID=0b00000010; //ID hardcoden char Des=0b00000001; char Item,Status,Checksum; @@ -31,7 +31,7 @@ //methode om te verzenden void send(){ xbee.putc(0x7E); //beginflag - xbee.putc(Source); //waarvan wordt er verzonden + xbee.putc(ID); //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 @@ -76,7 +76,7 @@ lcd.printf("upleft"); Item=0b00000111; //item wordt joystick 315° } - Checksum=(Source+Des+Item+Status)%255; //de checksum wordt berekend + Checksum=(ID+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 @@ -151,7 +151,7 @@ Status=0b00000000; } } - Checksum=(Source+Des+Item+Status)%255;// de checksum wordt berekend + Checksum=(ID+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 @@ -174,50 +174,54 @@ 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[2]==ID){ //als de boodschap voor deze module bedoelt is + if(control[1]==Des){ //als de afzender correct is + 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"); + } + } } - 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"); + if(t>=1){ //als er na 1 seconden geen signaal aankomt wordt deze herzonden + t.stop(); + t.reset(); + send(); + t.start(); } - } + } } - if(t>=1){ //als er na 1 seconden geen signaal aankomt wordt deze herzonden - t.stop(); - t.reset(); - send(); - t.start(); - } - } + } } - } + } } } \ No newline at end of file