a
Dependencies: EthernetInterface HTTPClient MFRC522 MbedJSONValue TextLCD mbed-rtos mbed
Fork of HEINEKEN_FRDM_K64F by
main.cpp@4:29b3b82dec0a, 2017-04-08 (annotated)
- Committer:
- mjovanov1
- Date:
- Sat Apr 08 18:56:57 2017 +0000
- Revision:
- 4:29b3b82dec0a
- Parent:
- 3:0b3943b9655d
1;
Who changed what in which revision?
User | Revision | Line number | New 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 |