ControllerBox directs electromechanical equipment in restaurants to display information.

Dependencies:   EthernetInterface HTTPClient_KVplus MbedJSONValue SDFileSystem TextLCD mbed-rtos mbed picojson

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?

UserRevisionLine numberNew contents of line
TimWoo 3:21c8adb97c8f 1 #include <string>
TimWoo 3:21c8adb97c8f 2 #include <stdlib.h>
TimWoo 3:21c8adb97c8f 3 #include "TextLCD.h"
TimWoo 3:21c8adb97c8f 4 #include "Controller.h"
TimWoo 3:21c8adb97c8f 5 #include "Device.h"
TimWoo 3:21c8adb97c8f 6 #include "Table.h"
TimWoo 3:21c8adb97c8f 7 #include "Flower.h"
TimWoo 3:21c8adb97c8f 8
TimWoo 3:21c8adb97c8f 9 #include <exception>
TimWoo 3:21c8adb97c8f 10 //#include <logic_error>
TimWoo 3:21c8adb97c8f 11 //#include <runtime_error>
TimWoo 3:21c8adb97c8f 12 #include <iostream>
TimWoo 3:21c8adb97c8f 13 //Flower commands
TimWoo 3:21c8adb97c8f 14 // fRESET = 0,
TimWoo 3:21c8adb97c8f 15 // fPETAL_SPD = 1,
TimWoo 3:21c8adb97c8f 16 // fBLINK_SPD = 2,
TimWoo 3:21c8adb97c8f 17 // fBLINK_PERIOD = 3,
TimWoo 3:21c8adb97c8f 18 // fLED_INTENSITY = 4,
TimWoo 3:21c8adb97c8f 19 // fPETAL_POS = 10,
TimWoo 3:21c8adb97c8f 20 // fLED_TABLE_FREE = 20,
TimWoo 3:21c8adb97c8f 21 // fLED_TABLE_RES = 21,
TimWoo 3:21c8adb97c8f 22 // fLED_FOOD = 22,
TimWoo 3:21c8adb97c8f 23 // fLED_DRINK = 23,
TimWoo 3:21c8adb97c8f 24 // fLED_SERVICE = 24,
TimWoo 3:21c8adb97c8f 25 // fLED_CLR = 29,
TimWoo 3:21c8adb97c8f 26 //// Flower version 2 commands n/a for now.
TimWoo 3:21c8adb97c8f 27 //// fPISTIL_SPD = 3,
TimWoo 3:21c8adb97c8f 28 //// fPETAL1_POS = 11,
TimWoo 3:21c8adb97c8f 29 //// fPETAL2_POS = 12,
TimWoo 3:21c8adb97c8f 30 //// fPETAL3_POS = 13,
TimWoo 3:21c8adb97c8f 31 //// fPETAL4_POS = 14,
TimWoo 3:21c8adb97c8f 32 //// fPETAL5_POS = 15,
TimWoo 3:21c8adb97c8f 33 //// fPETAL6_POS = 16,
TimWoo 3:21c8adb97c8f 34 //// fPISTIL_POS_FOOD = 30,
TimWoo 3:21c8adb97c8f 35 //// fPISTIL_POS_DRINKS = 31,
TimWoo 3:21c8adb97c8f 36 //// fPISTIL_POS_SERVICE = 32
TimWoo 3:21c8adb97c8f 37 // fTABLE_FREE = 50,
TimWoo 3:21c8adb97c8f 38 // fTABLE_ACTIVE = 51,
TimWoo 3:21c8adb97c8f 39 // fTABLE_RES = 52,
TimWoo 3:21c8adb97c8f 40 // fTABLE_END = 53,
TimWoo 3:21c8adb97c8f 41 // fFOOD_ORDERED = 54,
TimWoo 3:21c8adb97c8f 42 // fDRINKS_ORDERED = 55,
TimWoo 3:21c8adb97c8f 43 // fSERVICE_REQ = 56,
TimWoo 3:21c8adb97c8f 44 // fPETALS_CLOSE = 60,
TimWoo 3:21c8adb97c8f 45 // fLAMP_ACT = 100,
TimWoo 3:21c8adb97c8f 46 // fDEMO1 = 101,
TimWoo 3:21c8adb97c8f 47 // fDEMO2 = 102
TimWoo 3:21c8adb97c8f 48 //Flower commands v2
TimWoo 3:21c8adb97c8f 49 //Functie Waarde(n) Doel
TimWoo 3:21c8adb97c8f 50 //
TimWoo 3:21c8adb97c8f 51 //Primaire functies
TimWoo 3:21c8adb97c8f 52 //
TimWoo 3:21c8adb97c8f 53 //0* 0 Reset (Zet alle waarden terug naar default)
TimWoo 3:21c8adb97c8f 54 //1* 0 – 100 Zet bewegingssnelheid van de bladeren (0 langzaam, 100 snel)
TimWoo 3:21c8adb97c8f 55 //2 0 – 100 Zet knippersnelheid van de verlichting (in %)
TimWoo 3:21c8adb97c8f 56 //3 0 – 255 Zet knipperlengte van de verlichting (in sec)
TimWoo 3:21c8adb97c8f 57 //4 0 – 100 Zet de lichtintensiteit van de LEDstrip (0 – 100 %)
TimWoo 3:21c8adb97c8f 58 //5 0 – 100 Zet bewegingssnelheid van de stampers (Niet beschikbaar in bloem versie 1)
TimWoo 3:21c8adb97c8f 59 //6 0 – 255 Zet tijd
TimWoo 3:21c8adb97c8f 60 //10* 0 – 100 Zet de positie van de bloembladeren (0 dicht, 100 open)
TimWoo 3:21c8adb97c8f 61 //11 – 18 0 – 100 Zet de positie van (max. 8) individuele bloembladeren (0 dicht, 100 open) (Niet beschikbaar in bloem versie 1)
TimWoo 3:21c8adb97c8f 62 //20* 0 … 1 Zet led “tafel vrij”
TimWoo 3:21c8adb97c8f 63 //21* 0 … 1 Zet led “tafel gereserveerd”
TimWoo 3:21c8adb97c8f 64 //22* 0 … 1 Zet led F(ood)
TimWoo 3:21c8adb97c8f 65 //23* 0 … 1 Zet led D(rink)
TimWoo 3:21c8adb97c8f 66 //24* 0 … 1 Zet led S(ervice)
TimWoo 3:21c8adb97c8f 67 //29 0 … 1 Zet led verlichting (standaard wit)
TimWoo 3:21c8adb97c8f 68 //30 0 – 100 Zet hoogte van stamper F(ood) (Niet beschikbaar in bloem versie 1)
TimWoo 3:21c8adb97c8f 69 //31 0 – 100 Zet hoogte van stamper D(rink) (Niet beschikbaar in bloem versie 1)
TimWoo 3:21c8adb97c8f 70 //32 0 – 100 Zet hoogte van stamper S(ervice) (Niet beschikbaar in bloem versie 1)
TimWoo 3:21c8adb97c8f 71 //Complexe functies
TimWoo 3:21c8adb97c8f 72 //50* 1 Zet bloem naar stand “Tafel vrij” (Gesloten groen)
TimWoo 3:21c8adb97c8f 73 //51* 1 Zet bloem naar stand “Tafel in gebruik” (Open groen)
TimWoo 3:21c8adb97c8f 74 //52* 1 Zet bloem naar stand “Tafel gereserveerd” (Gesloten rood)
TimWoo 3:21c8adb97c8f 75 //53* 1 Zet bloem naar stand “Zittingstijd om” (Open rood)
TimWoo 3:21c8adb97c8f 76 //54* 0 – 100 Zet bloem naar stand “Eten besteld” met x% bestelstatus
TimWoo 3:21c8adb97c8f 77 //55* 0 – 100 Zet bloem naar stand “Drank besteld” met x% bestelstatus
TimWoo 3:21c8adb97c8f 78 //56* 0 – 100 Zet bloem naar stand “Bediening gevraagd” met x% bestelstatus
TimWoo 3:21c8adb97c8f 79 //60 1 Bloem sluit al naar gelang de ingestelde tijd
TimWoo 3:21c8adb97c8f 80 //61 1 Zet bloem naar status “zittingstijd om”. (“Gereserveerd rood knipperen”)
TimWoo 3:21c8adb97c8f 81 //100 1 Lampfunctie (Bloem opent een klein beetje en fungeert als lamp)
TimWoo 3:21c8adb97c8f 82 //101 1 Demostand 1 (Bloem gaat continu open en dicht en alle leds wisselen)
TimWoo 3:21c8adb97c8f 83 //102 0 – 100 Demostand 2 (Bloem opent naar stand X en statusleds wisselen)
TimWoo 3:21c8adb97c8f 84
TimWoo 3:21c8adb97c8f 85 //#include "MotiVAPI.h"
TimWoo 3:21c8adb97c8f 86
TimWoo 3:21c8adb97c8f 87 //Test endpoint: http://demo.motiv.jvanbaarsen.com/demo/test
TimWoo 3:21c8adb97c8f 88 using namespace std;
TimWoo 3:21c8adb97c8f 89
TimWoo 3:21c8adb97c8f 90 Controller::Controller(TextLCD *lcd):
TimWoo 3:21c8adb97c8f 91 status(WAITING)
TimWoo 3:21c8adb97c8f 92 {
TimWoo 3:21c8adb97c8f 93 printf("Controller constructor\r\n");
TimWoo 3:21c8adb97c8f 94 this->lcd = lcd;
TimWoo 3:21c8adb97c8f 95 //setStatus(WAITING);
TimWoo 3:21c8adb97c8f 96 // _mapi = new MotiVAPI("http://demo.motiv.jvanbaarsen.com/demo/test");
TimWoo 3:21c8adb97c8f 97 displayStatus();
TimWoo 3:21c8adb97c8f 98 // devices.push_back(new <Device>Flower(1));
TimWoo 3:21c8adb97c8f 99 // devices.append(new Flower(2));
TimWoo 3:21c8adb97c8f 100 // devices.append(new Flower(3));
TimWoo 3:21c8adb97c8f 101
TimWoo 3:21c8adb97c8f 102 // tables.append(new Table(1));
TimWoo 3:21c8adb97c8f 103 // tables.append(new Table(2));
TimWoo 3:21c8adb97c8f 104 // tables.append(new Table(3));
TimWoo 3:21c8adb97c8f 105
TimWoo 3:21c8adb97c8f 106 //tables stores Tables
TimWoo 3:21c8adb97c8f 107 //Tables can be updated with information
TimWoo 3:21c8adb97c8f 108 //Tables can be asked for commands to send
TimWoo 3:21c8adb97c8f 109 //Tables will check changes between new info (this API update) and old info (previous API update)
TimWoo 3:21c8adb97c8f 110 //Tables can use the Flower interface to build commands
TimWoo 3:21c8adb97c8f 111
TimWoo 3:21c8adb97c8f 112
TimWoo 3:21c8adb97c8f 113 //Would like to have:
TimWoo 3:21c8adb97c8f 114 //Sending commands in different thread than receiving api update
TimWoo 3:21c8adb97c8f 115 //Commands then put into shared object commandQueue (FIFO)
TimWoo 3:21c8adb97c8f 116
TimWoo 3:21c8adb97c8f 117
TimWoo 3:21c8adb97c8f 118 // Test
TimWoo 3:21c8adb97c8f 119 Table table(1);
TimWoo 3:21c8adb97c8f 120 Table table2(2);
TimWoo 3:21c8adb97c8f 121
TimWoo 3:21c8adb97c8f 122 vector<MCommand> insertVector;
TimWoo 3:21c8adb97c8f 123 insertVector = table.update(1,0,0,0);
TimWoo 3:21c8adb97c8f 124 printf("Updated first table\r\n");
TimWoo 3:21c8adb97c8f 125 commandList.insert(commandList.begin(), insertVector.begin(), insertVector.end());
TimWoo 3:21c8adb97c8f 126 printCommandList();
TimWoo 3:21c8adb97c8f 127 insertVector = table2.update(2,0,0,0);
TimWoo 3:21c8adb97c8f 128 printf("Updated second table\r\n");
TimWoo 3:21c8adb97c8f 129 commandList.insert(commandList.begin(), insertVector.begin(), insertVector.end());
TimWoo 3:21c8adb97c8f 130 }
TimWoo 3:21c8adb97c8f 131
TimWoo 3:21c8adb97c8f 132 void Controller::printDesc(int c)
TimWoo 3:21c8adb97c8f 133 {
TimWoo 3:21c8adb97c8f 134 // string desc = flower->getCommandDesc(c);
TimWoo 3:21c8adb97c8f 135 // lcdWriteLine(2, desc);
TimWoo 3:21c8adb97c8f 136 }
TimWoo 3:21c8adb97c8f 137
TimWoo 3:21c8adb97c8f 138 Controller::cStatus Controller::getStatus()
TimWoo 3:21c8adb97c8f 139 {
TimWoo 3:21c8adb97c8f 140 return this->status;
TimWoo 3:21c8adb97c8f 141 }
TimWoo 3:21c8adb97c8f 142
TimWoo 3:21c8adb97c8f 143 string Controller::statusString()
TimWoo 3:21c8adb97c8f 144 {
TimWoo 3:21c8adb97c8f 145 switch(status) {
TimWoo 3:21c8adb97c8f 146 case READY:
TimWoo 3:21c8adb97c8f 147 return "ready";
TimWoo 3:21c8adb97c8f 148
TimWoo 3:21c8adb97c8f 149 case WAITING:
TimWoo 3:21c8adb97c8f 150 return "waiting";
TimWoo 3:21c8adb97c8f 151
TimWoo 3:21c8adb97c8f 152 case BUSY:
TimWoo 3:21c8adb97c8f 153 return "busy";
TimWoo 3:21c8adb97c8f 154
TimWoo 3:21c8adb97c8f 155 case ERROR:
TimWoo 3:21c8adb97c8f 156 return "error";
TimWoo 3:21c8adb97c8f 157
TimWoo 3:21c8adb97c8f 158 case INIT:
TimWoo 3:21c8adb97c8f 159 return "intializing";
TimWoo 3:21c8adb97c8f 160
TimWoo 3:21c8adb97c8f 161 default:
TimWoo 3:21c8adb97c8f 162 return "unknown";
TimWoo 3:21c8adb97c8f 163 }
TimWoo 3:21c8adb97c8f 164 }
TimWoo 3:21c8adb97c8f 165
TimWoo 3:21c8adb97c8f 166 void Controller::setStatus(cStatus status)
TimWoo 3:21c8adb97c8f 167 {
TimWoo 3:21c8adb97c8f 168 this->status = status;
TimWoo 3:21c8adb97c8f 169 displayStatus();
TimWoo 3:21c8adb97c8f 170 }
TimWoo 3:21c8adb97c8f 171
TimWoo 3:21c8adb97c8f 172 void Controller::displayStatus()
TimWoo 3:21c8adb97c8f 173 {
TimWoo 3:21c8adb97c8f 174 this->lcd->locate(0,0);
TimWoo 3:21c8adb97c8f 175 this->lcd->clearLine();
TimWoo 3:21c8adb97c8f 176 this->lcd->locate(0,0);
TimWoo 3:21c8adb97c8f 177 this->lcd->printf("Status: %s", statusString());
TimWoo 3:21c8adb97c8f 178 }
TimWoo 3:21c8adb97c8f 179
TimWoo 3:21c8adb97c8f 180
TimWoo 3:21c8adb97c8f 181 void Controller::lcdWriteLine(int row, string str)
TimWoo 3:21c8adb97c8f 182 {
TimWoo 3:21c8adb97c8f 183 this->lcd->locate(0,row);
TimWoo 3:21c8adb97c8f 184 this->lcd->clearLine();
TimWoo 3:21c8adb97c8f 185 this->lcd->locate(0,row);
TimWoo 3:21c8adb97c8f 186 this->lcd->printf("%s", str);
TimWoo 3:21c8adb97c8f 187 }
TimWoo 3:21c8adb97c8f 188
TimWoo 3:21c8adb97c8f 189 //void Controller::nextCommand()
TimWoo 3:21c8adb97c8f 190 //{
TimWoo 3:21c8adb97c8f 191 // std::vector<MCommand>::iterator it;
TimWoo 3:21c8adb97c8f 192 // it = commandList->begin();
TimWoo 3:21c8adb97c8f 193 // it = commandList->insert(it, commandList->back());
TimWoo 3:21c8adb97c8f 194 // it = commandList->begin();
TimWoo 3:21c8adb97c8f 195 // commandList->pop_back();
TimWoo 3:21c8adb97c8f 196 // it = commandList->begin();
TimWoo 3:21c8adb97c8f 197 // MCommand command = *it;
TimWoo 3:21c8adb97c8f 198 // printDesc(command->getCmd());
TimWoo 3:21c8adb97c8f 199 //}
TimWoo 3:21c8adb97c8f 200
TimWoo 3:21c8adb97c8f 201 void Controller::prevCommand()
TimWoo 3:21c8adb97c8f 202 {
TimWoo 3:21c8adb97c8f 203
TimWoo 3:21c8adb97c8f 204 }
TimWoo 3:21c8adb97c8f 205
TimWoo 3:21c8adb97c8f 206 void Controller::sendCommandDem()
TimWoo 3:21c8adb97c8f 207 {
TimWoo 3:21c8adb97c8f 208
TimWoo 3:21c8adb97c8f 209 }
TimWoo 3:21c8adb97c8f 210
TimWoo 3:21c8adb97c8f 211 void Controller::printCommandList()
TimWoo 3:21c8adb97c8f 212 {
TimWoo 3:21c8adb97c8f 213 printf("\r\nCommand list printing\r\n\r\n");
TimWoo 3:21c8adb97c8f 214 printf("The command list contains %d commands\r\n", commandList.size());
TimWoo 3:21c8adb97c8f 215 if(commandList.size()) {
TimWoo 3:21c8adb97c8f 216 for(std::vector<MCommand>::iterator it = commandList.begin(); it != commandList.end(); ++it) {
TimWoo 3:21c8adb97c8f 217 /* std::cout << *it; ... */
TimWoo 3:21c8adb97c8f 218 it->print();
TimWoo 3:21c8adb97c8f 219 }
TimWoo 3:21c8adb97c8f 220 }
TimWoo 3:21c8adb97c8f 221 }