ControllerBox directs electromechanical equipment in restaurants to display information.

Dependencies:   EthernetInterface HTTPClient_KVplus MbedJSONValue SDFileSystem TextLCD mbed-rtos mbed picojson

Committer:
TimWoo
Date:
Sun Dec 07 13:18:27 2014 +0000
Revision:
4:8155d4d6a193
Parent:
3:21c8adb97c8f
Sandboxy state of MotiV ControllerBox.; ; ControllerBox directs electromechanical equipment in restaurants for displaying information.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
TimWoo 0:2279181caaa1 1 #include "mbed.h"
TimWoo 0:2279181caaa1 2 //the library "TextLCD.h" was slightly altered to work with the GDM2004D LCD
TimWoo 0:2279181caaa1 3 #include "TextLCD/TextLCD.h"
TimWoo 0:2279181caaa1 4 #include "Controller.h"
TimWoo 1:d54aed10ddf3 5 #include "EthernetInterface.h"
TimWoo 2:ad4509a9d051 6 #include "HTTPClient.h"
TimWoo 3:21c8adb97c8f 7 #include "picojson.h"
TimWoo 2:ad4509a9d051 8 //#include "SDFileSystem.h" Needed if config files are going to be implemented
TimWoo 0:2279181caaa1 9 #include <string>
TimWoo 0:2279181caaa1 10
TimWoo 1:d54aed10ddf3 11 /*****************
TimWoo 1:d54aed10ddf3 12 Global vars
TimWoo 1:d54aed10ddf3 13 ******************/
TimWoo 0:2279181caaa1 14 //the object "lcd" is initialized to act as a TextLCD with 20x4 characters
TimWoo 0:2279181caaa1 15 TextLCD lcd(p26, p25, p24, p23, p22, p20, p19, TextLCD::LCD20x4);
TimWoo 0:2279181caaa1 16
TimWoo 0:2279181caaa1 17
TimWoo 0:2279181caaa1 18 //inputs
TimWoo 0:2279181caaa1 19 DigitalIn Up(p8);
TimWoo 0:2279181caaa1 20 DigitalIn Down(p14);
TimWoo 0:2279181caaa1 21
TimWoo 0:2279181caaa1 22 //outputs
TimWoo 0:2279181caaa1 23 DigitalOut led(p6);
TimWoo 0:2279181caaa1 24
TimWoo 0:2279181caaa1 25 //Comms
TimWoo 0:2279181caaa1 26 Serial pc(USBTX, USBRX); //tx, rx
TimWoo 1:d54aed10ddf3 27 Serial rfd(p9, p10); //tx, rx
TimWoo 2:ad4509a9d051 28
TimWoo 2:ad4509a9d051 29 //TODO: Should be the responsibility of Controller
TimWoo 1:d54aed10ddf3 30 EthernetInterface eth;
TimWoo 2:ad4509a9d051 31 HTTPClient http;
TimWoo 2:ad4509a9d051 32 char str[512];
TimWoo 0:2279181caaa1 33
TimWoo 1:d54aed10ddf3 34 //Storage
TimWoo 1:d54aed10ddf3 35 //SD card
TimWoo 1:d54aed10ddf3 36 //CS P14
TimWoo 1:d54aed10ddf3 37 //MOSI P11
TimWoo 1:d54aed10ddf3 38 //CLK P13
TimWoo 1:d54aed10ddf3 39 //MISO P12
TimWoo 1:d54aed10ddf3 40 //SDFileSystem sdfs(p11,p12,p13,p14, "sdCard");
TimWoo 0:2279181caaa1 41
TimWoo 1:d54aed10ddf3 42
TimWoo 3:21c8adb97c8f 43
TimWoo 1:d54aed10ddf3 44 //Controller mainly directs the program. It directs data and also controls the lcd output.
TimWoo 0:2279181caaa1 45 Controller c(&lcd);
TimWoo 0:2279181caaa1 46
TimWoo 1:d54aed10ddf3 47 /**********************
TimWoo 1:d54aed10ddf3 48 Declare functions
TimWoo 1:d54aed10ddf3 49 ***********************/
TimWoo 1:d54aed10ddf3 50
TimWoo 0:2279181caaa1 51 void setup(); //Called once to setup
TimWoo 0:2279181caaa1 52 void runProgram(); //Program with loop
TimWoo 0:2279181caaa1 53
TimWoo 2:ad4509a9d051 54
TimWoo 1:d54aed10ddf3 55 /****************
TimWoo 1:d54aed10ddf3 56 MAIN
TimWoo 1:d54aed10ddf3 57 *****************/
TimWoo 0:2279181caaa1 58 int main()
TimWoo 0:2279181caaa1 59 {
TimWoo 3:21c8adb97c8f 60 printf("\r\n\r\nBuild ");
TimWoo 3:21c8adb97c8f 61 printf(__DATE__);
TimWoo 3:21c8adb97c8f 62 printf(" - ");
TimWoo 3:21c8adb97c8f 63 printf(__TIME__);
TimWoo 3:21c8adb97c8f 64 printf("\r\n\r\n");
TimWoo 0:2279181caaa1 65 setup();
TimWoo 2:ad4509a9d051 66 c.lcd->cls();
TimWoo 0:2279181caaa1 67 //the LCD is cleared using function .cls()
TimWoo 0:2279181caaa1 68 lcd.cls();
TimWoo 0:2279181caaa1 69
TimWoo 3:21c8adb97c8f 70 c.printCommandList();
TimWoo 0:2279181caaa1 71 pc.printf("Entering loop\r\n");
TimWoo 0:2279181caaa1 72
TimWoo 0:2279181caaa1 73 //the endless loop keeps mbed in low power mode
TimWoo 3:21c8adb97c8f 74 // runProgram();
TimWoo 0:2279181caaa1 75 }
TimWoo 0:2279181caaa1 76
TimWoo 1:d54aed10ddf3 77 /*************************
TimWoo 1:d54aed10ddf3 78 Implement Function
TimWoo 1:d54aed10ddf3 79 *************************/
TimWoo 0:2279181caaa1 80
TimWoo 0:2279181caaa1 81 void setup()
TimWoo 0:2279181caaa1 82 {
TimWoo 0:2279181caaa1 83 pc.printf("Setup Controller Box\r\n");
TimWoo 1:d54aed10ddf3 84 c.setStatus(Controller::INIT);
TimWoo 0:2279181caaa1 85 rfd.baud(9600);
TimWoo 1:d54aed10ddf3 86
TimWoo 1:d54aed10ddf3 87 //Initialize Ethernet
TimWoo 3:21c8adb97c8f 88 // eth.init();
TimWoo 3:21c8adb97c8f 89 // eth.connect();
TimWoo 2:ad4509a9d051 90 wait_ms(200);
TimWoo 0:2279181caaa1 91 }
TimWoo 0:2279181caaa1 92
TimWoo 0:2279181caaa1 93 void runProgram()
TimWoo 0:2279181caaa1 94 {
TimWoo 2:ad4509a9d051 95
TimWoo 1:d54aed10ddf3 96 c.lcd->locate(0,0);
TimWoo 0:2279181caaa1 97 c.displayStatus();
TimWoo 1:d54aed10ddf3 98 // c.printDesc(1);
TimWoo 3:21c8adb97c8f 99 // string ip = eth.getIPAddress();
TimWoo 3:21c8adb97c8f 100 // string mStr = "IP: " + ip + "\r\n";
TimWoo 3:21c8adb97c8f 101 // c.lcdWriteLine(3, mStr);
TimWoo 3:21c8adb97c8f 102 // pc.printf("%s", ip);
TimWoo 3:21c8adb97c8f 103 ////
TimWoo 3:21c8adb97c8f 104 //
TimWoo 2:ad4509a9d051 105 //
TimWoo 3:21c8adb97c8f 106 // //GET data
TimWoo 3:21c8adb97c8f 107 // printf("\nTrying to fetch page...\r\n");
TimWoo 3:21c8adb97c8f 108 // int ret = http.get("http://core.motiv.jvanbaarsen.com/v1/tables/7", str, 128);
TimWoo 3:21c8adb97c8f 109 // if (!ret)
TimWoo 3:21c8adb97c8f 110 // {
TimWoo 3:21c8adb97c8f 111 // printf("Page fetched successfully - read %d characters\r\n", strlen(str));
TimWoo 3:21c8adb97c8f 112 // printf("Result: %s\r\n", str);
TimWoo 3:21c8adb97c8f 113 // c.lcdWriteLine(1, str);
TimWoo 3:21c8adb97c8f 114 // }
TimWoo 3:21c8adb97c8f 115 // else
TimWoo 3:21c8adb97c8f 116 // {
TimWoo 3:21c8adb97c8f 117 // printf("Error - ret = %d - HTTP return code = %d\n", ret, http.getHTTPResponseCode());
TimWoo 3:21c8adb97c8f 118 // }
TimWoo 3:21c8adb97c8f 119 //
TimWoo 3:21c8adb97c8f 120 // picojson::value jsonVal;
TimWoo 3:21c8adb97c8f 121 // char *json = (char*) malloc(strlen(str)+1);
TimWoo 3:21c8adb97c8f 122 // strcpy(json, str);
TimWoo 3:21c8adb97c8f 123 // string err = picojson::parse(jsonVal, json, json + strlen(json));
TimWoo 3:21c8adb97c8f 124 // printf("res error? %s\r\n", err.c_str());
TimWoo 3:21c8adb97c8f 125 //
TimWoo 3:21c8adb97c8f 126 // string code = jsonVal.get("table").get("code").get<string>();
TimWoo 3:21c8adb97c8f 127 //
TimWoo 3:21c8adb97c8f 128 //
TimWoo 3:21c8adb97c8f 129 //// int dinner_stat = json["table"];
TimWoo 3:21c8adb97c8f 130 //// string code = table["code"];
TimWoo 3:21c8adb97c8f 131 ////
TimWoo 3:21c8adb97c8f 132 //// printf("The status of the dinner is: %d\r\n", dinner_stat);
TimWoo 3:21c8adb97c8f 133 // printf("Code: %s\r\n", code);
TimWoo 3:21c8adb97c8f 134
TimWoo 2:ad4509a9d051 135 c.setStatus(Controller::READY);
TimWoo 2:ad4509a9d051 136 pc.printf("Controller ready\r\n");
TimWoo 3:21c8adb97c8f 137
TimWoo 3:21c8adb97c8f 138 c.printCommandList();
TimWoo 1:d54aed10ddf3 139
TimWoo 1:d54aed10ddf3 140 //Reset flower
TimWoo 1:d54aed10ddf3 141 rfd.putc(2);
TimWoo 1:d54aed10ddf3 142 rfd.putc(0);
TimWoo 1:d54aed10ddf3 143 rfd.putc(0);
TimWoo 1:d54aed10ddf3 144 rfd.putc(';');
TimWoo 1:d54aed10ddf3 145 wait_ms(2000);
TimWoo 0:2279181caaa1 146
TimWoo 1:d54aed10ddf3 147 string str = "";
TimWoo 1:d54aed10ddf3 148 int counter = 0;
TimWoo 1:d54aed10ddf3 149 int counterLast = -1;
TimWoo 1:d54aed10ddf3 150 bool pushedUp = false;
TimWoo 1:d54aed10ddf3 151 bool pushedDown = false;
TimWoo 1:d54aed10ddf3 152
TimWoo 0:2279181caaa1 153 while(1) {
TimWoo 1:d54aed10ddf3 154
TimWoo 1:d54aed10ddf3 155 // received = rfd.txGetLastChar();
TimWoo 1:d54aed10ddf3 156 // c.displWriteLine(3, 'a');
TimWoo 1:d54aed10ddf3 157 // pc.printf("%c", received);
TimWoo 1:d54aed10ddf3 158 // received = 'b';
TimWoo 1:d54aed10ddf3 159 if(!Up && !pushedUp) {
TimWoo 1:d54aed10ddf3 160 pushedUp = true;
TimWoo 1:d54aed10ddf3 161 //Last resort
TimWoo 1:d54aed10ddf3 162 // c.setStatus(c.BUSY);
TimWoo 1:d54aed10ddf3 163 if(counter >= 6)
TimWoo 1:d54aed10ddf3 164 counter = 0;
TimWoo 1:d54aed10ddf3 165 else
TimWoo 1:d54aed10ddf3 166 counter++;
TimWoo 1:d54aed10ddf3 167 } else if(!Down && !pushedDown) {
TimWoo 1:d54aed10ddf3 168 pushedDown = true;
TimWoo 1:d54aed10ddf3 169 //Last resort
TimWoo 1:d54aed10ddf3 170 // c.setStatus(c.READY);
TimWoo 1:d54aed10ddf3 171 if(counter < 0)
TimWoo 1:d54aed10ddf3 172 counter = 5;
TimWoo 1:d54aed10ddf3 173 else
TimWoo 1:d54aed10ddf3 174 counter--;
TimWoo 1:d54aed10ddf3 175 } else if(Up)
TimWoo 1:d54aed10ddf3 176 pushedUp = false;
TimWoo 2:ad4509a9d051 177 else if(Down)
TimWoo 1:d54aed10ddf3 178 pushedDown = false;
TimWoo 1:d54aed10ddf3 179
TimWoo 1:d54aed10ddf3 180 if(counter != counterLast) {
TimWoo 1:d54aed10ddf3 181 switch(counter) {
TimWoo 1:d54aed10ddf3 182 case 0: //Tafel vrij
TimWoo 1:d54aed10ddf3 183 rfd.putc(2);
TimWoo 1:d54aed10ddf3 184 rfd.putc(50);
TimWoo 1:d54aed10ddf3 185 rfd.putc(1);
TimWoo 1:d54aed10ddf3 186 rfd.putc(';');
TimWoo 1:d54aed10ddf3 187 str = "Tafel vrij";
TimWoo 1:d54aed10ddf3 188 break;
TimWoo 1:d54aed10ddf3 189
TimWoo 1:d54aed10ddf3 190 case 1: //Tafel gereserveerd
TimWoo 1:d54aed10ddf3 191 rfd.putc(2);
TimWoo 1:d54aed10ddf3 192 rfd.putc(52);
TimWoo 1:d54aed10ddf3 193 rfd.putc(1);
TimWoo 1:d54aed10ddf3 194 rfd.putc(';');
TimWoo 1:d54aed10ddf3 195 str = "Tafel gereserveerd";
TimWoo 1:d54aed10ddf3 196 break;
TimWoo 1:d54aed10ddf3 197
TimWoo 1:d54aed10ddf3 198 case 2: //Tafel in gebruik
TimWoo 1:d54aed10ddf3 199 rfd.putc(2);
TimWoo 1:d54aed10ddf3 200 rfd.putc(29);
TimWoo 1:d54aed10ddf3 201 rfd.putc(1);
TimWoo 1:d54aed10ddf3 202 rfd.putc(';');
TimWoo 1:d54aed10ddf3 203 wait_ms(500);
TimWoo 1:d54aed10ddf3 204 rfd.putc(2);
TimWoo 1:d54aed10ddf3 205 rfd.putc(51);
TimWoo 1:d54aed10ddf3 206 rfd.putc(1);
TimWoo 1:d54aed10ddf3 207 rfd.putc(';');
TimWoo 1:d54aed10ddf3 208 str = "Tafel in gebruik";
TimWoo 1:d54aed10ddf3 209 break;
TimWoo 1:d54aed10ddf3 210
TimWoo 1:d54aed10ddf3 211 case 3: //Eten besteld 20
TimWoo 1:d54aed10ddf3 212 rfd.putc(2);
TimWoo 1:d54aed10ddf3 213 rfd.putc(54);
TimWoo 1:d54aed10ddf3 214 rfd.putc(50);
TimWoo 1:d54aed10ddf3 215 rfd.putc(';');
TimWoo 1:d54aed10ddf3 216 str = "Eten best. 50";
TimWoo 1:d54aed10ddf3 217 break;
TimWoo 1:d54aed10ddf3 218
TimWoo 1:d54aed10ddf3 219 case 4: //Eten besteld 100
TimWoo 1:d54aed10ddf3 220 rfd.putc(2);
TimWoo 1:d54aed10ddf3 221 rfd.putc(54);
TimWoo 1:d54aed10ddf3 222 rfd.putc(100);
TimWoo 1:d54aed10ddf3 223 rfd.putc(';');
TimWoo 1:d54aed10ddf3 224 str = "Eten best. 100";
TimWoo 1:d54aed10ddf3 225 break;
TimWoo 1:d54aed10ddf3 226
TimWoo 1:d54aed10ddf3 227 case 5: //Demo 1
TimWoo 1:d54aed10ddf3 228 rfd.putc(2);
TimWoo 1:d54aed10ddf3 229 rfd.putc(101);
TimWoo 1:d54aed10ddf3 230 rfd.putc(1);
TimWoo 1:d54aed10ddf3 231 rfd.putc(';');
TimWoo 1:d54aed10ddf3 232 str = "Demo 1";
TimWoo 1:d54aed10ddf3 233 break;
TimWoo 1:d54aed10ddf3 234
TimWoo 1:d54aed10ddf3 235 default: //Default: lamp modus
TimWoo 1:d54aed10ddf3 236 rfd.putc(2);
TimWoo 1:d54aed10ddf3 237 rfd.putc(100);
TimWoo 1:d54aed10ddf3 238 rfd.putc(1);
TimWoo 1:d54aed10ddf3 239 rfd.putc(';');
TimWoo 1:d54aed10ddf3 240 break;
TimWoo 1:d54aed10ddf3 241 }
TimWoo 1:d54aed10ddf3 242 counterLast = counter;
TimWoo 2:ad4509a9d051 243 c.lcdWriteLine(2, str);
TimWoo 0:2279181caaa1 244 }
TimWoo 1:d54aed10ddf3 245
TimWoo 1:d54aed10ddf3 246
TimWoo 1:d54aed10ddf3 247 wait_ms(200);
TimWoo 0:2279181caaa1 248 //__WFI();
TimWoo 0:2279181caaa1 249 }
TimWoo 1:d54aed10ddf3 250 }
TimWoo 1:d54aed10ddf3 251
TimWoo 1:d54aed10ddf3 252
TimWoo 1:d54aed10ddf3 253 /*
TimWoo 1:d54aed10ddf3 254 EthernetInterface eth;
TimWoo 1:d54aed10ddf3 255 eth.init(); //Use DHCP
TimWoo 1:d54aed10ddf3 256 eth.connect();
TimWoo 2:ad4509a9d051 257
TimWoo 1:d54aed10ddf3 258 UDPSocket sock;
TimWoo 1:d54aed10ddf3 259 sock.init();
TimWoo 2:ad4509a9d051 260
TimWoo 1:d54aed10ddf3 261 Endpoint nist;
TimWoo 1:d54aed10ddf3 262 nist.set_address("utcnist.colorado.edu", 37);
TimWoo 2:ad4509a9d051 263
TimWoo 1:d54aed10ddf3 264 char out_buffer[] = "plop"; // Does not matter
TimWoo 1:d54aed10ddf3 265 sock.sendTo(nist, out_buffer, sizeof(out_buffer));
TimWoo 2:ad4509a9d051 266
TimWoo 1:d54aed10ddf3 267 char in_buffer[4];
TimWoo 1:d54aed10ddf3 268 int n = sock.receiveFrom(nist, in_buffer, sizeof(in_buffer));
TimWoo 2:ad4509a9d051 269
TimWoo 1:d54aed10ddf3 270 unsigned int timeRes = ntohl( *((unsigned int*)in_buffer));
TimWoo 1:d54aed10ddf3 271 printf("Received %d bytes from server %s on port %d: %u seconds since 1/01/1900 00:00 GMT\n", n, nist.get_address(), nist.get_port(), timeRes);
TimWoo 2:ad4509a9d051 272
TimWoo 1:d54aed10ddf3 273 sock.close();
TimWoo 2:ad4509a9d051 274
TimWoo 1:d54aed10ddf3 275 eth.disconnect();
TimWoo 1:d54aed10ddf3 276 */