This code operates the the seeker robot for the Multi-Robot Security System designed for IUPUI's ECE 59500 Embedded Systems Design course.
Dependencies: ESP8266 HCSR04 mbed
main.cpp@1:e0c804b2922b, 2016-05-02 (annotated)
- Committer:
- Jakschwa
- Date:
- Mon May 02 17:21:28 2016 +0000
- Revision:
- 1:e0c804b2922b
- Parent:
- 0:e2697a427fec
This code operates the the seeker robot for the Multi-Robot Security System designed for IUPUI's ECE 59500 Embedded Systems Design course.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Jakschwa | 0:e2697a427fec | 1 | /* Robot 1 |
Jakschwa | 0:e2697a427fec | 2 | Project 3: Autonomous Multi-Robot Security Alert System |
Jakschwa | 0:e2697a427fec | 3 | Notes: |
Jakschwa | 0:e2697a427fec | 4 | 1. Code checks entry id from the PostToSever results |
Jakschwa | 0:e2697a427fec | 5 | 2. Sends two xvalue and yvalue to server |
Jakschwa | 0:e2697a427fec | 6 | 3. Wall-following routine |
Jakschwa | 0:e2697a427fec | 7 | */ |
Jakschwa | 0:e2697a427fec | 8 | #include "mbed.h" |
Jakschwa | 0:e2697a427fec | 9 | #include "ESP8266.h" |
Jakschwa | 0:e2697a427fec | 10 | #define IP "184.106.153.149" // IP Address of "api.thingspeak.com\" |
Jakschwa | 0:e2697a427fec | 11 | #include "HCSR04.h" //Ultrasonic distance sensor lib |
Jakschwa | 0:e2697a427fec | 12 | |
Jakschwa | 0:e2697a427fec | 13 | //Subfunctions |
Jakschwa | 0:e2697a427fec | 14 | void Forward(void);void Stop(void);void Right90(void);void Left90(void); |
Jakschwa | 0:e2697a427fec | 15 | int GetFrontDistance(void);int GetRightDistance(void); |
Jakschwa | 0:e2697a427fec | 16 | void ConnectToServer(void);unsigned int PostToServer(void);unsigned int GetCurrentEntryID(void); |
Jakschwa | 0:e2697a427fec | 17 | void CloseConnection(void); void Wifi(void); void ConnectToServer(void); |
Jakschwa | 0:e2697a427fec | 18 | void ThreatDetected(void); void EncoderCount(void); |
Jakschwa | 0:e2697a427fec | 19 | |
Jakschwa | 0:e2697a427fec | 20 | //Pin Setup |
Jakschwa | 0:e2697a427fec | 21 | DigitalOut right_cont1(A2), right_cont2(A3), left_cont1(A0), left_cont2(A1), red(LED_RED), green(LED_GREEN); |
Jakschwa | 0:e2697a427fec | 22 | DigitalIn sw2(SW2); |
Jakschwa | 0:e2697a427fec | 23 | //Interrupt Setup |
Jakschwa | 0:e2697a427fec | 24 | InterruptIn EncoderIn(D7); //External Interrupt |
Jakschwa | 0:e2697a427fec | 25 | InterruptIn ThreatIn(D9); //Clap sensor |
Jakschwa | 0:e2697a427fec | 26 | //PWM Setup |
Jakschwa | 0:e2697a427fec | 27 | PwmOut right_pwm(A5); |
Jakschwa | 0:e2697a427fec | 28 | PwmOut left_pwm(A4); |
Jakschwa | 0:e2697a427fec | 29 | |
Jakschwa | 0:e2697a427fec | 30 | Serial pc(USBTX,USBRX); //Uart connection for TeraTerm |
Jakschwa | 0:e2697a427fec | 31 | ESP8266 wifi(PTC17, PTC16, 115200); // tx, rx, baud rate for wifi |
Jakschwa | 0:e2697a427fec | 32 | |
Jakschwa | 0:e2697a427fec | 33 | //Public variables |
Jakschwa | 0:e2697a427fec | 34 | int frontDistance = 0, rightDistance = 0, setDistance = 0, lastRightDistance = 0; |
Jakschwa | 0:e2697a427fec | 35 | int xvalue = 0, yvalue = 0; |
Jakschwa | 0:e2697a427fec | 36 | float leftSpeed = 0, rightSpeed = 0, ileftSpeed = 0, irightSpeed = 0, inc = 0; |
Jakschwa | 0:e2697a427fec | 37 | |
Jakschwa | 0:e2697a427fec | 38 | int main() |
Jakschwa | 0:e2697a427fec | 39 | { |
Jakschwa | 0:e2697a427fec | 40 | red = 1; green = 1; //off |
Jakschwa | 0:e2697a427fec | 41 | while(sw2); |
Jakschwa | 0:e2697a427fec | 42 | wait(2); |
Jakschwa | 0:e2697a427fec | 43 | pc.baud(9600); |
Jakschwa | 0:e2697a427fec | 44 | pc.printf("starting\r\n"); |
Jakschwa | 0:e2697a427fec | 45 | |
Jakschwa | 0:e2697a427fec | 46 | //Wifi();//send xvalue = 0, yvalue = 0 to ThinkSpeak.com |
Jakschwa | 0:e2697a427fec | 47 | |
Jakschwa | 0:e2697a427fec | 48 | //enable inturrpts |
Jakschwa | 0:e2697a427fec | 49 | EncoderIn.rise(&EncoderCount); /*Interrupt: On rising edge of encoder tick*/ |
Jakschwa | 0:e2697a427fec | 50 | ThreatIn.rise(&ThreatDetected); /*Interrupt: On rising edge of encoder tick*/ |
Jakschwa | 0:e2697a427fec | 51 | //set motor period |
Jakschwa | 0:e2697a427fec | 52 | right_pwm.period(0.007f); |
Jakschwa | 0:e2697a427fec | 53 | left_pwm.period(0.007f); |
Jakschwa | 0:e2697a427fec | 54 | |
Jakschwa | 0:e2697a427fec | 55 | //motor speed |
Jakschwa | 0:e2697a427fec | 56 | leftSpeed = 0.50f; |
Jakschwa | 0:e2697a427fec | 57 | rightSpeed = 0.70f; |
Jakschwa | 0:e2697a427fec | 58 | ileftSpeed = 0.50f; |
Jakschwa | 0:e2697a427fec | 59 | irightSpeed = 0.70f; |
Jakschwa | 0:e2697a427fec | 60 | left_pwm.write(ileftSpeed); |
Jakschwa | 0:e2697a427fec | 61 | right_pwm.write(irightSpeed); |
Jakschwa | 0:e2697a427fec | 62 | Forward(); |
Jakschwa | 0:e2697a427fec | 63 | setDistance = GetRightDistance(); //check right distance distance |
Jakschwa | 0:e2697a427fec | 64 | lastRightDistance = setDistance; |
Jakschwa | 0:e2697a427fec | 65 | pc.printf("setDistance:%d\r\n", setDistance); |
Jakschwa | 0:e2697a427fec | 66 | while(1) |
Jakschwa | 0:e2697a427fec | 67 | { |
Jakschwa | 0:e2697a427fec | 68 | EncoderIn.rise(NULL); //disable EncoderIn inturrpt |
Jakschwa | 0:e2697a427fec | 69 | |
Jakschwa | 0:e2697a427fec | 70 | rightDistance = GetRightDistance(); //check distance |
Jakschwa | 0:e2697a427fec | 71 | if( rightDistance > (lastRightDistance + 20) || rightDistance < (lastRightDistance - 20)) |
Jakschwa | 0:e2697a427fec | 72 | { |
Jakschwa | 0:e2697a427fec | 73 | pc.printf("Old righDistance:%d, lastRightDistance: %d\r\n", rightDistance, lastRightDistance); |
Jakschwa | 0:e2697a427fec | 74 | rightDistance = lastRightDistance -10; |
Jakschwa | 0:e2697a427fec | 75 | pc.printf("New righDistance:%d\r\n", rightDistance); |
Jakschwa | 0:e2697a427fec | 76 | } |
Jakschwa | 0:e2697a427fec | 77 | else |
Jakschwa | 0:e2697a427fec | 78 | lastRightDistance = rightDistance; |
Jakschwa | 0:e2697a427fec | 79 | |
Jakschwa | 0:e2697a427fec | 80 | frontDistance = GetFrontDistance(); //check distance |
Jakschwa | 0:e2697a427fec | 81 | //pc.printf("Right:%d , Front: %d\r\n", rightDistance, frontDistance); |
Jakschwa | 0:e2697a427fec | 82 | |
Jakschwa | 0:e2697a427fec | 83 | if(rightDistance >=1000) |
Jakschwa | 0:e2697a427fec | 84 | { |
Jakschwa | 0:e2697a427fec | 85 | rightDistance = 1; |
Jakschwa | 0:e2697a427fec | 86 | } |
Jakschwa | 0:e2697a427fec | 87 | else |
Jakschwa | 0:e2697a427fec | 88 | rightDistance = rightDistance; |
Jakschwa | 0:e2697a427fec | 89 | //***turn right |
Jakschwa | 0:e2697a427fec | 90 | if( rightDistance > setDistance + 1 ) |
Jakschwa | 0:e2697a427fec | 91 | { |
Jakschwa | 0:e2697a427fec | 92 | inc = 0.3f; |
Jakschwa | 0:e2697a427fec | 93 | leftSpeed = leftSpeed + inc; |
Jakschwa | 0:e2697a427fec | 94 | if(leftSpeed > .55f) |
Jakschwa | 0:e2697a427fec | 95 | leftSpeed = .55f; |
Jakschwa | 0:e2697a427fec | 96 | left_pwm.write(leftSpeed); |
Jakschwa | 0:e2697a427fec | 97 | |
Jakschwa | 0:e2697a427fec | 98 | rightSpeed = rightSpeed - inc; |
Jakschwa | 0:e2697a427fec | 99 | if(rightSpeed < 0.30f) |
Jakschwa | 0:e2697a427fec | 100 | rightSpeed = 0.30f; |
Jakschwa | 0:e2697a427fec | 101 | right_pwm.write(rightSpeed); |
Jakschwa | 0:e2697a427fec | 102 | pc.printf("Turn Right,right distance:%d, %d\r\n", rightDistance, setDistance); |
Jakschwa | 0:e2697a427fec | 103 | pc.printf("leftSpeed:%f, rightSpeed:%f\r\n\r\n", leftSpeed, rightSpeed); |
Jakschwa | 0:e2697a427fec | 104 | //Stop(); |
Jakschwa | 0:e2697a427fec | 105 | //while(sw2); |
Jakschwa | 0:e2697a427fec | 106 | //wait(1); |
Jakschwa | 0:e2697a427fec | 107 | //Forward(); |
Jakschwa | 0:e2697a427fec | 108 | } |
Jakschwa | 0:e2697a427fec | 109 | //****turn left |
Jakschwa | 0:e2697a427fec | 110 | //else ( rightDistance < (setDistance - 1)) |
Jakschwa | 0:e2697a427fec | 111 | else |
Jakschwa | 0:e2697a427fec | 112 | { |
Jakschwa | 0:e2697a427fec | 113 | inc = 0.3f; |
Jakschwa | 0:e2697a427fec | 114 | leftSpeed = leftSpeed - inc; |
Jakschwa | 0:e2697a427fec | 115 | if(leftSpeed < 0.25f) |
Jakschwa | 0:e2697a427fec | 116 | leftSpeed = 0.25f; |
Jakschwa | 0:e2697a427fec | 117 | left_pwm.write(leftSpeed); |
Jakschwa | 0:e2697a427fec | 118 | |
Jakschwa | 0:e2697a427fec | 119 | rightSpeed = rightSpeed + inc; |
Jakschwa | 0:e2697a427fec | 120 | if(rightSpeed > 0.65f) |
Jakschwa | 0:e2697a427fec | 121 | rightSpeed = 0.65f; |
Jakschwa | 0:e2697a427fec | 122 | right_pwm.write(rightSpeed); |
Jakschwa | 0:e2697a427fec | 123 | pc.printf("Turn Left,right distance:%d, %d\r\n", rightDistance, setDistance); |
Jakschwa | 0:e2697a427fec | 124 | pc.printf("leftSpeed:%f, rightSpeed:%f\r\n\r\n", leftSpeed, rightSpeed); |
Jakschwa | 0:e2697a427fec | 125 | //Stop(); |
Jakschwa | 0:e2697a427fec | 126 | //while(sw2); |
Jakschwa | 0:e2697a427fec | 127 | //wait(1); |
Jakschwa | 0:e2697a427fec | 128 | //Forward(); |
Jakschwa | 0:e2697a427fec | 129 | } |
Jakschwa | 0:e2697a427fec | 130 | /*else |
Jakschwa | 0:e2697a427fec | 131 | { |
Jakschwa | 0:e2697a427fec | 132 | left_pwm.write(ileftSpeed); |
Jakschwa | 0:e2697a427fec | 133 | right_pwm.write(irightSpeed); |
Jakschwa | 0:e2697a427fec | 134 | pc.printf("Go Straight,right distance:%d, %d\r\n", rightDistance, setDistance); |
Jakschwa | 0:e2697a427fec | 135 | pc.printf("leftSpeed:%f, rightSpeed:%f\r\n\r\n", ileftSpeed, irightSpeed); |
Jakschwa | 0:e2697a427fec | 136 | //Stop(); |
Jakschwa | 0:e2697a427fec | 137 | //while(sw2); |
Jakschwa | 0:e2697a427fec | 138 | //wait(1); |
Jakschwa | 0:e2697a427fec | 139 | //Forward(); |
Jakschwa | 0:e2697a427fec | 140 | } */ |
Jakschwa | 0:e2697a427fec | 141 | EncoderIn.rise(&EncoderCount); /*Interrupt: On rising edge of encoder tick*/ |
Jakschwa | 0:e2697a427fec | 142 | wait(.05); |
Jakschwa | 0:e2697a427fec | 143 | }//end of while(1) |
Jakschwa | 0:e2697a427fec | 144 | }//end of main() |
Jakschwa | 0:e2697a427fec | 145 | |
Jakschwa | 0:e2697a427fec | 146 | |
Jakschwa | 0:e2697a427fec | 147 | void Wifi(void) |
Jakschwa | 0:e2697a427fec | 148 | { |
Jakschwa | 0:e2697a427fec | 149 | unsigned int pastEntryID = 0,entryID = 0, posted = 0; |
Jakschwa | 0:e2697a427fec | 150 | pc.printf("\r\n******************Wifi Begin*********************************\r\n"); |
Jakschwa | 0:e2697a427fec | 151 | ConnectToServer(); //WIFI is used to communicate to Thingspeak servers// |
Jakschwa | 0:e2697a427fec | 152 | while(posted ==0) |
Jakschwa | 0:e2697a427fec | 153 | { |
Jakschwa | 0:e2697a427fec | 154 | pastEntryID = GetCurrentEntryID(); |
Jakschwa | 0:e2697a427fec | 155 | if(pastEntryID > 0 && pastEntryID != 157 && pastEntryID <= 500) |
Jakschwa | 0:e2697a427fec | 156 | posted = 1; |
Jakschwa | 0:e2697a427fec | 157 | else |
Jakschwa | 0:e2697a427fec | 158 | posted = 0; |
Jakschwa | 0:e2697a427fec | 159 | } |
Jakschwa | 0:e2697a427fec | 160 | CloseConnection(); |
Jakschwa | 0:e2697a427fec | 161 | pc.printf("\r\npastEntryID = %d", pastEntryID); |
Jakschwa | 0:e2697a427fec | 162 | |
Jakschwa | 0:e2697a427fec | 163 | posted = 0; |
Jakschwa | 0:e2697a427fec | 164 | while(posted == 0) |
Jakschwa | 0:e2697a427fec | 165 | { |
Jakschwa | 0:e2697a427fec | 166 | ConnectToServer(); |
Jakschwa | 0:e2697a427fec | 167 | entryID = PostToServer(); |
Jakschwa | 0:e2697a427fec | 168 | CloseConnection(); |
Jakschwa | 0:e2697a427fec | 169 | if(entryID == pastEntryID + 1) |
Jakschwa | 0:e2697a427fec | 170 | posted = 1; |
Jakschwa | 0:e2697a427fec | 171 | else |
Jakschwa | 0:e2697a427fec | 172 | posted = posted; |
Jakschwa | 0:e2697a427fec | 173 | pc.printf("\r\ncurrent entryID = %d", entryID); |
Jakschwa | 0:e2697a427fec | 174 | pc.printf("\r\npast entryID = %d", pastEntryID); |
Jakschwa | 0:e2697a427fec | 175 | pc.printf("\r\nposted = %d", posted); |
Jakschwa | 0:e2697a427fec | 176 | }//while(posted ==0) |
Jakschwa | 0:e2697a427fec | 177 | pc.printf("\r\n******************Wifi Completed*********************************\r\n"); |
Jakschwa | 0:e2697a427fec | 178 | }//end of Wifi() |
Jakschwa | 0:e2697a427fec | 179 | |
Jakschwa | 0:e2697a427fec | 180 | void ConnectToServer(void) |
Jakschwa | 0:e2697a427fec | 181 | { |
Jakschwa | 0:e2697a427fec | 182 | char snd[255],rcv[500]; |
Jakschwa | 0:e2697a427fec | 183 | pc.printf("\r\n\r\n*************Sending WiFi information*************\r\n"); |
Jakschwa | 0:e2697a427fec | 184 | |
Jakschwa | 0:e2697a427fec | 185 | //Set Wifi to Single Channel Mode |
Jakschwa | 0:e2697a427fec | 186 | pc.printf("\r\nSet WiFi into Single Channel mode\r\n"); |
Jakschwa | 0:e2697a427fec | 187 | strcpy(snd,"AT+CIPMUX=0");//Setting WiFi into single Channel mode |
Jakschwa | 0:e2697a427fec | 188 | wifi.SendCMD(snd); |
Jakschwa | 0:e2697a427fec | 189 | //pc.printf(snd); |
Jakschwa | 0:e2697a427fec | 190 | wifi.RcvReply(rcv, 750); |
Jakschwa | 0:e2697a427fec | 191 | pc.printf("\r\nSingle Channel Mode Status: %s", rcv); |
Jakschwa | 0:e2697a427fec | 192 | //wait(1); |
Jakschwa | 0:e2697a427fec | 193 | |
Jakschwa | 0:e2697a427fec | 194 | //Initiate connection with THINGSPEAK server |
Jakschwa | 0:e2697a427fec | 195 | pc.printf("\r\nInitiating connection with ThinkSpeak sever\r\n"); |
Jakschwa | 0:e2697a427fec | 196 | strcpy(snd,"AT+CIPSTART=\"TCP\",\"api.thingspeak.com\",80"); |
Jakschwa | 0:e2697a427fec | 197 | //pc.printf("\r\nsending: %s", snd); |
Jakschwa | 0:e2697a427fec | 198 | wifi.SendCMD(snd); |
Jakschwa | 0:e2697a427fec | 199 | wifi.RcvReply(rcv, 750); |
Jakschwa | 0:e2697a427fec | 200 | pc.printf("\r\nConnection Status: %s", rcv); |
Jakschwa | 0:e2697a427fec | 201 | |
Jakschwa | 0:e2697a427fec | 202 | //Send Number of Characters to be sent |
Jakschwa | 0:e2697a427fec | 203 | pc.printf("\r\nSending Number of Characters to be sent"); |
Jakschwa | 0:e2697a427fec | 204 | strcpy(snd,"AT+CIPSEND=110"); //Send Number of open connections,Characters to send |
Jakschwa | 0:e2697a427fec | 205 | wifi.SendCMD(snd); |
Jakschwa | 0:e2697a427fec | 206 | //pc.printf(snd); |
Jakschwa | 0:e2697a427fec | 207 | wifi.RcvReply(rcv, 750); |
Jakschwa | 0:e2697a427fec | 208 | pc.printf("\r\nSent Status: %s", rcv); |
Jakschwa | 0:e2697a427fec | 209 | } //end of ConnectToServer() |
Jakschwa | 0:e2697a427fec | 210 | |
Jakschwa | 0:e2697a427fec | 211 | unsigned int PostToServer(void) |
Jakschwa | 0:e2697a427fec | 212 | { |
Jakschwa | 0:e2697a427fec | 213 | char snd[255],rcv[1000]; |
Jakschwa | 0:e2697a427fec | 214 | unsigned int i = 0, len = 0, entryID1 = 0,entryID = 0; |
Jakschwa | 0:e2697a427fec | 215 | const int size = sizeof(rcv); |
Jakschwa | 0:e2697a427fec | 216 | //Post values to ThingSpeak |
Jakschwa | 0:e2697a427fec | 217 | pc.printf("\r\n\r\nPost Value to ThingSpeak\r\n"); |
Jakschwa | 0:e2697a427fec | 218 | sprintf(snd,"GET https://api.thingspeak.com/update?key=1YAN0O31ADCV9MEP&field1=%d-%d HTTP/1.0\r\n\r\n",xvalue, yvalue); //67,76,84 |
Jakschwa | 0:e2697a427fec | 219 | //send |
Jakschwa | 0:e2697a427fec | 220 | //pc.printf("\r\nSending: %s",snd); |
Jakschwa | 0:e2697a427fec | 221 | wifi.SendCMD(snd); |
Jakschwa | 0:e2697a427fec | 222 | wifi.RcvReply(rcv, 750); |
Jakschwa | 0:e2697a427fec | 223 | pc.printf("\r\nSent Status: %s", rcv); |
Jakschwa | 0:e2697a427fec | 224 | //send again |
Jakschwa | 0:e2697a427fec | 225 | //pc.printf("\r\nSending: %s",snd); |
Jakschwa | 0:e2697a427fec | 226 | wifi.SendCMD(snd); |
Jakschwa | 0:e2697a427fec | 227 | wifi.RcvReply(rcv, 750); |
Jakschwa | 0:e2697a427fec | 228 | pc.printf("\r\nSent Status: %s", rcv); |
Jakschwa | 0:e2697a427fec | 229 | |
Jakschwa | 0:e2697a427fec | 230 | for(i = 0; i <= size - 1; i++) |
Jakschwa | 0:e2697a427fec | 231 | { |
Jakschwa | 0:e2697a427fec | 232 | if(rcv[i]==46 && rcv[i+1]==53 && rcv[i+2]==55 && rcv[i+9] ==0 && (rcv[i+10] ==0 || rcv[i+10] ==10)) //check for ".57" |
Jakschwa | 0:e2697a427fec | 233 | { |
Jakschwa | 0:e2697a427fec | 234 | if(rcv[i+8] ==0) |
Jakschwa | 0:e2697a427fec | 235 | len = 1; |
Jakschwa | 0:e2697a427fec | 236 | else |
Jakschwa | 0:e2697a427fec | 237 | len = 2; |
Jakschwa | 0:e2697a427fec | 238 | |
Jakschwa | 0:e2697a427fec | 239 | if(len==1) |
Jakschwa | 0:e2697a427fec | 240 | entryID1 = rcv[i+7]-48; |
Jakschwa | 0:e2697a427fec | 241 | else |
Jakschwa | 0:e2697a427fec | 242 | entryID1 = (rcv[i+7]-48)*10+(rcv[i+8]-48); |
Jakschwa | 0:e2697a427fec | 243 | //pc.printf("\r\nfound entryID: %d", entryID); |
Jakschwa | 0:e2697a427fec | 244 | } |
Jakschwa | 0:e2697a427fec | 245 | else |
Jakschwa | 0:e2697a427fec | 246 | i =i; |
Jakschwa | 0:e2697a427fec | 247 | if(entryID1 > entryID) |
Jakschwa | 0:e2697a427fec | 248 | entryID = entryID1; |
Jakschwa | 0:e2697a427fec | 249 | else |
Jakschwa | 0:e2697a427fec | 250 | entryID = entryID; |
Jakschwa | 0:e2697a427fec | 251 | } //end of For loop |
Jakschwa | 0:e2697a427fec | 252 | pc.printf("\r\nfound entryID: %d", entryID); |
Jakschwa | 0:e2697a427fec | 253 | return entryID; |
Jakschwa | 0:e2697a427fec | 254 | }//end of PostToServer(); |
Jakschwa | 0:e2697a427fec | 255 | |
Jakschwa | 0:e2697a427fec | 256 | unsigned int GetCurrentEntryID(void) |
Jakschwa | 0:e2697a427fec | 257 | { |
Jakschwa | 0:e2697a427fec | 258 | unsigned int i = 0, len = 0, currentEntryID = 0, entryID = 0; |
Jakschwa | 0:e2697a427fec | 259 | char snd[255],rcv1[1000]; |
Jakschwa | 0:e2697a427fec | 260 | const int size = sizeof(rcv1); |
Jakschwa | 0:e2697a427fec | 261 | //Get values from ThinkSpeak |
Jakschwa | 0:e2697a427fec | 262 | pc.printf("\r\nGet Values from ThingSpeak\r\n"); |
Jakschwa | 0:e2697a427fec | 263 | //strcpy(snd,"GET http://api.thingspeak.com/channels/104257/fields/1.json?key=1YAN0O31ADCV9MEP HTTP/1.0\r\n\r\n");//97 |
Jakschwa | 0:e2697a427fec | 264 | strcpy(snd,"GET http://api.thingspeak.com/channels/104257/status.json?key=1YAN0O31ADCV9MEP HTTP/1.0\r\n\r\n");//97 |
Jakschwa | 0:e2697a427fec | 265 | //send |
Jakschwa | 0:e2697a427fec | 266 | //pc.printf("\r\nSending: %s",snd); |
Jakschwa | 0:e2697a427fec | 267 | wifi.SendCMD(snd); |
Jakschwa | 0:e2697a427fec | 268 | wifi.RcvReply(rcv1, 750); |
Jakschwa | 0:e2697a427fec | 269 | pc.printf("\r\nSent Status: %s", rcv1); |
Jakschwa | 0:e2697a427fec | 270 | //send again |
Jakschwa | 0:e2697a427fec | 271 | //pc.printf("\r\nSending: %s",snd); |
Jakschwa | 0:e2697a427fec | 272 | wifi.SendCMD(snd); |
Jakschwa | 0:e2697a427fec | 273 | wifi.RcvReply(rcv1, 750); |
Jakschwa | 0:e2697a427fec | 274 | pc.printf("\r\nSent Status: %s", rcv1); |
Jakschwa | 0:e2697a427fec | 275 | for(i = 0; i <= size - 1; i++) |
Jakschwa | 0:e2697a427fec | 276 | { |
Jakschwa | 0:e2697a427fec | 277 | if(rcv1[i]==95 && rcv1[i+1]==105 && rcv1[i+2]==100) //check for "_id" entry_id |
Jakschwa | 0:e2697a427fec | 278 | { |
Jakschwa | 0:e2697a427fec | 279 | if(rcv1[i+6] ==44) |
Jakschwa | 0:e2697a427fec | 280 | len = 1; |
Jakschwa | 0:e2697a427fec | 281 | else |
Jakschwa | 0:e2697a427fec | 282 | len = 2; |
Jakschwa | 0:e2697a427fec | 283 | |
Jakschwa | 0:e2697a427fec | 284 | if(len==1) |
Jakschwa | 0:e2697a427fec | 285 | entryID = rcv1[i+5]-48; |
Jakschwa | 0:e2697a427fec | 286 | else |
Jakschwa | 0:e2697a427fec | 287 | entryID = (rcv1[i+5]-48)*10+(rcv1[i+6]-48); |
Jakschwa | 0:e2697a427fec | 288 | //pc.printf("\r\nentry_id= %d", entryID); |
Jakschwa | 0:e2697a427fec | 289 | } |
Jakschwa | 0:e2697a427fec | 290 | else |
Jakschwa | 0:e2697a427fec | 291 | i=i; |
Jakschwa | 0:e2697a427fec | 292 | |
Jakschwa | 0:e2697a427fec | 293 | if(entryID > currentEntryID) |
Jakschwa | 0:e2697a427fec | 294 | currentEntryID = entryID; |
Jakschwa | 0:e2697a427fec | 295 | else |
Jakschwa | 0:e2697a427fec | 296 | currentEntryID = currentEntryID; |
Jakschwa | 0:e2697a427fec | 297 | } //end of For loop |
Jakschwa | 0:e2697a427fec | 298 | pc.printf("\r\nentry_id= %d", currentEntryID); |
Jakschwa | 0:e2697a427fec | 299 | return currentEntryID; |
Jakschwa | 0:e2697a427fec | 300 | } //end of GetCurrentEntryID |
Jakschwa | 0:e2697a427fec | 301 | |
Jakschwa | 0:e2697a427fec | 302 | void CloseConnection(void) |
Jakschwa | 0:e2697a427fec | 303 | { |
Jakschwa | 0:e2697a427fec | 304 | char snd[255],rcv[500]; |
Jakschwa | 0:e2697a427fec | 305 | //close connection |
Jakschwa | 0:e2697a427fec | 306 | pc.printf("\r\nClose the Connection\r\n"); |
Jakschwa | 0:e2697a427fec | 307 | strcpy(snd,"AT+CIPCLOSE"); //closing the connection with thingspeak server |
Jakschwa | 0:e2697a427fec | 308 | wifi.SendCMD(snd); |
Jakschwa | 0:e2697a427fec | 309 | //pc.printf("\r\nSending: %s",snd); |
Jakschwa | 0:e2697a427fec | 310 | wifi.RcvReply(rcv, 750); |
Jakschwa | 0:e2697a427fec | 311 | pc.printf("\r\nClose Connection Status: %s", rcv); |
Jakschwa | 0:e2697a427fec | 312 | |
Jakschwa | 0:e2697a427fec | 313 | pc.printf("\r\nEnd of Closed Connection Response\r\n\r\n"); |
Jakschwa | 0:e2697a427fec | 314 | }//void connection |
Jakschwa | 0:e2697a427fec | 315 | |
Jakschwa | 0:e2697a427fec | 316 | |
Jakschwa | 0:e2697a427fec | 317 | int GetFrontDistance(void) |
Jakschwa | 0:e2697a427fec | 318 | { |
Jakschwa | 0:e2697a427fec | 319 | int distance = 0; |
Jakschwa | 0:e2697a427fec | 320 | HCSR04 sensor(D4, D5); |
Jakschwa | 0:e2697a427fec | 321 | distance = sensor.distance(); |
Jakschwa | 0:e2697a427fec | 322 | return distance; |
Jakschwa | 0:e2697a427fec | 323 | } |
Jakschwa | 0:e2697a427fec | 324 | |
Jakschwa | 0:e2697a427fec | 325 | int GetRightDistance(void) |
Jakschwa | 0:e2697a427fec | 326 | { |
Jakschwa | 0:e2697a427fec | 327 | int distance = 0; |
Jakschwa | 0:e2697a427fec | 328 | HCSR04 sensor(D2, D3); |
Jakschwa | 0:e2697a427fec | 329 | distance = sensor.distance(); |
Jakschwa | 0:e2697a427fec | 330 | return distance; |
Jakschwa | 0:e2697a427fec | 331 | } |
Jakschwa | 0:e2697a427fec | 332 | |
Jakschwa | 0:e2697a427fec | 333 | void Forward(void) |
Jakschwa | 0:e2697a427fec | 334 | { |
Jakschwa | 0:e2697a427fec | 335 | right_cont1=0; |
Jakschwa | 0:e2697a427fec | 336 | right_cont2=1; |
Jakschwa | 0:e2697a427fec | 337 | left_cont1=0; |
Jakschwa | 0:e2697a427fec | 338 | left_cont2=1; |
Jakschwa | 0:e2697a427fec | 339 | } |
Jakschwa | 0:e2697a427fec | 340 | |
Jakschwa | 0:e2697a427fec | 341 | void Stop(void) |
Jakschwa | 0:e2697a427fec | 342 | { |
Jakschwa | 0:e2697a427fec | 343 | right_cont1=0; |
Jakschwa | 0:e2697a427fec | 344 | right_cont2=0; |
Jakschwa | 0:e2697a427fec | 345 | left_cont1=0; |
Jakschwa | 0:e2697a427fec | 346 | left_cont2=0; |
Jakschwa | 0:e2697a427fec | 347 | } |
Jakschwa | 0:e2697a427fec | 348 | |
Jakschwa | 0:e2697a427fec | 349 | void Right90(void) |
Jakschwa | 0:e2697a427fec | 350 | { |
Jakschwa | 0:e2697a427fec | 351 | right_cont1=0; |
Jakschwa | 0:e2697a427fec | 352 | right_cont2=0; |
Jakschwa | 0:e2697a427fec | 353 | left_cont1=0; |
Jakschwa | 0:e2697a427fec | 354 | left_cont2=1; |
Jakschwa | 0:e2697a427fec | 355 | } |
Jakschwa | 0:e2697a427fec | 356 | |
Jakschwa | 0:e2697a427fec | 357 | void Left90(void) |
Jakschwa | 0:e2697a427fec | 358 | { |
Jakschwa | 0:e2697a427fec | 359 | right_cont1=0; |
Jakschwa | 0:e2697a427fec | 360 | right_cont2=1; |
Jakschwa | 0:e2697a427fec | 361 | left_cont1=0; |
Jakschwa | 0:e2697a427fec | 362 | left_cont2=0; |
Jakschwa | 0:e2697a427fec | 363 | } |
Jakschwa | 0:e2697a427fec | 364 | |
Jakschwa | 0:e2697a427fec | 365 | void ThreatDetected(void) |
Jakschwa | 0:e2697a427fec | 366 | { |
Jakschwa | 0:e2697a427fec | 367 | red = 0; //on |
Jakschwa | 0:e2697a427fec | 368 | pc.printf("\r\n\r\n A Threat has been Detected\r\n"); |
Jakschwa | 0:e2697a427fec | 369 | pc.printf("\r\n Posting Coordinate: %d to Server\r\n", xvalue); |
Jakschwa | 0:e2697a427fec | 370 | EncoderIn.rise(NULL); //disable EncoderIn inturrpt |
Jakschwa | 0:e2697a427fec | 371 | Stop(); //stop robot motors |
Jakschwa | 0:e2697a427fec | 372 | wait(10); |
Jakschwa | 0:e2697a427fec | 373 | Wifi(); //send x,y coordinates |
Jakschwa | 0:e2697a427fec | 374 | red = 1; //off |
Jakschwa | 0:e2697a427fec | 375 | green = 0; //on |
Jakschwa | 0:e2697a427fec | 376 | while(1); //wait forever |
Jakschwa | 0:e2697a427fec | 377 | } |
Jakschwa | 0:e2697a427fec | 378 | |
Jakschwa | 0:e2697a427fec | 379 | void EncoderCount() |
Jakschwa | 0:e2697a427fec | 380 | { |
Jakschwa | 0:e2697a427fec | 381 | xvalue++; |
Jakschwa | 0:e2697a427fec | 382 | //yvalue++; |
Jakschwa | 0:e2697a427fec | 383 | //pc.printf("\r\nX: %d, Y: %d\r\n\r\n", xvalue, yvalue); |
Jakschwa | 0:e2697a427fec | 384 | } |
Jakschwa | 0:e2697a427fec | 385 | |
Jakschwa | 0:e2697a427fec | 386 |