ECE4180 Final Project
Dependencies: 4DGL-uLCD-SE ESP8266NodeMCUInterface Motor mbed
Fork of IoT_Blinds_Control by
main.cpp
- Committer:
- jhooper7
- Date:
- 2016-12-10
- Revision:
- 1:d103c1f37bc6
- Parent:
- 0:d0cfb841595e
File content as of revision 1:d103c1f37bc6:
#include "mbed.h"
#include "TCPSocketConnection.h"
#include "ESP8266Interface.h"
#include "uLCD_4DGL.h"
#include "Motor.h"
ESP8266Interface wifi(p28, p27, p26);
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();
}
