New xbee sent protocol

Dependencies:   mbed C12832 XBee

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