a

Dependencies:   EthernetInterface HTTPClient MFRC522 MbedJSONValue TextLCD mbed-rtos mbed

Fork of HEINEKEN_FRDM_K64F by Matija Slovic

Committer:
mjovanov1
Date:
Sat Apr 08 18:56:57 2017 +0000
Revision:
4:29b3b82dec0a
Parent:
3:0b3943b9655d
1;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mslovic 0:27d98e126a4f 1 #include "mbed.h"
mslovic 0:27d98e126a4f 2 #include "MFRC522.h"
mslovic 0:27d98e126a4f 3 #include "TextLCD.h"
mslovic 0:27d98e126a4f 4 #include "EthernetInterface.h"
mslovic 1:91f852e8c07f 5 #include <string>
mslovic 1:91f852e8c07f 6 #include "MbedJSONValue.h"
mslovic 0:27d98e126a4f 7
mslovic 0:27d98e126a4f 8 #define MF_RESET PTD0
mslovic 0:27d98e126a4f 9
mslovic 2:c8618b0777d3 10 DigitalOut LedRed(LED2);
mslovic 2:c8618b0777d3 11 DigitalOut LedGreen(LED1);
mslovic 0:27d98e126a4f 12 Serial pc(USBTX, USBRX);
mslovic 0:27d98e126a4f 13 TextLCD lcd(PTC3, PTC2, PTA2, PTB23, PTA1, PTB9, TextLCD::LCD20x4); // rs, e, d4-d7
mslovic 0:27d98e126a4f 14 MFRC522 RfChip(PTD2, PTD3, PTD1, PTE25, PTD0); // mosi, miso, sclk, cs, reset
mslovic 0:27d98e126a4f 15 DigitalOut ventil(PTB18);
mslovic 2:c8618b0777d3 16 InterruptIn FLOW(PTE24);
mslovic 0:27d98e126a4f 17
mslovic 2:c8618b0777d3 18 int Count;
mslovic 2:c8618b0777d3 19 //float Calc_mL, Calc_L;
mslovic 2:c8618b0777d3 20 float VOL;
mslovic 0:27d98e126a4f 21
mslovic 0:27d98e126a4f 22 void rpm()
mslovic 0:27d98e126a4f 23 {
mslovic 0:27d98e126a4f 24 Count++;
mslovic 0:27d98e126a4f 25 }
mslovic 0:27d98e126a4f 26 void ScreenSTART()
mslovic 0:27d98e126a4f 27 {
mslovic 0:27d98e126a4f 28 lcd.cls();
mslovic 1:91f852e8c07f 29 lcd.printf(" HEINEKEN\n\n");
mslovic 1:91f852e8c07f 30 lcd.printf(" Set your bracelet\n");
mslovic 0:27d98e126a4f 31 lcd.printf(" against the reader");
mslovic 0:27d98e126a4f 32 }
mslovic 1:91f852e8c07f 33 void ScreenNATOCI(int left)
mslovic 0:27d98e126a4f 34 {
mslovic 0:27d98e126a4f 35 lcd.cls();
mslovic 2:c8618b0777d3 36 lcd.printf("Pour your beer!\n\n");
mslovic 2:c8618b0777d3 37 lcd.printf("Left %d beers.",left);
mslovic 0:27d98e126a4f 38 }
mslovic 0:27d98e126a4f 39 void ScreenNEMA()
mslovic 0:27d98e126a4f 40 {
mslovic 0:27d98e126a4f 41 lcd.cls();
mslovic 2:c8618b0777d3 42 lcd.printf("\n Sorry no more\n beer for you.");
mslovic 2:c8618b0777d3 43 wait(4);
mslovic 0:27d98e126a4f 44 ScreenSTART();
mslovic 0:27d98e126a4f 45 }
mslovic 0:27d98e126a4f 46 void ScreenTNX()
mslovic 0:27d98e126a4f 47 {
mslovic 0:27d98e126a4f 48 lcd.cls();
mslovic 2:c8618b0777d3 49 lcd.printf("\n Thank you\n for consumption!");
mslovic 2:c8618b0777d3 50 wait(4);
mslovic 0:27d98e126a4f 51 ScreenSTART();
mslovic 0:27d98e126a4f 52 }
mslovic 2:c8618b0777d3 53 void ScreenWrongID()
mslovic 0:27d98e126a4f 54 {
mslovic 0:27d98e126a4f 55 lcd.cls();
mslovic 2:c8618b0777d3 56 lcd.printf("\n You do not have\n the correct\n bracelet!");
mslovic 2:c8618b0777d3 57 wait(4);
mslovic 0:27d98e126a4f 58 ScreenSTART();
mslovic 0:27d98e126a4f 59 }
mslovic 0:27d98e126a4f 60
mslovic 0:27d98e126a4f 61 int main(void)
mslovic 0:27d98e126a4f 62 {
mslovic 2:c8618b0777d3 63 LedRed = 0;
mslovic 2:c8618b0777d3 64 LedGreen = 0;
mslovic 2:c8618b0777d3 65 ventil = 1;
mslovic 2:c8618b0777d3 66 Count = 0;
mslovic 0:27d98e126a4f 67
mslovic 2:c8618b0777d3 68 lcd.printf("Starting...\n\n");
mslovic 2:c8618b0777d3 69 pc.printf("\nStarting..\n");
mslovic 0:27d98e126a4f 70
mslovic 0:27d98e126a4f 71 EthernetInterface eth;
mslovic 0:27d98e126a4f 72 eth.init("10.10.0.2","255.255.255.0","10.10.0.1"); //Use DHCP
mslovic 0:27d98e126a4f 73 eth.connect();
mslovic 2:c8618b0777d3 74 //pc.printf("IP Address is %s\n\r", eth.getIPAddress());
mslovic 0:27d98e126a4f 75 TCPSocketConnection sock;
mslovic 1:91f852e8c07f 76
mslovic 0:27d98e126a4f 77 RfChip.PCD_Init();
mslovic 0:27d98e126a4f 78
mslovic 2:c8618b0777d3 79 lcd.printf("Ready");
mslovic 2:c8618b0777d3 80 //pc.printf("Ready");
mslovic 2:c8618b0777d3 81 LedRed = 1; wait(.4);
mslovic 2:c8618b0777d3 82 LedRed = 0; wait(.4);
mslovic 2:c8618b0777d3 83 LedRed = 1; wait(.4);
mslovic 2:c8618b0777d3 84 LedRed = 0; wait(.4);
mslovic 2:c8618b0777d3 85 LedRed = 1; wait(.4);
mslovic 2:c8618b0777d3 86
mslovic 0:27d98e126a4f 87 ScreenSTART();
mslovic 0:27d98e126a4f 88
mslovic 0:27d98e126a4f 89 while(1) {
mslovic 2:c8618b0777d3 90 VOL = 0;
mslovic 2:c8618b0777d3 91 LedRed = 1;
mslovic 0:27d98e126a4f 92 LedGreen = 0;
mslovic 0:27d98e126a4f 93 Count = 0;
mslovic 0:27d98e126a4f 94
mslovic 0:27d98e126a4f 95 if ( ! RfChip.PICC_IsNewCardPresent()) {
mslovic 0:27d98e126a4f 96 wait_ms(500);
mslovic 0:27d98e126a4f 97 continue;
mslovic 0:27d98e126a4f 98 }
mslovic 0:27d98e126a4f 99 if ( ! RfChip.PICC_ReadCardSerial()) {
mslovic 0:27d98e126a4f 100 wait_ms(500);
mslovic 0:27d98e126a4f 101 continue;
mslovic 0:27d98e126a4f 102 }
mslovic 0:27d98e126a4f 103 char cID[22];
mslovic 0:27d98e126a4f 104 for (int i = 0; i < RfChip.uid.size; i++) {
mslovic 0:27d98e126a4f 105 sprintf(cID+i*2, "%X02", RfChip.uid.uidByte[i]);
mslovic 0:27d98e126a4f 106 }
mslovic 0:27d98e126a4f 107
mslovic 0:27d98e126a4f 108 char http_cmd[1024];
mslovic 1:91f852e8c07f 109 sprintf(http_cmd,"POST /rest/tap/%s HTTP/1.0\n\n",cID);
mslovic 1:91f852e8c07f 110 //pc.printf("\n\r%s\n\r",http_cmd);
mslovic 1:91f852e8c07f 111
mslovic 0:27d98e126a4f 112 sock.connect("10.10.0.1", 8080);
mslovic 0:27d98e126a4f 113 sock.send_all(http_cmd, sizeof(http_cmd)-1);
mslovic 0:27d98e126a4f 114
mslovic 0:27d98e126a4f 115 char buffer[300];
mslovic 0:27d98e126a4f 116 int ret;
mslovic 0:27d98e126a4f 117 while (true) {
mslovic 0:27d98e126a4f 118 ret = sock.receive(buffer, sizeof(buffer)-1);
mslovic 0:27d98e126a4f 119 if (ret <= 0)
mslovic 0:27d98e126a4f 120 break;
mslovic 0:27d98e126a4f 121 buffer[ret] = '\0';
mslovic 1:91f852e8c07f 122 //pc.printf("\n\r%s\n\r", buffer);
mslovic 1:91f852e8c07f 123
mslovic 0:27d98e126a4f 124 }
mslovic 0:27d98e126a4f 125 sock.close();
mslovic 1:91f852e8c07f 126
mslovic 1:91f852e8c07f 127 string responseFULL(buffer);
mslovic 1:91f852e8c07f 128 int start = responseFULL.find("{",0);
mslovic 1:91f852e8c07f 129 int end = responseFULL.find("}",start);
mslovic 1:91f852e8c07f 130
mslovic 1:91f852e8c07f 131 string response = responseFULL.substr(start, end-start+1);
mslovic 1:91f852e8c07f 132 //pc.printf("%s",response);
mslovic 1:91f852e8c07f 133
mslovic 1:91f852e8c07f 134 MbedJSONValue responseJSON;
mslovic 1:91f852e8c07f 135 parse(responseJSON, response.c_str());
mslovic 1:91f852e8c07f 136
mslovic 2:c8618b0777d3 137 int tap = responseJSON["tap"].get<int>();
mslovic 1:91f852e8c07f 138 int left = responseJSON["left"].get<int>();
mslovic 1:91f852e8c07f 139
mslovic 2:c8618b0777d3 140 pc.printf("tap? %d \n\r",tap);
mslovic 2:c8618b0777d3 141 pc.printf("left beer %d \n\r",left);
mslovic 2:c8618b0777d3 142
mslovic 2:c8618b0777d3 143 //pc.printf("%s \n\r",responseFULL);
mslovic 1:91f852e8c07f 144
mslovic 2:c8618b0777d3 145 if(tap < 0) {
mslovic 2:c8618b0777d3 146 ScreenWrongID();
mslovic 2:c8618b0777d3 147 }
mslovic 2:c8618b0777d3 148 if(tap == 0) {
mslovic 2:c8618b0777d3 149 ventil = 1;
mslovic 2:c8618b0777d3 150 ScreenNEMA();
mslovic 2:c8618b0777d3 151 }
mslovic 2:c8618b0777d3 152 if(tap == 1) {
mslovic 1:91f852e8c07f 153 ventil = 0;
mslovic 2:c8618b0777d3 154 ScreenNATOCI(left);
mslovic 2:c8618b0777d3 155
mslovic 2:c8618b0777d3 156 while(ventil==0) {
mslovic 2:c8618b0777d3 157 LedGreen = 1;
mslovic 2:c8618b0777d3 158 LedRed = 0;
mslovic 2:c8618b0777d3 159 FLOW.rise(&rpm);
mslovic 3:0b3943b9655d 160 wait_ms(1500); // za 0,5 - 2000
mslovic 2:c8618b0777d3 161 FLOW.rise(NULL);
mslovic 2:c8618b0777d3 162
mslovic 2:c8618b0777d3 163 //Calc = (Count * 60) / 7.5; //flow rate in L/hour
mslovic 2:c8618b0777d3 164 //CalcMl = (Count * 8) / 3.6; //flow rate in mL/hour
mslovic 2:c8618b0777d3 165 //pc.printf ("Flow L/hour: %d\r\n",Calc);
mslovic 2:c8618b0777d3 166 //pc.printf ("Flow mL/s: %.2f\r\n",CalcMl);
mslovic 2:c8618b0777d3 167
mslovic 2:c8618b0777d3 168 VOL += Count;
mslovic 2:c8618b0777d3 169 //pc.printf("Sum = %.2f\n\r",sum);
mslovic 2:c8618b0777d3 170
mslovic 3:0b3943b9655d 171 if(VOL>1600) {
mslovic 2:c8618b0777d3 172 ventil = 1;
mslovic 2:c8618b0777d3 173 ScreenTNX();
mslovic 2:c8618b0777d3 174 }
mslovic 1:91f852e8c07f 175 }
mslovic 2:c8618b0777d3 176 }
mslovic 0:27d98e126a4f 177 }
mslovic 0:27d98e126a4f 178 }
mslovic 2:c8618b0777d3 179
mslovic 0:27d98e126a4f 180
mslovic 0:27d98e126a4f 181
mslovic 0:27d98e126a4f 182