ECE4180 Final Project
Dependencies: 4DGL-uLCD-SE ESP8266NodeMCUInterface Motor mbed
Fork of IoT_Blinds_Control by
Diff: main.cpp
- Revision:
- 0:d0cfb841595e
- Child:
- 1:d103c1f37bc6
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sat Dec 10 23:40:42 2016 +0000 @@ -0,0 +1,204 @@ +#include "mbed.h" +#include "TCPSocketConnection.h" +#include "ESP8266Interface.h" +#include "uLCD_4DGL.h" +#include "Motor.h" + +ESP8266Interface wifi(p28, p27, p26);//, "JACK", "ClarentBloodArthur"); +TCPSocketConnection socket; +//Serial pc(USBTX, USBRX); //Used for testing functionality without wifi +Motor m1(p23, p5, p6); //pwm, fwd, rev //this one is for raising/lowering blinds +Motor m2(p24, p7, p8); //this one is for changing the tilt of them. +DigitalOut led1(LED1); +DigitalOut led2(LED2); +DigitalOut led3(LED3); +DigitalOut led4(LED4); + +int heightpos=0; +int tiltpos=0; +float mspeed=1; //can be changed based on rate here; +char inData[5]; +char previnData[5]; +char inChar; +int index=0; + +//CHANGE THESE +const char* wifissid = "SSID"; +const char* password = "Pass"; +const char* ipaddress="IP"; +const int port = PORT; + +void closetiltup(){//sets front of blinds to be tilted up + while(tiltpos>-10){ + m2.speed(-mspeed); + wait(mspeed*.02); + tiltpos=tiltpos-(mspeed); + } + m2.speed(0); +} + +void closetiltdown(){ + while(tiltpos<10){ + m2.speed(mspeed); + wait(mspeed*.02); + tiltpos=tiltpos+(mspeed); + } + m2.speed(0); +} + +void tiltto(float pos){ + if(pos>tiltpos){ + m2.speed(mspeed); + while(tiltpos<pos){ + wait(mspeed*.02); + tiltpos=tiltpos+(mspeed); + } + m2.speed(0); + } + else if(pos<tiltpos){ + m2.speed(-mspeed); + while(tiltpos>pos){ + wait(mspeed*.02); + tiltpos=tiltpos-(mspeed); + } + m2.speed(0); + } + else{ + } +} + +void fullup(){ + while(heightpos<10){ + m1.speed(mspeed); + wait(mspeed*2); + heightpos=heightpos+(mspeed); + } + m1.speed(0); +} + +void fulldown(){ + while(heightpos>0){ + m1.speed(-mspeed); + wait(mspeed); + heightpos=heightpos-(mspeed); + } + m1.speed(0); +} + +void moveto(float pos){ + if(pos>heightpos){ + m1.speed(mspeed); + while(heightpos<pos){ + wait(mspeed*1.3); + heightpos=heightpos+(mspeed); + } + m1.speed(0); + } + else if(pos<heightpos){ + m1.speed(-mspeed); + while(heightpos>pos){ + wait(mspeed*.08); + heightpos=heightpos-(mspeed); + } + m1.speed(0); + } + else{ + } +} + +void resettozero(){ + moveto(0); + tiltto(0); +} + +int main() +{ + uLCD_4DGL ulcd(p9, p10, p11); // this is for an mbed-side print of current status + float num; + float prevnum; + int n; + wifi.init(); + bool result; + result = wifi.connect(wifissid, password); + if(!result){ + ulcd.printf("error"); + while(!result){ + result=wifi.connect(wifissid, password); + } + } + ulcd.printf("wifi c"); + if(socket.connect(ipaddress, port)<0){ + ulcd.printf("\ndevice nc");//hosted via laptop + while(socket.connect(ipaddress,port)<0){ + } + } + ulcd.printf("\ndevice c"); + //socket.send("1", 1); + while(1){ + /* if(!wifi.is_connected()){ + result = wifi.connect(wifissid, password); + if(!result){ + ulcd.printf("error"); + while(!result){ + result=wifi.connect(wifissid, password); + } + } + } + while(wifi.is_connected()){*/ + led1=!led1; + /* if(!socket.is_connected()){ + while(socket.connect(ipaddress,port)<0){ + led2=!led2; + } + }*/ + n=0; + socket.send("1",1); + // socket.close(); + //while(socket.connect(ipaddress,port)<0){ + led2=!led2; + // } + n=socket.receive(inData, sizeof(inData)); + led3=!led3; + ulcd.cls(); + // ulcd.printf("\n%c%c%c%c%c", inData[0], inData[1], inData[2], inData[3], inData[4]); + prevnum=num; + num = ((inData[3]-48)*10)+(inData[4]-48); + // ulcd.printf("\n%f", num); + if(inData[2]=='-') + num=-num; + if((num>10)or(num<-10)) + num=prevnum; //do nothing if invalid input + index=0; + if(inData[0]=='0') + resettozero(); + else if(inData[0]=='1') + closetiltup(); + else if(inData[0]=='2') + closetiltdown(); + else if(inData[0]=='3') + tiltto(num); + else if(inData[0]=='4') + fullup(); + else if(inData[0]=='5') + fulldown(); + else if(inData[0]=='6'){ + if(num>=0) + moveto(num); + } + ulcd.locate(0,0); + ulcd.printf("Height is %i\n Tilt is %i\n", heightpos, tiltpos); + //if(n>-1){ + socket.close(); + // if(!socket.is_connected()){ + // ulcd.printf("\ndevice nc");//hosted via laptop + while(socket.connect(ipaddress,port)<0){ + led4=!led4; + } + ulcd.printf("\ndevice rc"); + //} + //} + }//} + socket.close(); + wifi.disconnect(); +} + \ No newline at end of file