New xbee sent protocol

Dependencies:   mbed C12832 XBee

Committer:
nnoitre
Date:
Tue Mar 22 12:01:02 2016 +0000
Revision:
1:9ffff91aeeb2
Parent:
0:ce2085295a51
Child:
2:2bf280435a91
Newer version

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 0:ce2085295a51 19 char Source=0b00000010;
nnoitre 1:9ffff91aeeb2 20 char Des=0b00000001;
nnoitre 1:9ffff91aeeb2 21 char Item,Status,Checksum;
nnoitre 1:9ffff91aeeb2 22
nnoitre 1:9ffff91aeeb2 23 bool sending=1;
nnoitre 0:ce2085295a51 24
nnoitre 1:9ffff91aeeb2 25 char control[4];
nnoitre 1:9ffff91aeeb2 26 int teller;
nnoitre 0:ce2085295a51 27
nnoitre 1:9ffff91aeeb2 28 Timer t;
nnoitre 0:ce2085295a51 29
nnoitre 0:ce2085295a51 30 void send(){
nnoitre 0:ce2085295a51 31 xbee.putc(0x7E);
nnoitre 0:ce2085295a51 32 xbee.putc(Source);
nnoitre 0:ce2085295a51 33 xbee.putc(Des);
nnoitre 0:ce2085295a51 34 xbee.putc(Item);
nnoitre 0:ce2085295a51 35 xbee.putc(Status);
nnoitre 0:ce2085295a51 36 xbee.putc(Checksum);
nnoitre 0:ce2085295a51 37 xbee.putc(0x7E);
nnoitre 1:9ffff91aeeb2 38 }
nnoitre 1:9ffff91aeeb2 39
nnoitre 1:9ffff91aeeb2 40 void CalChecksumup(){
nnoitre 1:9ffff91aeeb2 41 Status=0b00000000;
nnoitre 1:9ffff91aeeb2 42 myled1=1;
nnoitre 1:9ffff91aeeb2 43 lcd.cls();
nnoitre 1:9ffff91aeeb2 44 lcd.locate(0,3);
nnoitre 1:9ffff91aeeb2 45 if(up.read()&&!left.read()&&!right.read()){
nnoitre 1:9ffff91aeeb2 46 lcd.printf("up");
nnoitre 1:9ffff91aeeb2 47 Item=0b00000000;
nnoitre 1:9ffff91aeeb2 48 }
nnoitre 1:9ffff91aeeb2 49 if(up.read()&&right.read()){
nnoitre 1:9ffff91aeeb2 50 lcd.printf("upright");
nnoitre 1:9ffff91aeeb2 51 Item=0b00000001;
nnoitre 1:9ffff91aeeb2 52 }
nnoitre 1:9ffff91aeeb2 53 if(right.read()&&!up.read()&&!down.read()){
nnoitre 1:9ffff91aeeb2 54 lcd.printf("right");
nnoitre 1:9ffff91aeeb2 55 Item=0b00000010;
nnoitre 1:9ffff91aeeb2 56 }
nnoitre 1:9ffff91aeeb2 57 if(down.read()&&right.read()){
nnoitre 1:9ffff91aeeb2 58 lcd.printf("downright");
nnoitre 1:9ffff91aeeb2 59 Item=0b00000011;
nnoitre 1:9ffff91aeeb2 60 }
nnoitre 1:9ffff91aeeb2 61 if(down.read()&&!left.read()&&!right.read()){
nnoitre 1:9ffff91aeeb2 62 lcd.printf("down");
nnoitre 1:9ffff91aeeb2 63 Item=0b00000100;
nnoitre 1:9ffff91aeeb2 64 }
nnoitre 1:9ffff91aeeb2 65 if(down.read()&&left.read()){
nnoitre 1:9ffff91aeeb2 66 lcd.printf("downleft");
nnoitre 1:9ffff91aeeb2 67 Item=0b00000101;
nnoitre 1:9ffff91aeeb2 68 }
nnoitre 1:9ffff91aeeb2 69 if(left.read()&&!up.read()&&!down.read()){
nnoitre 1:9ffff91aeeb2 70 lcd.printf("left");
nnoitre 1:9ffff91aeeb2 71 Item=0b00000110;
nnoitre 1:9ffff91aeeb2 72 }
nnoitre 1:9ffff91aeeb2 73 if(up.read()&&left.read()){
nnoitre 1:9ffff91aeeb2 74 lcd.printf("upleft");
nnoitre 1:9ffff91aeeb2 75 Item=0b00000111;
nnoitre 1:9ffff91aeeb2 76 }
nnoitre 1:9ffff91aeeb2 77 Checksum=(Source+Des+Item+Status)%255;
nnoitre 1:9ffff91aeeb2 78 sending=0;
nnoitre 1:9ffff91aeeb2 79 send();
nnoitre 1:9ffff91aeeb2 80 t.start();
nnoitre 1:9ffff91aeeb2 81 }
nnoitre 1:9ffff91aeeb2 82
nnoitre 1:9ffff91aeeb2 83 void CalChecksumdown(){
nnoitre 1:9ffff91aeeb2 84 Status=0b00000001;
nnoitre 1:9ffff91aeeb2 85 myled1=0;
nnoitre 1:9ffff91aeeb2 86 lcd.cls();
nnoitre 1:9ffff91aeeb2 87 lcd.locate(0,3);
nnoitre 1:9ffff91aeeb2 88 if(Item==0b00000000){
nnoitre 1:9ffff91aeeb2 89 lcd.printf("back");
nnoitre 1:9ffff91aeeb2 90 Item=0b00000000;
nnoitre 1:9ffff91aeeb2 91 }
nnoitre 1:9ffff91aeeb2 92 if(Item==0b00000001){
nnoitre 1:9ffff91aeeb2 93 lcd.printf("back");
nnoitre 1:9ffff91aeeb2 94 Item=0b00000001;
nnoitre 1:9ffff91aeeb2 95 if(up.read()){
nnoitre 1:9ffff91aeeb2 96 Item=0b00000000;
nnoitre 1:9ffff91aeeb2 97 Status=0b00000000;
nnoitre 1:9ffff91aeeb2 98 send();
nnoitre 1:9ffff91aeeb2 99 }
nnoitre 1:9ffff91aeeb2 100 if(right.read()){
nnoitre 1:9ffff91aeeb2 101 Item=0b00000010;
nnoitre 1:9ffff91aeeb2 102 Status=0b00000000;
nnoitre 1:9ffff91aeeb2 103 send();
nnoitre 1:9ffff91aeeb2 104 }
nnoitre 1:9ffff91aeeb2 105 }
nnoitre 1:9ffff91aeeb2 106 if(Item==0b00000010){
nnoitre 1:9ffff91aeeb2 107 lcd.printf("back");
nnoitre 1:9ffff91aeeb2 108 Item=0b00000010;
nnoitre 1:9ffff91aeeb2 109 }
nnoitre 1:9ffff91aeeb2 110 if(Item==0b00000011){
nnoitre 1:9ffff91aeeb2 111 if(right.read()){
nnoitre 1:9ffff91aeeb2 112 Item=0b00000010;
nnoitre 1:9ffff91aeeb2 113 Status=0b00000000;
nnoitre 1:9ffff91aeeb2 114 send();
nnoitre 1:9ffff91aeeb2 115 }
nnoitre 1:9ffff91aeeb2 116 if(down.read()){
nnoitre 1:9ffff91aeeb2 117 Item=0b00000100;
nnoitre 1:9ffff91aeeb2 118 Status=0b00000000;
nnoitre 1:9ffff91aeeb2 119 send();
nnoitre 1:9ffff91aeeb2 120 }
nnoitre 1:9ffff91aeeb2 121 lcd.printf("back");
nnoitre 1:9ffff91aeeb2 122 Item=0b00000011;
nnoitre 1:9ffff91aeeb2 123 }
nnoitre 1:9ffff91aeeb2 124 if(Item==0b00000100){
nnoitre 1:9ffff91aeeb2 125 lcd.printf("back");
nnoitre 1:9ffff91aeeb2 126 Item=0b00000100;
nnoitre 1:9ffff91aeeb2 127 }
nnoitre 1:9ffff91aeeb2 128 if(Item==0b00000101){
nnoitre 1:9ffff91aeeb2 129 if(down.read()){
nnoitre 1:9ffff91aeeb2 130 Item=0b00000100;
nnoitre 1:9ffff91aeeb2 131 Status=0b00000000;
nnoitre 1:9ffff91aeeb2 132 send();
nnoitre 1:9ffff91aeeb2 133 }
nnoitre 1:9ffff91aeeb2 134 if(left.read()){
nnoitre 1:9ffff91aeeb2 135 Item=0b00000110;
nnoitre 1:9ffff91aeeb2 136 Status=0b00000000;
nnoitre 1:9ffff91aeeb2 137 send();
nnoitre 1:9ffff91aeeb2 138 }
nnoitre 1:9ffff91aeeb2 139 lcd.printf("back");
nnoitre 1:9ffff91aeeb2 140 Item=0b00000101;
nnoitre 1:9ffff91aeeb2 141 }
nnoitre 1:9ffff91aeeb2 142 if(Item==0b00000110){
nnoitre 1:9ffff91aeeb2 143 lcd.printf("back");
nnoitre 1:9ffff91aeeb2 144 Item=0b00000110;
nnoitre 1:9ffff91aeeb2 145 }
nnoitre 1:9ffff91aeeb2 146 if(Item==0b00000111){
nnoitre 1:9ffff91aeeb2 147 if(left.read()){
nnoitre 1:9ffff91aeeb2 148 Item=0b00000110;
nnoitre 1:9ffff91aeeb2 149 Status=0b00000000;
nnoitre 1:9ffff91aeeb2 150 send();
nnoitre 1:9ffff91aeeb2 151 }
nnoitre 1:9ffff91aeeb2 152 if(up.read()){
nnoitre 1:9ffff91aeeb2 153 Item=0b00000000;
nnoitre 1:9ffff91aeeb2 154 Status=0b00000000;
nnoitre 1:9ffff91aeeb2 155 send();
nnoitre 1:9ffff91aeeb2 156 }
nnoitre 1:9ffff91aeeb2 157 lcd.printf("back");
nnoitre 1:9ffff91aeeb2 158 Item=0b00000111;
nnoitre 1:9ffff91aeeb2 159 }
nnoitre 1:9ffff91aeeb2 160 Checksum=(Source+Des+Item+Status)%255;
nnoitre 1:9ffff91aeeb2 161 sending=0;
nnoitre 1:9ffff91aeeb2 162 send();
nnoitre 1:9ffff91aeeb2 163 t.start();
nnoitre 0:ce2085295a51 164 }
nnoitre 0:ce2085295a51 165
nnoitre 0:ce2085295a51 166 int main() {
nnoitre 1:9ffff91aeeb2 167 xbee.baud(57600);
nnoitre 0:ce2085295a51 168 while(1) {
nnoitre 1:9ffff91aeeb2 169 if(sending){
nnoitre 1:9ffff91aeeb2 170 up.rise(&CalChecksumup);
nnoitre 1:9ffff91aeeb2 171 up.fall(&CalChecksumdown);
nnoitre 1:9ffff91aeeb2 172 down.rise(&CalChecksumup);
nnoitre 1:9ffff91aeeb2 173 down.fall(&CalChecksumdown);
nnoitre 1:9ffff91aeeb2 174 left.rise(&CalChecksumup);
nnoitre 1:9ffff91aeeb2 175 left.fall(&CalChecksumdown);
nnoitre 1:9ffff91aeeb2 176 right.rise(&CalChecksumup);
nnoitre 1:9ffff91aeeb2 177 right.fall(&CalChecksumdown);
nnoitre 0:ce2085295a51 178 }
nnoitre 1:9ffff91aeeb2 179 if(!sending){
nnoitre 1:9ffff91aeeb2 180 if(xbee.readable()) { //Checks if the data is readable
nnoitre 1:9ffff91aeeb2 181 xbee.gets(control,5); //Get the first character that's in the buffer
nnoitre 1:9ffff91aeeb2 182 if(control[3]==0b00001111){
nnoitre 1:9ffff91aeeb2 183 sending=1;
nnoitre 1:9ffff91aeeb2 184 lcd.cls();
nnoitre 1:9ffff91aeeb2 185 lcd.locate(0,3);
nnoitre 1:9ffff91aeeb2 186 lcd.printf("ACK");
nnoitre 1:9ffff91aeeb2 187 t.stop();
nnoitre 1:9ffff91aeeb2 188 t.reset();
nnoitre 1:9ffff91aeeb2 189 teller=0;
nnoitre 1:9ffff91aeeb2 190 }
nnoitre 1:9ffff91aeeb2 191 if(control[3]==0b11110000){
nnoitre 1:9ffff91aeeb2 192 lcd.cls();
nnoitre 1:9ffff91aeeb2 193 lcd.locate(0,3);
nnoitre 1:9ffff91aeeb2 194 lcd.printf("NACK");
nnoitre 1:9ffff91aeeb2 195 if(teller<10){
nnoitre 1:9ffff91aeeb2 196 send();
nnoitre 1:9ffff91aeeb2 197 teller++;
nnoitre 1:9ffff91aeeb2 198 }
nnoitre 1:9ffff91aeeb2 199 if(teller==10){
nnoitre 1:9ffff91aeeb2 200 sending=1;
nnoitre 1:9ffff91aeeb2 201 teller=0;
nnoitre 1:9ffff91aeeb2 202 }
nnoitre 1:9ffff91aeeb2 203 lcd.cls();
nnoitre 1:9ffff91aeeb2 204 lcd.locate(0,3);
nnoitre 1:9ffff91aeeb2 205 lcd.printf("NO REACTION");
nnoitre 1:9ffff91aeeb2 206 }
nnoitre 1:9ffff91aeeb2 207 }
nnoitre 0:ce2085295a51 208 }
nnoitre 1:9ffff91aeeb2 209 if(t>=1){
nnoitre 1:9ffff91aeeb2 210 t.stop();
nnoitre 1:9ffff91aeeb2 211 t.reset();
nnoitre 1:9ffff91aeeb2 212 send();
nnoitre 1:9ffff91aeeb2 213 t.start();
nnoitre 0:ce2085295a51 214 }
nnoitre 0:ce2085295a51 215 }
nnoitre 1:9ffff91aeeb2 216 }