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 07:41:43 2013 +0000
Revision:
2:24fd130c3600
Parent:
1:486b1571d1c4
Child:
4:c593741df37e
Initial Revision Working

Who changed what in which revision?

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