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:
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?

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 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 */