ControllerBox directs electromechanical equipment in restaurants to display information.

Dependencies:   TextLCD MbedJSONValue libMotiv picojson mbed-rtos mbed

Fork of Mbed_MotiVControllerBox by Tim Wöstemeier

Committer:
TimWoo
Date:
Tue Jan 06 22:41:10 2015 +0000
Revision:
6:32e6f0048bf1
Parent:
5:e22a1ae893d2
Some changes to MbedJSONValue. Makes no difference...

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 5:e22a1ae893d2 5 #include "picojson.h"
TimWoo 1:d54aed10ddf3 6 #include "EthernetInterface.h"
TimWoo 5:e22a1ae893d2 7 //#include "HTTPClient.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 5:e22a1ae893d2 30 EthernetInterface eth; //Doeesn't want to initialize in the objects Controller->mAPI
TimWoo 2:ad4509a9d051 31 HTTPClient http;
TimWoo 5:e22a1ae893d2 32 char str[1024];
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 5:e22a1ae893d2 45 Controller c(&lcd/*, &eth*/);
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 5:e22a1ae893d2 60 eth.init();
TimWoo 5:e22a1ae893d2 61 eth.connect();
TimWoo 5:e22a1ae893d2 62 printf("int main()\r\n");
TimWoo 5:e22a1ae893d2 63 c.init();
TimWoo 3:21c8adb97c8f 64 c.printCommandList();
TimWoo 5:e22a1ae893d2 65 c.testRequest();
TimWoo 5:e22a1ae893d2 66 // setup();
TimWoo 5:e22a1ae893d2 67 //
TimWoo 6:32e6f0048bf1 68
TimWoo 6:32e6f0048bf1 69
TimWoo 6:32e6f0048bf1 70
TimWoo 6:32e6f0048bf1 71
TimWoo 6:32e6f0048bf1 72 //printf("\nTrying to fetch page...\r\n");
TimWoo 6:32e6f0048bf1 73 // int ret = http.get("http://core.motiv.jvanbaarsen.com/v1/tables", str, 1024);
TimWoo 6:32e6f0048bf1 74 // if (!ret)
TimWoo 6:32e6f0048bf1 75 // {
TimWoo 6:32e6f0048bf1 76 // printf("Page fetched successfully - read %d characters\r\n", strlen(str));
TimWoo 6:32e6f0048bf1 77 // printf("Result: %s\r\n", str);
TimWoo 6:32e6f0048bf1 78 // c.lcdWriteLine(1, str);
TimWoo 6:32e6f0048bf1 79 // }
TimWoo 6:32e6f0048bf1 80 // else
TimWoo 6:32e6f0048bf1 81 // {
TimWoo 6:32e6f0048bf1 82 // printf("Error - ret = %d - HTTP return code = %d\n", ret, http.getHTTPResponseCode());
TimWoo 6:32e6f0048bf1 83 // }
TimWoo 6:32e6f0048bf1 84 //
TimWoo 6:32e6f0048bf1 85 // picojson::value jsonVal;
TimWoo 6:32e6f0048bf1 86 // char *json = (char*) malloc(strlen(str)+1);
TimWoo 6:32e6f0048bf1 87 // strcpy(json, str);
TimWoo 6:32e6f0048bf1 88 // string err = picojson::parse(jsonVal, json, json + strlen(json));
TimWoo 6:32e6f0048bf1 89 // printf("res error? %s\r\n", err.c_str());
TimWoo 6:32e6f0048bf1 90 //
TimWoo 6:32e6f0048bf1 91 // string code = jsonVal.get("table").get("code").get<string>();
TimWoo 6:32e6f0048bf1 92
TimWoo 6:32e6f0048bf1 93
TimWoo 6:32e6f0048bf1 94 // int dinner_stat = json["table"];
TimWoo 6:32e6f0048bf1 95 // string code = table["code"];
TimWoo 6:32e6f0048bf1 96 //
TimWoo 6:32e6f0048bf1 97 // printf("The status of the dinner is: %d\r\n", dinner_stat);
TimWoo 6:32e6f0048bf1 98 // printf("Code: %s\r\n", code);
TimWoo 6:32e6f0048bf1 99
TimWoo 6:32e6f0048bf1 100
TimWoo 6:32e6f0048bf1 101
TimWoo 6:32e6f0048bf1 102
TimWoo 6:32e6f0048bf1 103
TimWoo 5:e22a1ae893d2 104 // pc.printf("Entering loop\r\n");
TimWoo 5:e22a1ae893d2 105 //
TimWoo 5:e22a1ae893d2 106 // //the endless loop keeps mbed in low power mode
TimWoo 3:21c8adb97c8f 107 // runProgram();
TimWoo 0:2279181caaa1 108 }
TimWoo 0:2279181caaa1 109
TimWoo 1:d54aed10ddf3 110 /*************************
TimWoo 1:d54aed10ddf3 111 Implement Function
TimWoo 1:d54aed10ddf3 112 *************************/
TimWoo 0:2279181caaa1 113
TimWoo 0:2279181caaa1 114 void setup()
TimWoo 0:2279181caaa1 115 {
TimWoo 0:2279181caaa1 116 pc.printf("Setup Controller Box\r\n");
TimWoo 1:d54aed10ddf3 117 c.setStatus(Controller::INIT);
TimWoo 0:2279181caaa1 118 rfd.baud(9600);
TimWoo 1:d54aed10ddf3 119
TimWoo 2:ad4509a9d051 120 wait_ms(200);
TimWoo 0:2279181caaa1 121 }
TimWoo 0:2279181caaa1 122
TimWoo 0:2279181caaa1 123 void runProgram()
TimWoo 0:2279181caaa1 124 {
TimWoo 2:ad4509a9d051 125
TimWoo 3:21c8adb97c8f 126 //
TimWoo 5:e22a1ae893d2 127
TimWoo 5:e22a1ae893d2 128
TimWoo 3:21c8adb97c8f 129 // //GET data
TimWoo 3:21c8adb97c8f 130 // printf("\nTrying to fetch page...\r\n");
TimWoo 5:e22a1ae893d2 131 // int ret = http.get("http://core.motiv.jvanbaarsen.com/v1/tables", str, 128);
TimWoo 3:21c8adb97c8f 132 // if (!ret)
TimWoo 3:21c8adb97c8f 133 // {
TimWoo 3:21c8adb97c8f 134 // printf("Page fetched successfully - read %d characters\r\n", strlen(str));
TimWoo 3:21c8adb97c8f 135 // printf("Result: %s\r\n", str);
TimWoo 3:21c8adb97c8f 136 // c.lcdWriteLine(1, str);
TimWoo 3:21c8adb97c8f 137 // }
TimWoo 3:21c8adb97c8f 138 // else
TimWoo 3:21c8adb97c8f 139 // {
TimWoo 3:21c8adb97c8f 140 // printf("Error - ret = %d - HTTP return code = %d\n", ret, http.getHTTPResponseCode());
TimWoo 3:21c8adb97c8f 141 // }
TimWoo 3:21c8adb97c8f 142 //
TimWoo 3:21c8adb97c8f 143 // picojson::value jsonVal;
TimWoo 3:21c8adb97c8f 144 // char *json = (char*) malloc(strlen(str)+1);
TimWoo 3:21c8adb97c8f 145 // strcpy(json, str);
TimWoo 3:21c8adb97c8f 146 // string err = picojson::parse(jsonVal, json, json + strlen(json));
TimWoo 3:21c8adb97c8f 147 // printf("res error? %s\r\n", err.c_str());
TimWoo 3:21c8adb97c8f 148 //
TimWoo 3:21c8adb97c8f 149 // string code = jsonVal.get("table").get("code").get<string>();
TimWoo 3:21c8adb97c8f 150 //
TimWoo 3:21c8adb97c8f 151 //
TimWoo 5:e22a1ae893d2 152 // int dinner_stat = json["table"];
TimWoo 5:e22a1ae893d2 153 // string code = table["code"];
TimWoo 5:e22a1ae893d2 154 //
TimWoo 5:e22a1ae893d2 155 // printf("The status of the dinner is: %d\r\n", dinner_stat);
TimWoo 3:21c8adb97c8f 156 // printf("Code: %s\r\n", code);
TimWoo 3:21c8adb97c8f 157
TimWoo 2:ad4509a9d051 158 c.setStatus(Controller::READY);
TimWoo 2:ad4509a9d051 159 pc.printf("Controller ready\r\n");
TimWoo 3:21c8adb97c8f 160
TimWoo 3:21c8adb97c8f 161 c.printCommandList();
TimWoo 1:d54aed10ddf3 162 //Reset flower
TimWoo 1:d54aed10ddf3 163 rfd.putc(2);
TimWoo 1:d54aed10ddf3 164 rfd.putc(0);
TimWoo 1:d54aed10ddf3 165 rfd.putc(0);
TimWoo 1:d54aed10ddf3 166 rfd.putc(';');
TimWoo 1:d54aed10ddf3 167 wait_ms(2000);
TimWoo 0:2279181caaa1 168
TimWoo 1:d54aed10ddf3 169 string str = "";
TimWoo 1:d54aed10ddf3 170 int counter = 0;
TimWoo 1:d54aed10ddf3 171 int counterLast = -1;
TimWoo 1:d54aed10ddf3 172 bool pushedUp = false;
TimWoo 1:d54aed10ddf3 173 bool pushedDown = false;
TimWoo 1:d54aed10ddf3 174
TimWoo 0:2279181caaa1 175 while(1) {
TimWoo 1:d54aed10ddf3 176
TimWoo 1:d54aed10ddf3 177 // received = rfd.txGetLastChar();
TimWoo 1:d54aed10ddf3 178 // c.displWriteLine(3, 'a');
TimWoo 1:d54aed10ddf3 179 // pc.printf("%c", received);
TimWoo 1:d54aed10ddf3 180 // received = 'b';
TimWoo 1:d54aed10ddf3 181 if(!Up && !pushedUp) {
TimWoo 1:d54aed10ddf3 182 pushedUp = true;
TimWoo 1:d54aed10ddf3 183 //Last resort
TimWoo 1:d54aed10ddf3 184 // c.setStatus(c.BUSY);
TimWoo 1:d54aed10ddf3 185 if(counter >= 6)
TimWoo 1:d54aed10ddf3 186 counter = 0;
TimWoo 1:d54aed10ddf3 187 else
TimWoo 1:d54aed10ddf3 188 counter++;
TimWoo 1:d54aed10ddf3 189 } else if(!Down && !pushedDown) {
TimWoo 1:d54aed10ddf3 190 pushedDown = true;
TimWoo 1:d54aed10ddf3 191 //Last resort
TimWoo 1:d54aed10ddf3 192 // c.setStatus(c.READY);
TimWoo 1:d54aed10ddf3 193 if(counter < 0)
TimWoo 1:d54aed10ddf3 194 counter = 5;
TimWoo 1:d54aed10ddf3 195 else
TimWoo 1:d54aed10ddf3 196 counter--;
TimWoo 1:d54aed10ddf3 197 } else if(Up)
TimWoo 1:d54aed10ddf3 198 pushedUp = false;
TimWoo 2:ad4509a9d051 199 else if(Down)
TimWoo 1:d54aed10ddf3 200 pushedDown = false;
TimWoo 1:d54aed10ddf3 201
TimWoo 1:d54aed10ddf3 202 if(counter != counterLast) {
TimWoo 1:d54aed10ddf3 203 switch(counter) {
TimWoo 1:d54aed10ddf3 204 case 0: //Tafel vrij
TimWoo 1:d54aed10ddf3 205 rfd.putc(2);
TimWoo 1:d54aed10ddf3 206 rfd.putc(50);
TimWoo 1:d54aed10ddf3 207 rfd.putc(1);
TimWoo 1:d54aed10ddf3 208 rfd.putc(';');
TimWoo 1:d54aed10ddf3 209 str = "Tafel vrij";
TimWoo 1:d54aed10ddf3 210 break;
TimWoo 1:d54aed10ddf3 211
TimWoo 1:d54aed10ddf3 212 case 1: //Tafel gereserveerd
TimWoo 1:d54aed10ddf3 213 rfd.putc(2);
TimWoo 1:d54aed10ddf3 214 rfd.putc(52);
TimWoo 1:d54aed10ddf3 215 rfd.putc(1);
TimWoo 1:d54aed10ddf3 216 rfd.putc(';');
TimWoo 1:d54aed10ddf3 217 str = "Tafel gereserveerd";
TimWoo 1:d54aed10ddf3 218 break;
TimWoo 1:d54aed10ddf3 219
TimWoo 1:d54aed10ddf3 220 case 2: //Tafel in gebruik
TimWoo 1:d54aed10ddf3 221 rfd.putc(2);
TimWoo 1:d54aed10ddf3 222 rfd.putc(29);
TimWoo 1:d54aed10ddf3 223 rfd.putc(1);
TimWoo 1:d54aed10ddf3 224 rfd.putc(';');
TimWoo 1:d54aed10ddf3 225 wait_ms(500);
TimWoo 1:d54aed10ddf3 226 rfd.putc(2);
TimWoo 1:d54aed10ddf3 227 rfd.putc(51);
TimWoo 1:d54aed10ddf3 228 rfd.putc(1);
TimWoo 1:d54aed10ddf3 229 rfd.putc(';');
TimWoo 1:d54aed10ddf3 230 str = "Tafel in gebruik";
TimWoo 1:d54aed10ddf3 231 break;
TimWoo 1:d54aed10ddf3 232
TimWoo 1:d54aed10ddf3 233 case 3: //Eten besteld 20
TimWoo 1:d54aed10ddf3 234 rfd.putc(2);
TimWoo 1:d54aed10ddf3 235 rfd.putc(54);
TimWoo 1:d54aed10ddf3 236 rfd.putc(50);
TimWoo 1:d54aed10ddf3 237 rfd.putc(';');
TimWoo 1:d54aed10ddf3 238 str = "Eten best. 50";
TimWoo 1:d54aed10ddf3 239 break;
TimWoo 1:d54aed10ddf3 240
TimWoo 1:d54aed10ddf3 241 case 4: //Eten besteld 100
TimWoo 1:d54aed10ddf3 242 rfd.putc(2);
TimWoo 1:d54aed10ddf3 243 rfd.putc(54);
TimWoo 1:d54aed10ddf3 244 rfd.putc(100);
TimWoo 1:d54aed10ddf3 245 rfd.putc(';');
TimWoo 1:d54aed10ddf3 246 str = "Eten best. 100";
TimWoo 1:d54aed10ddf3 247 break;
TimWoo 1:d54aed10ddf3 248
TimWoo 1:d54aed10ddf3 249 case 5: //Demo 1
TimWoo 1:d54aed10ddf3 250 rfd.putc(2);
TimWoo 1:d54aed10ddf3 251 rfd.putc(101);
TimWoo 1:d54aed10ddf3 252 rfd.putc(1);
TimWoo 1:d54aed10ddf3 253 rfd.putc(';');
TimWoo 1:d54aed10ddf3 254 str = "Demo 1";
TimWoo 1:d54aed10ddf3 255 break;
TimWoo 1:d54aed10ddf3 256
TimWoo 1:d54aed10ddf3 257 default: //Default: lamp modus
TimWoo 1:d54aed10ddf3 258 rfd.putc(2);
TimWoo 1:d54aed10ddf3 259 rfd.putc(100);
TimWoo 1:d54aed10ddf3 260 rfd.putc(1);
TimWoo 1:d54aed10ddf3 261 rfd.putc(';');
TimWoo 1:d54aed10ddf3 262 break;
TimWoo 1:d54aed10ddf3 263 }
TimWoo 1:d54aed10ddf3 264 counterLast = counter;
TimWoo 2:ad4509a9d051 265 c.lcdWriteLine(2, str);
TimWoo 0:2279181caaa1 266 }
TimWoo 1:d54aed10ddf3 267
TimWoo 1:d54aed10ddf3 268
TimWoo 1:d54aed10ddf3 269 wait_ms(200);
TimWoo 0:2279181caaa1 270 //__WFI();
TimWoo 0:2279181caaa1 271 }
TimWoo 1:d54aed10ddf3 272 }
TimWoo 1:d54aed10ddf3 273
TimWoo 1:d54aed10ddf3 274
TimWoo 1:d54aed10ddf3 275 /*
TimWoo 1:d54aed10ddf3 276 EthernetInterface eth;
TimWoo 1:d54aed10ddf3 277 eth.init(); //Use DHCP
TimWoo 1:d54aed10ddf3 278 eth.connect();
TimWoo 2:ad4509a9d051 279
TimWoo 1:d54aed10ddf3 280 UDPSocket sock;
TimWoo 1:d54aed10ddf3 281 sock.init();
TimWoo 2:ad4509a9d051 282
TimWoo 1:d54aed10ddf3 283 Endpoint nist;
TimWoo 1:d54aed10ddf3 284 nist.set_address("utcnist.colorado.edu", 37);
TimWoo 2:ad4509a9d051 285
TimWoo 1:d54aed10ddf3 286 char out_buffer[] = "plop"; // Does not matter
TimWoo 1:d54aed10ddf3 287 sock.sendTo(nist, out_buffer, sizeof(out_buffer));
TimWoo 2:ad4509a9d051 288
TimWoo 1:d54aed10ddf3 289 char in_buffer[4];
TimWoo 1:d54aed10ddf3 290 int n = sock.receiveFrom(nist, in_buffer, sizeof(in_buffer));
TimWoo 2:ad4509a9d051 291
TimWoo 1:d54aed10ddf3 292 unsigned int timeRes = ntohl( *((unsigned int*)in_buffer));
TimWoo 1:d54aed10ddf3 293 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 294
TimWoo 1:d54aed10ddf3 295 sock.close();
TimWoo 2:ad4509a9d051 296
TimWoo 1:d54aed10ddf3 297 eth.disconnect();
TimWoo 1:d54aed10ddf3 298 */