
ControllerBox directs electromechanical equipment in restaurants to display information.
Dependencies: TextLCD MbedJSONValue libMotiv picojson mbed-rtos mbed
Fork of Mbed_MotiVControllerBox by
main.cpp@7:dd5bf173b5e6, 2015-01-06 (annotated)
- Committer:
- TimWoo
- Date:
- Tue Jan 06 23:02:11 2015 +0000
- Revision:
- 7:dd5bf173b5e6
- Parent:
- 5:e22a1ae893d2
- Child:
- 9:11d0c72fef0d
Converted libModbus to lib
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 | 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/*, ð*/); |
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 | 7:dd5bf173b5e6 | 63 | // c.init(); |
TimWoo | 3:21c8adb97c8f | 64 | c.printCommandList(); |
TimWoo | 7:dd5bf173b5e6 | 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 | */ |