Server for window shades - using Soffy DCT-30 motors - more details here http://robdobson.com/2013/10/moving-my-window-shades-control-to-mbed/

Dependencies:   EthernetInterface RdWebServer mbed-rtos mbed

Committer:
Bobty
Date:
Fri Oct 04 10:38:42 2013 +0000
Revision:
4:c593741df37e
Parent:
2:24fd130c3600
Cosmetic only - no functional changes

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Bobty 4:c593741df37e 1 /* main.cpp
Bobty 4:c593741df37e 2 Rob Dobson 2013
Bobty 4:c593741df37e 3 More details at http://robdobson.com/2013/10/moving-my-window-shades-control-to-mbed/
Bobty 4:c593741df37e 4 */
Bobty 4:c593741df37e 5
Bobty 0:d5f69749da59 6 #include "mbed.h"
Bobty 0:d5f69749da59 7 #include "EthernetInterface.h"
Bobty 0:d5f69749da59 8 #include <stdio.h>
Bobty 0:d5f69749da59 9 #include <string.h>
Bobty 0:d5f69749da59 10 #include "RdWebServer.h"
Bobty 2:24fd130c3600 11 #include "WindowShade.h"
Bobty 0:d5f69749da59 12
Bobty 0:d5f69749da59 13 #define PORT 80
Bobty 0:d5f69749da59 14
Bobty 1:486b1571d1c4 15 Serial pc(USBTX, USBRX);
Bobty 1:486b1571d1c4 16
Bobty 0:d5f69749da59 17 RdWebServer webServer;
Bobty 0:d5f69749da59 18
Bobty 0:d5f69749da59 19 EthernetInterface eth;
Bobty 0:d5f69749da59 20
Bobty 0:d5f69749da59 21 DigitalOut led1(LED1); //server listning status
Bobty 0:d5f69749da59 22 DigitalOut led2(LED2); //socket connecting status
Bobty 0:d5f69749da59 23
Bobty 0:d5f69749da59 24 Ticker ledTick;
Bobty 0:d5f69749da59 25
Bobty 2:24fd130c3600 26 const int TICK_MS = 250;
Bobty 2:24fd130c3600 27 const int MAX_WINDOW_SHADES = 5;
Bobty 2:24fd130c3600 28 int numWindowShades = 0;
Bobty 2:24fd130c3600 29 WindowShade* pWindowShades[MAX_WINDOW_SHADES];
Bobty 2:24fd130c3600 30 char* indexHtmName = "";
Bobty 2:24fd130c3600 31
Bobty 0:d5f69749da59 32 void ledTickfunc()
Bobty 0:d5f69749da59 33 {
Bobty 0:d5f69749da59 34 if(webServer.isListening())
Bobty 0:d5f69749da59 35 {
Bobty 0:d5f69749da59 36 led1 = !led1;
Bobty 0:d5f69749da59 37 }
Bobty 0:d5f69749da59 38 else
Bobty 0:d5f69749da59 39 {
Bobty 0:d5f69749da59 40 led1 = false;
Bobty 0:d5f69749da59 41 }
Bobty 2:24fd130c3600 42 for (int shadeIdx = 0; shadeIdx < numWindowShades; shadeIdx++)
Bobty 2:24fd130c3600 43 pWindowShades[shadeIdx]->CheckTimeouts(TICK_MS);
Bobty 2:24fd130c3600 44 }
Bobty 2:24fd130c3600 45
Bobty 2:24fd130c3600 46 void handleCmd_blindControl(char* cmdStr, char* argStr)
Bobty 2:24fd130c3600 47 {
Bobty 2:24fd130c3600 48 printf("BLINDS COMMAND %s %s\n\r", cmdStr, argStr);
Bobty 2:24fd130c3600 49 if (argStr == NULL)
Bobty 2:24fd130c3600 50 return;
Bobty 2:24fd130c3600 51 char* pch = strtok (argStr,"/");
Bobty 2:24fd130c3600 52 if (pch == NULL)
Bobty 2:24fd130c3600 53 return;
Bobty 2:24fd130c3600 54 int blindNum = pch[0] - '0';
Bobty 2:24fd130c3600 55 if (blindNum < 1 || blindNum > MAX_WINDOW_SHADES)
Bobty 2:24fd130c3600 56 return;
Bobty 2:24fd130c3600 57 int blindIdx = blindNum-1;
Bobty 2:24fd130c3600 58 char* pDirn = strtok (NULL,"/");
Bobty 2:24fd130c3600 59 if (pDirn == NULL)
Bobty 2:24fd130c3600 60 return;
Bobty 2:24fd130c3600 61 char* pDuration = strtok (NULL,"/");
Bobty 2:24fd130c3600 62 if (pDuration == NULL)
Bobty 2:24fd130c3600 63 return;
Bobty 2:24fd130c3600 64 pWindowShades[blindIdx]->DoCommand(pDirn, pDuration);
Bobty 0:d5f69749da59 65 }
Bobty 0:d5f69749da59 66
Bobty 2:24fd130c3600 67 void setShadesConfig()
Bobty 1:486b1571d1c4 68 {
Bobty 2:24fd130c3600 69 printf("Rob Blinds Server - Configured for ");
Bobty 2:24fd130c3600 70 // Check for a config file on the local file system
Bobty 2:24fd130c3600 71 LocalFileSystem local("local");
Bobty 2:24fd130c3600 72 FILE* fp = fopen("office.cnf", "r");
Bobty 2:24fd130c3600 73 if (fp != NULL)
Bobty 2:24fd130c3600 74 {
Bobty 2:24fd130c3600 75 fclose(fp);
Bobty 2:24fd130c3600 76 indexHtmName = "ixoffice.htm";
Bobty 2:24fd130c3600 77 pWindowShades[0] = new WindowShade("Left", p15, p16, p17);
Bobty 2:24fd130c3600 78 pWindowShades[1] = new WindowShade("Mid-left", p18, p19, p20);
Bobty 2:24fd130c3600 79 pWindowShades[2] = new WindowShade("Mid-right", p21, p22, p23);
Bobty 2:24fd130c3600 80 pWindowShades[3] = new WindowShade("Right", p24, p25, p26);
Bobty 2:24fd130c3600 81 pWindowShades[4] = new WindowShade("Rob's", p27, p28, p29);
Bobty 2:24fd130c3600 82 numWindowShades = 5;
Bobty 2:24fd130c3600 83 printf("Office Blinds\n\r");
Bobty 2:24fd130c3600 84 }
Bobty 2:24fd130c3600 85 else
Bobty 2:24fd130c3600 86 {
Bobty 2:24fd130c3600 87 indexHtmName = "ixgames.htm";
Bobty 2:24fd130c3600 88 pWindowShades[0] = new WindowShade("Blind1", p21, p22, p23);
Bobty 2:24fd130c3600 89 pWindowShades[1] = new WindowShade("Blind2", p24, p25, p26);
Bobty 2:24fd130c3600 90 numWindowShades = 2;
Bobty 2:24fd130c3600 91 printf("Playroom Blinds\n\r");
Bobty 2:24fd130c3600 92 }
Bobty 1:486b1571d1c4 93 }
Bobty 1:486b1571d1c4 94
Bobty 0:d5f69749da59 95 int main (void)
Bobty 0:d5f69749da59 96 {
Bobty 1:486b1571d1c4 97 pc.baud(115200);
Bobty 2:24fd130c3600 98
Bobty 2:24fd130c3600 99 setShadesConfig();
Bobty 2:24fd130c3600 100
Bobty 2:24fd130c3600 101 ledTick.attach(&ledTickfunc,TICK_MS / 1000.0);
Bobty 0:d5f69749da59 102
Bobty 0:d5f69749da59 103 // setup ethernet interface
Bobty 0:d5f69749da59 104 eth.init(); //Use DHCP
Bobty 0:d5f69749da59 105 eth.connect();
Bobty 0:d5f69749da59 106 printf("IP Address is %s\n\r", eth.getIPAddress());
Bobty 0:d5f69749da59 107
Bobty 2:24fd130c3600 108 webServer.addCommand("", RdWebServerCmdDef::CMD_LOCALFILE, NULL, indexHtmName, true);
Bobty 2:24fd130c3600 109 webServer.addCommand("gear-gr.png", RdWebServerCmdDef::CMD_LOCALFILE, NULL, NULL, true);
Bobty 2:24fd130c3600 110 webServer.addCommand("blind", RdWebServerCmdDef::CMD_CALLBACK, &handleCmd_blindControl);
Bobty 0:d5f69749da59 111 webServer.init(PORT, &led2);
Bobty 0:d5f69749da59 112 webServer.run();
Bobty 0:d5f69749da59 113 }