ControllerBox directs electromechanical equipment in restaurants to display information.
Dependencies: EthernetInterface HTTPClient_KVplus MbedJSONValue SDFileSystem TextLCD mbed-rtos mbed picojson
main.cpp@4:8155d4d6a193, 2014-12-07 (annotated)
- 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?
User | Revision | Line number | New 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 | */ |