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:18:27 2015 +0000
Revision:
5:e22a1ae893d2
Parent:
3:21c8adb97c8f
Child:
6:32e6f0048bf1
Child:
7:dd5bf173b5e6
Malloc call needed for picojson hangs the program silently... Don't see how to debug.; ; Going to try MbedJSONValue library instead

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