ControllerBox directs electromechanical equipment in restaurants to display information.
Dependencies: TextLCD MbedJSONValue libMotiv picojson mbed-rtos mbed
Fork of Mbed_MotiVControllerBox by
main.cpp@1:d54aed10ddf3, 2014-11-15 (annotated)
- Committer:
- TimWoo
- Date:
- Sat Nov 15 13:04:09 2014 +0000
- Revision:
- 1:d54aed10ddf3
- Parent:
- 0:2279181caaa1
- Child:
- 2:ad4509a9d051
Dirty testing stage. Testing ethernet/internet connection
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 | 1:d54aed10ddf3 | 6 | #include "SDFileSystem.h" |
TimWoo | 0:2279181caaa1 | 7 | #include <string> |
TimWoo | 0:2279181caaa1 | 8 | |
TimWoo | 1:d54aed10ddf3 | 9 | /***************** |
TimWoo | 1:d54aed10ddf3 | 10 | Global vars |
TimWoo | 1:d54aed10ddf3 | 11 | ******************/ |
TimWoo | 0:2279181caaa1 | 12 | //the object "lcd" is initialized to act as a TextLCD with 20x4 characters |
TimWoo | 0:2279181caaa1 | 13 | TextLCD lcd(p26, p25, p24, p23, p22, p20, p19, TextLCD::LCD20x4); |
TimWoo | 0:2279181caaa1 | 14 | |
TimWoo | 0:2279181caaa1 | 15 | |
TimWoo | 0:2279181caaa1 | 16 | //inputs |
TimWoo | 0:2279181caaa1 | 17 | DigitalIn Up(p8); |
TimWoo | 0:2279181caaa1 | 18 | DigitalIn Down(p14); |
TimWoo | 0:2279181caaa1 | 19 | |
TimWoo | 0:2279181caaa1 | 20 | //outputs |
TimWoo | 0:2279181caaa1 | 21 | DigitalOut led(p6); |
TimWoo | 0:2279181caaa1 | 22 | |
TimWoo | 0:2279181caaa1 | 23 | //Comms |
TimWoo | 0:2279181caaa1 | 24 | Serial pc(USBTX, USBRX); //tx, rx |
TimWoo | 1:d54aed10ddf3 | 25 | Serial rfd(p9, p10); //tx, rx |
TimWoo | 1:d54aed10ddf3 | 26 | EthernetInterface eth; |
TimWoo | 0:2279181caaa1 | 27 | |
TimWoo | 1:d54aed10ddf3 | 28 | //Storage |
TimWoo | 1:d54aed10ddf3 | 29 | //SD card |
TimWoo | 1:d54aed10ddf3 | 30 | //CS P14 |
TimWoo | 1:d54aed10ddf3 | 31 | //MOSI P11 |
TimWoo | 1:d54aed10ddf3 | 32 | //CLK P13 |
TimWoo | 1:d54aed10ddf3 | 33 | //MISO P12 |
TimWoo | 1:d54aed10ddf3 | 34 | //SDFileSystem sdfs(p11,p12,p13,p14, "sdCard"); |
TimWoo | 0:2279181caaa1 | 35 | |
TimWoo | 1:d54aed10ddf3 | 36 | |
TimWoo | 1:d54aed10ddf3 | 37 | //Controller mainly directs the program. It directs data and also controls the lcd output. |
TimWoo | 0:2279181caaa1 | 38 | Controller c(&lcd); |
TimWoo | 0:2279181caaa1 | 39 | |
TimWoo | 1:d54aed10ddf3 | 40 | /********************** |
TimWoo | 1:d54aed10ddf3 | 41 | Declare functions |
TimWoo | 1:d54aed10ddf3 | 42 | ***********************/ |
TimWoo | 1:d54aed10ddf3 | 43 | |
TimWoo | 0:2279181caaa1 | 44 | void setup(); //Called once to setup |
TimWoo | 0:2279181caaa1 | 45 | void runProgram(); //Program with loop |
TimWoo | 0:2279181caaa1 | 46 | |
TimWoo | 1:d54aed10ddf3 | 47 | /**************** |
TimWoo | 1:d54aed10ddf3 | 48 | MAIN |
TimWoo | 1:d54aed10ddf3 | 49 | *****************/ |
TimWoo | 0:2279181caaa1 | 50 | int main() |
TimWoo | 0:2279181caaa1 | 51 | { |
TimWoo | 0:2279181caaa1 | 52 | setup(); |
TimWoo | 0:2279181caaa1 | 53 | |
TimWoo | 0:2279181caaa1 | 54 | //the LCD is cleared using function .cls() |
TimWoo | 0:2279181caaa1 | 55 | lcd.cls(); |
TimWoo | 0:2279181caaa1 | 56 | |
TimWoo | 0:2279181caaa1 | 57 | pc.printf("Entering loop\r\n"); |
TimWoo | 0:2279181caaa1 | 58 | |
TimWoo | 0:2279181caaa1 | 59 | //the endless loop keeps mbed in low power mode |
TimWoo | 0:2279181caaa1 | 60 | runProgram(); |
TimWoo | 0:2279181caaa1 | 61 | } |
TimWoo | 0:2279181caaa1 | 62 | |
TimWoo | 1:d54aed10ddf3 | 63 | /************************* |
TimWoo | 1:d54aed10ddf3 | 64 | Implement Function |
TimWoo | 1:d54aed10ddf3 | 65 | *************************/ |
TimWoo | 0:2279181caaa1 | 66 | |
TimWoo | 0:2279181caaa1 | 67 | void setup() |
TimWoo | 0:2279181caaa1 | 68 | { |
TimWoo | 0:2279181caaa1 | 69 | pc.printf("Setup Controller Box\r\n"); |
TimWoo | 1:d54aed10ddf3 | 70 | c.setStatus(Controller::INIT); |
TimWoo | 0:2279181caaa1 | 71 | rfd.baud(9600); |
TimWoo | 1:d54aed10ddf3 | 72 | |
TimWoo | 1:d54aed10ddf3 | 73 | //Initialize Ethernet |
TimWoo | 1:d54aed10ddf3 | 74 | eth.init(); |
TimWoo | 1:d54aed10ddf3 | 75 | eth.connect(); |
TimWoo | 0:2279181caaa1 | 76 | } |
TimWoo | 0:2279181caaa1 | 77 | |
TimWoo | 0:2279181caaa1 | 78 | void runProgram() |
TimWoo | 0:2279181caaa1 | 79 | { |
TimWoo | 1:d54aed10ddf3 | 80 | c.lcd->cls(); |
TimWoo | 1:d54aed10ddf3 | 81 | c.lcd->locate(0,0); |
TimWoo | 0:2279181caaa1 | 82 | c.displayStatus(); |
TimWoo | 1:d54aed10ddf3 | 83 | // c.printDesc(1); |
TimWoo | 1:d54aed10ddf3 | 84 | string ip = eth.getIPAddress(); |
TimWoo | 1:d54aed10ddf3 | 85 | c.setStatus(Controller::READY); |
TimWoo | 1:d54aed10ddf3 | 86 | |
TimWoo | 1:d54aed10ddf3 | 87 | UDPSocket sock; |
TimWoo | 1:d54aed10ddf3 | 88 | sock.init(); |
TimWoo | 1:d54aed10ddf3 | 89 | |
TimWoo | 1:d54aed10ddf3 | 90 | Endpoint nist; |
TimWoo | 1:d54aed10ddf3 | 91 | nist.set_address("utcnist.colorado.edu", 37); |
TimWoo | 1:d54aed10ddf3 | 92 | |
TimWoo | 1:d54aed10ddf3 | 93 | char out_buffer[] = "plop"; // Does not matter |
TimWoo | 1:d54aed10ddf3 | 94 | sock.sendTo(nist, out_buffer, sizeof(out_buffer)); |
TimWoo | 1:d54aed10ddf3 | 95 | |
TimWoo | 1:d54aed10ddf3 | 96 | char in_buffer[4]; |
TimWoo | 1:d54aed10ddf3 | 97 | int n = sock.receiveFrom(nist, in_buffer, sizeof(in_buffer)); |
TimWoo | 0:2279181caaa1 | 98 | |
TimWoo | 1:d54aed10ddf3 | 99 | unsigned int timeRes = ntohl( *((unsigned int*)in_buffer)); |
TimWoo | 1:d54aed10ddf3 | 100 | pc.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 | 1:d54aed10ddf3 | 101 | |
TimWoo | 1:d54aed10ddf3 | 102 | sock.close(); |
TimWoo | 1:d54aed10ddf3 | 103 | |
TimWoo | 1:d54aed10ddf3 | 104 | |
TimWoo | 1:d54aed10ddf3 | 105 | pc.printf("%s", ip); |
TimWoo | 1:d54aed10ddf3 | 106 | |
TimWoo | 1:d54aed10ddf3 | 107 | // c.writeLine(3, ("IP: " + ipa)); |
TimWoo | 1:d54aed10ddf3 | 108 | c.lcd->locate(0,3); |
TimWoo | 1:d54aed10ddf3 | 109 | c.lcd->clearLine(); |
TimWoo | 1:d54aed10ddf3 | 110 | c.lcd->locate(0,3); |
TimWoo | 1:d54aed10ddf3 | 111 | c.lcd->printf("IP: %s", ip); |
TimWoo | 1:d54aed10ddf3 | 112 | |
TimWoo | 1:d54aed10ddf3 | 113 | //Reset flower |
TimWoo | 1:d54aed10ddf3 | 114 | rfd.putc(2); |
TimWoo | 1:d54aed10ddf3 | 115 | rfd.putc(0); |
TimWoo | 1:d54aed10ddf3 | 116 | rfd.putc(0); |
TimWoo | 1:d54aed10ddf3 | 117 | rfd.putc(';'); |
TimWoo | 1:d54aed10ddf3 | 118 | wait_ms(2000); |
TimWoo | 0:2279181caaa1 | 119 | |
TimWoo | 0:2279181caaa1 | 120 | char received = 'a'; |
TimWoo | 0:2279181caaa1 | 121 | |
TimWoo | 1:d54aed10ddf3 | 122 | string str = ""; |
TimWoo | 1:d54aed10ddf3 | 123 | int counter = 0; |
TimWoo | 1:d54aed10ddf3 | 124 | int counterLast = -1; |
TimWoo | 1:d54aed10ddf3 | 125 | bool pushedUp = false; |
TimWoo | 1:d54aed10ddf3 | 126 | bool pushedDown = false; |
TimWoo | 1:d54aed10ddf3 | 127 | |
TimWoo | 0:2279181caaa1 | 128 | while(1) { |
TimWoo | 1:d54aed10ddf3 | 129 | |
TimWoo | 1:d54aed10ddf3 | 130 | // received = rfd.txGetLastChar(); |
TimWoo | 1:d54aed10ddf3 | 131 | // c.displWriteLine(3, 'a'); |
TimWoo | 1:d54aed10ddf3 | 132 | // pc.printf("%c", received); |
TimWoo | 1:d54aed10ddf3 | 133 | // received = 'b'; |
TimWoo | 1:d54aed10ddf3 | 134 | if(!Up && !pushedUp) { |
TimWoo | 1:d54aed10ddf3 | 135 | pushedUp = true; |
TimWoo | 1:d54aed10ddf3 | 136 | //Last resort |
TimWoo | 1:d54aed10ddf3 | 137 | // c.setStatus(c.BUSY); |
TimWoo | 1:d54aed10ddf3 | 138 | if(counter >= 6) |
TimWoo | 1:d54aed10ddf3 | 139 | counter = 0; |
TimWoo | 1:d54aed10ddf3 | 140 | else |
TimWoo | 1:d54aed10ddf3 | 141 | counter++; |
TimWoo | 1:d54aed10ddf3 | 142 | } else if(!Down && !pushedDown) { |
TimWoo | 1:d54aed10ddf3 | 143 | pushedDown = true; |
TimWoo | 1:d54aed10ddf3 | 144 | //Last resort |
TimWoo | 1:d54aed10ddf3 | 145 | // c.setStatus(c.READY); |
TimWoo | 1:d54aed10ddf3 | 146 | if(counter < 0) |
TimWoo | 1:d54aed10ddf3 | 147 | counter = 5; |
TimWoo | 1:d54aed10ddf3 | 148 | else |
TimWoo | 1:d54aed10ddf3 | 149 | counter--; |
TimWoo | 1:d54aed10ddf3 | 150 | } else if(Up) |
TimWoo | 1:d54aed10ddf3 | 151 | pushedUp = false; |
TimWoo | 1:d54aed10ddf3 | 152 | else if(Down) |
TimWoo | 1:d54aed10ddf3 | 153 | pushedDown = false; |
TimWoo | 1:d54aed10ddf3 | 154 | |
TimWoo | 1:d54aed10ddf3 | 155 | if(counter != counterLast) { |
TimWoo | 1:d54aed10ddf3 | 156 | switch(counter) { |
TimWoo | 1:d54aed10ddf3 | 157 | case 0: //Tafel vrij |
TimWoo | 1:d54aed10ddf3 | 158 | rfd.putc(2); |
TimWoo | 1:d54aed10ddf3 | 159 | rfd.putc(50); |
TimWoo | 1:d54aed10ddf3 | 160 | rfd.putc(1); |
TimWoo | 1:d54aed10ddf3 | 161 | rfd.putc(';'); |
TimWoo | 1:d54aed10ddf3 | 162 | str = "Tafel vrij"; |
TimWoo | 1:d54aed10ddf3 | 163 | break; |
TimWoo | 1:d54aed10ddf3 | 164 | |
TimWoo | 1:d54aed10ddf3 | 165 | case 1: //Tafel gereserveerd |
TimWoo | 1:d54aed10ddf3 | 166 | rfd.putc(2); |
TimWoo | 1:d54aed10ddf3 | 167 | rfd.putc(52); |
TimWoo | 1:d54aed10ddf3 | 168 | rfd.putc(1); |
TimWoo | 1:d54aed10ddf3 | 169 | rfd.putc(';'); |
TimWoo | 1:d54aed10ddf3 | 170 | str = "Tafel gereserveerd"; |
TimWoo | 1:d54aed10ddf3 | 171 | break; |
TimWoo | 1:d54aed10ddf3 | 172 | |
TimWoo | 1:d54aed10ddf3 | 173 | case 2: //Tafel in gebruik |
TimWoo | 1:d54aed10ddf3 | 174 | rfd.putc(2); |
TimWoo | 1:d54aed10ddf3 | 175 | rfd.putc(29); |
TimWoo | 1:d54aed10ddf3 | 176 | rfd.putc(1); |
TimWoo | 1:d54aed10ddf3 | 177 | rfd.putc(';'); |
TimWoo | 1:d54aed10ddf3 | 178 | wait_ms(500); |
TimWoo | 1:d54aed10ddf3 | 179 | rfd.putc(2); |
TimWoo | 1:d54aed10ddf3 | 180 | rfd.putc(51); |
TimWoo | 1:d54aed10ddf3 | 181 | rfd.putc(1); |
TimWoo | 1:d54aed10ddf3 | 182 | rfd.putc(';'); |
TimWoo | 1:d54aed10ddf3 | 183 | str = "Tafel in gebruik"; |
TimWoo | 1:d54aed10ddf3 | 184 | break; |
TimWoo | 1:d54aed10ddf3 | 185 | |
TimWoo | 1:d54aed10ddf3 | 186 | case 3: //Eten besteld 20 |
TimWoo | 1:d54aed10ddf3 | 187 | rfd.putc(2); |
TimWoo | 1:d54aed10ddf3 | 188 | rfd.putc(54); |
TimWoo | 1:d54aed10ddf3 | 189 | rfd.putc(50); |
TimWoo | 1:d54aed10ddf3 | 190 | rfd.putc(';'); |
TimWoo | 1:d54aed10ddf3 | 191 | str = "Eten best. 50"; |
TimWoo | 1:d54aed10ddf3 | 192 | break; |
TimWoo | 1:d54aed10ddf3 | 193 | |
TimWoo | 1:d54aed10ddf3 | 194 | case 4: //Eten besteld 100 |
TimWoo | 1:d54aed10ddf3 | 195 | rfd.putc(2); |
TimWoo | 1:d54aed10ddf3 | 196 | rfd.putc(54); |
TimWoo | 1:d54aed10ddf3 | 197 | rfd.putc(100); |
TimWoo | 1:d54aed10ddf3 | 198 | rfd.putc(';'); |
TimWoo | 1:d54aed10ddf3 | 199 | str = "Eten best. 100"; |
TimWoo | 1:d54aed10ddf3 | 200 | break; |
TimWoo | 1:d54aed10ddf3 | 201 | |
TimWoo | 1:d54aed10ddf3 | 202 | case 5: //Demo 1 |
TimWoo | 1:d54aed10ddf3 | 203 | rfd.putc(2); |
TimWoo | 1:d54aed10ddf3 | 204 | rfd.putc(101); |
TimWoo | 1:d54aed10ddf3 | 205 | rfd.putc(1); |
TimWoo | 1:d54aed10ddf3 | 206 | rfd.putc(';'); |
TimWoo | 1:d54aed10ddf3 | 207 | str = "Demo 1"; |
TimWoo | 1:d54aed10ddf3 | 208 | break; |
TimWoo | 1:d54aed10ddf3 | 209 | |
TimWoo | 1:d54aed10ddf3 | 210 | default: //Default: lamp modus |
TimWoo | 1:d54aed10ddf3 | 211 | rfd.putc(2); |
TimWoo | 1:d54aed10ddf3 | 212 | rfd.putc(100); |
TimWoo | 1:d54aed10ddf3 | 213 | rfd.putc(1); |
TimWoo | 1:d54aed10ddf3 | 214 | rfd.putc(';'); |
TimWoo | 1:d54aed10ddf3 | 215 | break; |
TimWoo | 1:d54aed10ddf3 | 216 | } |
TimWoo | 1:d54aed10ddf3 | 217 | counterLast = counter; |
TimWoo | 1:d54aed10ddf3 | 218 | c.lcdWriteLine(2, str); |
TimWoo | 0:2279181caaa1 | 219 | } |
TimWoo | 1:d54aed10ddf3 | 220 | |
TimWoo | 1:d54aed10ddf3 | 221 | |
TimWoo | 1:d54aed10ddf3 | 222 | wait_ms(200); |
TimWoo | 0:2279181caaa1 | 223 | //__WFI(); |
TimWoo | 0:2279181caaa1 | 224 | } |
TimWoo | 1:d54aed10ddf3 | 225 | } |
TimWoo | 1:d54aed10ddf3 | 226 | |
TimWoo | 1:d54aed10ddf3 | 227 | |
TimWoo | 1:d54aed10ddf3 | 228 | /* |
TimWoo | 1:d54aed10ddf3 | 229 | EthernetInterface eth; |
TimWoo | 1:d54aed10ddf3 | 230 | eth.init(); //Use DHCP |
TimWoo | 1:d54aed10ddf3 | 231 | eth.connect(); |
TimWoo | 1:d54aed10ddf3 | 232 | |
TimWoo | 1:d54aed10ddf3 | 233 | UDPSocket sock; |
TimWoo | 1:d54aed10ddf3 | 234 | sock.init(); |
TimWoo | 1:d54aed10ddf3 | 235 | |
TimWoo | 1:d54aed10ddf3 | 236 | Endpoint nist; |
TimWoo | 1:d54aed10ddf3 | 237 | nist.set_address("utcnist.colorado.edu", 37); |
TimWoo | 1:d54aed10ddf3 | 238 | |
TimWoo | 1:d54aed10ddf3 | 239 | char out_buffer[] = "plop"; // Does not matter |
TimWoo | 1:d54aed10ddf3 | 240 | sock.sendTo(nist, out_buffer, sizeof(out_buffer)); |
TimWoo | 1:d54aed10ddf3 | 241 | |
TimWoo | 1:d54aed10ddf3 | 242 | char in_buffer[4]; |
TimWoo | 1:d54aed10ddf3 | 243 | int n = sock.receiveFrom(nist, in_buffer, sizeof(in_buffer)); |
TimWoo | 1:d54aed10ddf3 | 244 | |
TimWoo | 1:d54aed10ddf3 | 245 | unsigned int timeRes = ntohl( *((unsigned int*)in_buffer)); |
TimWoo | 1:d54aed10ddf3 | 246 | 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 | 1:d54aed10ddf3 | 247 | |
TimWoo | 1:d54aed10ddf3 | 248 | sock.close(); |
TimWoo | 1:d54aed10ddf3 | 249 | |
TimWoo | 1:d54aed10ddf3 | 250 | eth.disconnect(); |
TimWoo | 1:d54aed10ddf3 | 251 | */ |