This project is a requirement for the fulfillment of the course ECE 59500: Design with Embedded System offered at Department of Electrical and Computer Engineering, Purdue School of Engineering and Technology, IUPUI
Dependencies: Servo mbed-os FXOS8700Q
Diff: main.cpp
- Revision:
- 0:b2db5e8bd926
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Apr 29 00:17:28 2020 +0000 @@ -0,0 +1,134 @@ +#include "mbed.h" +#include "Servo.h" +#include "ESP8266.h" +#include "math.h" +#define CloudIP "184.106.153.149" //Raw IP Address of ThingSpeak Cloud Server + +DigitalOut RLed(LED1); //when Garage has no spot for parking +DigitalOut GLed(LED2); //when Garage has spot available +DigitalOut BLed(LED3); //Onboard Blue LED for Wifi Tx Indication + +ESP8266 wifi(PTC17, PTC16, 9600); //Tx Pin:PTC17; Rx Pin:PTC17; Baud rate:115200 +DigitalIn IR1(A0); +DigitalIn IR2(A1); +DigitalIn IR3(A2); +DigitalIn GS(A3); +Servo myservo(D7); +void wifi_send(void); //Connect and Push Data Channel to Cloud Server +int f_out= 3; //variable to count for no of slots available +int num = 0; +int open = 1 ; +char snd[255],rcv[1000]; //snd: send command to ESP8266 +//rcv: receive response from ESP8266 +int main() +{ + printf("WELCOME TO PARKING SYSTEM\n\r"); + printf("Cloud synchronization number : %d", num); + printf("Syncing Data with Cloud, Please Wait.\n\r"); + printf("Initial Setup\r\n"); + wifi.SetMode(1); //Set ESP mode to 1 + wifi.RcvReply(rcv, 1000); //Receive a response from ESP + printf("%s\r", rcv); + + printf("Conneting to WiFi\r\n"); //AP Setup Initialization + wifi.Join("Kuch Bhi Daal Do", "paiselagenge"); //wifi address details + wifi.RcvReply(rcv, 1000); + printf("%s\n", rcv); + wait(8); + + wifi.GetIP(rcv); //Obtains an IP address from the AP + + while (1) { + wifi_send(); + + RLed = 1; + GLed = 1; + BLed = 0; + wait(2.0f); + } +} + +void wifi_send(void) +{ + while(num<1000000000000) { + num=num + 1; + + GLed=0; + BLed=1; + + + + if(GS==0) { + printf("Car is available at parking entrance..checking for slot availability\n\r"); + if(IR1==0 && IR2==0 && IR3==0) { + printf("Parking full try next garage..\n\r"); + open=0; + RLed=0; + GLed=1; + f_out = 0; + } else if (IR1==0 && IR2==0 && IR3==1) { + printf(" 1 spot available at slot 3\n\r"); + f_out = 1; + } else if (IR1==0 && IR2==1 && IR3==0) { + printf(" 1 spot avaialble at slot 2\n\r"); + f_out = 1; + } else if (IR1==0 && IR2==1 && IR3==1) { + printf("Two spots available at slot 2 and 3\n\r"); + f_out = 2; + } else if (IR1==1 && IR2==0 && IR3==0) { + printf("One spot available at slot 1\n\r"); + f_out = 1; + } else if (IR1==1 && IR2==0 && IR3==1) { + printf("Two spot avaialble at slot 1 and 3\n\r"); + f_out = 2; + } else if (IR1==1 && IR2==1 && IR3==0) { + printf("Two spot avaialble at slot 1 and 2\n\r"); + f_out = 2; + } else if (IR1==1 && IR2==1 && IR3==1) { + printf("Garage Empty\n\r"); + f_out = 3; + } + + if(open == 1) { + for(int i=0; i<100; i++) { + myservo = i/100.0; + wait(0.01); + } + for(int i=100; i>0; i--) { + myservo = i/100.0; + wait(0.01); + } + } + } + else + printf("No car to enter\n\r"); + + //Sending Data to the Cloud Server via ESP8266 WiFi Module + strcpy(snd,"AT+CIPMUX=0\n\r"); //AT+CIPMUX: Enabling Single Channel Mode + wifi.SendCMD(snd); + wait(1); + wifi.RcvReply(rcv, 1000); + wait(1); + + sprintf(snd,"AT+CIPSTART=4,\"TCP\",\"%s\",80\n",CloudIP); //Establish TCP connection w/ Cloud Server + wait(1); + wifi.RcvReply(rcv, 1000); + wait(1); + + strcpy(snd,"AT+CIPSEND=100\n\r"); //Set length of the data that will be sent + wifi.SendCMD(snd); + printf("%s\r", rcv); + wait(1); + wifi.RcvReply(rcv, 1000); + printf("%s\r", rcv); + wait(1); + + // Pushing the data to Cloud Server via API + sprintf(snd,"GET https://api.thingspeak.com/update?api_key=M2RJX3971TCLP0S7&field1=%d\n\r", f_out); + wifi.SendCMD(snd); + printf("%s\r",snd); + wait(1); + wifi.RcvReply(rcv, 1000); + printf("%s\r", rcv); + } + }