KKK
Dependencies: mbed MFRC522 HX711 TextLCD
main.cpp@0:26ea83732995, 2018-12-16 (annotated)
- Committer:
- Tezcorp
- Date:
- Sun Dec 16 19:41:07 2018 +0000
- Revision:
- 0:26ea83732995
DDD
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Tezcorp | 0:26ea83732995 | 1 | //--------------RFID--------------------------------- |
Tezcorp | 0:26ea83732995 | 2 | //RFID IRQ=pin5 -> Not used. Leave open / |
Tezcorp | 0:26ea83732995 | 3 | //RFID MISO=pin4 -> Nucleo SPI_MISO=PA_6=D12 / |
Tezcorp | 0:26ea83732995 | 4 | //RFID MOSI=pin3 -> Nucleo SPI_MOSI=PA_7=D11 / |
Tezcorp | 0:26ea83732995 | 5 | //RFID SCK=pin2 -> Nucleo SPI_SCK =PA_5=D13 / |
Tezcorp | 0:26ea83732995 | 6 | //RFID SDA=pin1 -> Nucleo SPI_CS =PB_6=D10 / |
Tezcorp | 0:26ea83732995 | 7 | //RFID RST=pin7 -> Nucleo =PA_9=D7 / |
Tezcorp | 0:26ea83732995 | 8 | //3.3V and Gnd to the respective pins / |
Tezcorp | 0:26ea83732995 | 9 | //--------------------------------------------------- |
Tezcorp | 0:26ea83732995 | 10 | |
Tezcorp | 0:26ea83732995 | 11 | |
Tezcorp | 0:26ea83732995 | 12 | #include "mbed.h" |
Tezcorp | 0:26ea83732995 | 13 | #include "MFRC522.h" |
Tezcorp | 0:26ea83732995 | 14 | #include "TextLCD.h" |
Tezcorp | 0:26ea83732995 | 15 | #include <string> |
Tezcorp | 0:26ea83732995 | 16 | #define MF_RESET D7 |
Tezcorp | 0:26ea83732995 | 17 | #define Device_Name_ADDR (0xEE) // Device You Wish to Use Address - using i2c Address |
Tezcorp | 0:26ea83732995 | 18 | #define WRITE (0x00) // i2c Write bit |
Tezcorp | 0:26ea83732995 | 19 | #define READ (0x01) // i2c Read bit |
Tezcorp | 0:26ea83732995 | 20 | #include "HX711.h" |
Tezcorp | 0:26ea83732995 | 21 | |
Tezcorp | 0:26ea83732995 | 22 | |
Tezcorp | 0:26ea83732995 | 23 | DigitalOut gpo(D0); |
Tezcorp | 0:26ea83732995 | 24 | HX711 scale(A0, A1); |
Tezcorp | 0:26ea83732995 | 25 | |
Tezcorp | 0:26ea83732995 | 26 | AnalogIn scaleRaw(A3); |
Tezcorp | 0:26ea83732995 | 27 | float calibration_factor = 1000; //-7050 worked for my 440lb max scale setup |
Tezcorp | 0:26ea83732995 | 28 | int averageSamples = 100; |
Tezcorp | 0:26ea83732995 | 29 | |
Tezcorp | 0:26ea83732995 | 30 | //-----------Test SW------------------------------- |
Tezcorp | 0:26ea83732995 | 31 | DigitalIn SW(USER_BUTTON); |
Tezcorp | 0:26ea83732995 | 32 | |
Tezcorp | 0:26ea83732995 | 33 | |
Tezcorp | 0:26ea83732995 | 34 | //--------------RFID--------------------------------- |
Tezcorp | 0:26ea83732995 | 35 | MFRC522 RfChip (D11, D12, D13, D10, D8); |
Tezcorp | 0:26ea83732995 | 36 | // I2C Communication |
Tezcorp | 0:26ea83732995 | 37 | I2C i2c_lcd(D14, D15); // SDA, SCL |
Tezcorp | 0:26ea83732995 | 38 | //--------------------------------------------------- |
Tezcorp | 0:26ea83732995 | 39 | |
Tezcorp | 0:26ea83732995 | 40 | |
Tezcorp | 0:26ea83732995 | 41 | //--------------LCD--------------------------------- |
Tezcorp | 0:26ea83732995 | 42 | //I2C Portexpander PCF8574 |
Tezcorp | 0:26ea83732995 | 43 | TextLCD_I2C lcd(&i2c_lcd, 0x4e, TextLCD::LCD20x4); // I2C bus, PCF8574 Slaveaddress, LCD Type ok |
Tezcorp | 0:26ea83732995 | 44 | short FF=0; |
Tezcorp | 0:26ea83732995 | 45 | char ucdata_write[2]; |
Tezcorp | 0:26ea83732995 | 46 | void I2CScan (); |
Tezcorp | 0:26ea83732995 | 47 | //-------------------------------------------------- |
Tezcorp | 0:26ea83732995 | 48 | |
Tezcorp | 0:26ea83732995 | 49 | |
Tezcorp | 0:26ea83732995 | 50 | //--------------PC--------------------------------- |
Tezcorp | 0:26ea83732995 | 51 | Serial pc(SERIAL_TX, SERIAL_RX); |
Tezcorp | 0:26ea83732995 | 52 | //------------------------------------------------- |
Tezcorp | 0:26ea83732995 | 53 | |
Tezcorp | 0:26ea83732995 | 54 | |
Tezcorp | 0:26ea83732995 | 55 | //--------------ESP32--------------------------------- |
Tezcorp | 0:26ea83732995 | 56 | Serial esp(PA_9,PA_10); // Serial for esp32 (tx, rx) |
Tezcorp | 0:26ea83732995 | 57 | //---------------------------------------------------- |
Tezcorp | 0:26ea83732995 | 58 | |
Tezcorp | 0:26ea83732995 | 59 | |
Tezcorp | 0:26ea83732995 | 60 | int main() |
Tezcorp | 0:26ea83732995 | 61 | { |
Tezcorp | 0:26ea83732995 | 62 | esp.baud(115200); //----------------------------------------------ESP Baud |
Tezcorp | 0:26ea83732995 | 63 | pc.baud(9600); //-----------------------------------------------PC Baud |
Tezcorp | 0:26ea83732995 | 64 | RfChip.PCD_Init(); //----------------------------------------------Function |
Tezcorp | 0:26ea83732995 | 65 | lcd.cls(); //------------------------------------------Clear screen |
Tezcorp | 0:26ea83732995 | 66 | float weight; |
Tezcorp | 0:26ea83732995 | 67 | int Card_Value; |
Tezcorp | 0:26ea83732995 | 68 | char Card_UID[100]; |
Tezcorp | 0:26ea83732995 | 69 | string UID; |
Tezcorp | 0:26ea83732995 | 70 | int count = 0; |
Tezcorp | 0:26ea83732995 | 71 | int count_step = 0; |
Tezcorp | 0:26ea83732995 | 72 | |
Tezcorp | 0:26ea83732995 | 73 | |
Tezcorp | 0:26ea83732995 | 74 | scale.setScale(0); |
Tezcorp | 0:26ea83732995 | 75 | scale.tare(); //Reset the scale to 0 |
Tezcorp | 0:26ea83732995 | 76 | |
Tezcorp | 0:26ea83732995 | 77 | long zero_factor = scale.averageValue(averageSamples); |
Tezcorp | 0:26ea83732995 | 78 | |
Tezcorp | 0:26ea83732995 | 79 | pc.printf("starting...\n"); |
Tezcorp | 0:26ea83732995 | 80 | |
Tezcorp | 0:26ea83732995 | 81 | |
Tezcorp | 0:26ea83732995 | 82 | while (1) |
Tezcorp | 0:26ea83732995 | 83 | { |
Tezcorp | 0:26ea83732995 | 84 | // ---------------------------------------------------Look for new cards |
Tezcorp | 0:26ea83732995 | 85 | if ( ! RfChip.PICC_IsNewCardPresent()) |
Tezcorp | 0:26ea83732995 | 86 | { |
Tezcorp | 0:26ea83732995 | 87 | wait_ms(500); |
Tezcorp | 0:26ea83732995 | 88 | continue; |
Tezcorp | 0:26ea83732995 | 89 | } |
Tezcorp | 0:26ea83732995 | 90 | |
Tezcorp | 0:26ea83732995 | 91 | // ------------------------Select one of the cards |
Tezcorp | 0:26ea83732995 | 92 | if ( ! RfChip.PICC_ReadCardSerial()) |
Tezcorp | 0:26ea83732995 | 93 | { |
Tezcorp | 0:26ea83732995 | 94 | wait_ms(500); |
Tezcorp | 0:26ea83732995 | 95 | continue; |
Tezcorp | 0:26ea83732995 | 96 | } |
Tezcorp | 0:26ea83732995 | 97 | // --------------------------------------------------------Find Card UID |
Tezcorp | 0:26ea83732995 | 98 | pc.printf("Card UID: "); |
Tezcorp | 0:26ea83732995 | 99 | for (uint8_t i = 0; i < RfChip.uid.size; i++) |
Tezcorp | 0:26ea83732995 | 100 | { |
Tezcorp | 0:26ea83732995 | 101 | pc.printf(" %X", RfChip.uid.uidByte[i]); |
Tezcorp | 0:26ea83732995 | 102 | Card_Value += RfChip.uid.uidByte[i]; // ---- Add all int of Card UID |
Tezcorp | 0:26ea83732995 | 103 | sprintf (Card_UID,"%X ",RfChip.uid.uidByte[i]); |
Tezcorp | 0:26ea83732995 | 104 | UID += Card_UID; |
Tezcorp | 0:26ea83732995 | 105 | } |
Tezcorp | 0:26ea83732995 | 106 | |
Tezcorp | 0:26ea83732995 | 107 | pc.printf("\n"); |
Tezcorp | 0:26ea83732995 | 108 | pc.printf("%d\n",Card_Value); |
Tezcorp | 0:26ea83732995 | 109 | //-------------------------------Show Name on LCD by sum of int(CardUID) |
Tezcorp | 0:26ea83732995 | 110 | if ( Card_Value == 644 ) |
Tezcorp | 0:26ea83732995 | 111 | { |
Tezcorp | 0:26ea83732995 | 112 | scale.setScale(calibration_factor); //Adjust to this calibration factor |
Tezcorp | 0:26ea83732995 | 113 | float weight = scale.getGram(); |
Tezcorp | 0:26ea83732995 | 114 | while ( count <= 5 ) |
Tezcorp | 0:26ea83732995 | 115 | { |
Tezcorp | 0:26ea83732995 | 116 | pc.printf("%f\n\n",weight); |
Tezcorp | 0:26ea83732995 | 117 | pc.printf("."); |
Tezcorp | 0:26ea83732995 | 118 | if ( weight > 3 |
Tezcorp | 0:26ea83732995 | 119 | ) |
Tezcorp | 0:26ea83732995 | 120 | { |
Tezcorp | 0:26ea83732995 | 121 | lcd.cls(); |
Tezcorp | 0:26ea83732995 | 122 | lcd.setBacklight(TextLCD::LightOff); |
Tezcorp | 0:26ea83732995 | 123 | pc.printf("\nSomeone Go Inside Car"); |
Tezcorp | 0:26ea83732995 | 124 | pc.printf("\nCollecting weight\n"); |
Tezcorp | 0:26ea83732995 | 125 | //weight =750.73; |
Tezcorp | 0:26ea83732995 | 126 | esp.printf("%s,%f",UID,weight); |
Tezcorp | 0:26ea83732995 | 127 | pc.printf("%s,%f",UID,weight); |
Tezcorp | 0:26ea83732995 | 128 | count = 5; |
Tezcorp | 0:26ea83732995 | 129 | count_step = 1; |
Tezcorp | 0:26ea83732995 | 130 | } |
Tezcorp | 0:26ea83732995 | 131 | else if ( count <= 3) |
Tezcorp | 0:26ea83732995 | 132 | { |
Tezcorp | 0:26ea83732995 | 133 | lcd.cls(); |
Tezcorp | 0:26ea83732995 | 134 | pc.printf("Name > Krittapong\n"); |
Tezcorp | 0:26ea83732995 | 135 | pc.printf("Surname > Pohdoy\n"); |
Tezcorp | 0:26ea83732995 | 136 | lcd.setBacklight(TextLCD::LightOn); |
Tezcorp | 0:26ea83732995 | 137 | lcd.setCursor(TextLCD::CurOff_BlkOn); |
Tezcorp | 0:26ea83732995 | 138 | lcd.printf("Name >Krittapong\n"); |
Tezcorp | 0:26ea83732995 | 139 | lcd.printf("Surname >Pohdoy\n"); |
Tezcorp | 0:26ea83732995 | 140 | //lcd.printf(" Welcome :)\n"); |
Tezcorp | 0:26ea83732995 | 141 | pc.printf("waiting for step"); |
Tezcorp | 0:26ea83732995 | 142 | |
Tezcorp | 0:26ea83732995 | 143 | } |
Tezcorp | 0:26ea83732995 | 144 | else if (count == 4) |
Tezcorp | 0:26ea83732995 | 145 | { |
Tezcorp | 0:26ea83732995 | 146 | lcd.cls(); |
Tezcorp | 0:26ea83732995 | 147 | lcd.printf("No one enter\n"); |
Tezcorp | 0:26ea83732995 | 148 | lcd.setBacklight(TextLCD::LightOff); |
Tezcorp | 0:26ea83732995 | 149 | lcd.cls(); |
Tezcorp | 0:26ea83732995 | 150 | } |
Tezcorp | 0:26ea83732995 | 151 | count++; |
Tezcorp | 0:26ea83732995 | 152 | wait(1); |
Tezcorp | 0:26ea83732995 | 153 | } |
Tezcorp | 0:26ea83732995 | 154 | if ( count >= 5 && count_step == 0 ) |
Tezcorp | 0:26ea83732995 | 155 | { |
Tezcorp | 0:26ea83732995 | 156 | pc.printf("\n\n no one go inside \n\n"); |
Tezcorp | 0:26ea83732995 | 157 | } |
Tezcorp | 0:26ea83732995 | 158 | } |
Tezcorp | 0:26ea83732995 | 159 | |
Tezcorp | 0:26ea83732995 | 160 | else if ( Card_Value == 475 ) |
Tezcorp | 0:26ea83732995 | 161 | { |
Tezcorp | 0:26ea83732995 | 162 | scale.setScale(calibration_factor); //Adjust to this calibration factor |
Tezcorp | 0:26ea83732995 | 163 | float weight = scale.getGram(); |
Tezcorp | 0:26ea83732995 | 164 | while ( count <= 5 ) |
Tezcorp | 0:26ea83732995 | 165 | { |
Tezcorp | 0:26ea83732995 | 166 | pc.printf("."); |
Tezcorp | 0:26ea83732995 | 167 | if ( weight > 100 ) |
Tezcorp | 0:26ea83732995 | 168 | { |
Tezcorp | 0:26ea83732995 | 169 | lcd.cls(); |
Tezcorp | 0:26ea83732995 | 170 | lcd.setBacklight(TextLCD::LightOff); |
Tezcorp | 0:26ea83732995 | 171 | pc.printf("\nSomeone Go Inside Car"); |
Tezcorp | 0:26ea83732995 | 172 | pc.printf("\nCollecting weight\n"); |
Tezcorp | 0:26ea83732995 | 173 | //weight =930.35; |
Tezcorp | 0:26ea83732995 | 174 | esp.printf("%s,%f",UID,weight); |
Tezcorp | 0:26ea83732995 | 175 | pc.printf("%s,%f",UID,weight); |
Tezcorp | 0:26ea83732995 | 176 | count = 5; |
Tezcorp | 0:26ea83732995 | 177 | count_step = 1; |
Tezcorp | 0:26ea83732995 | 178 | } |
Tezcorp | 0:26ea83732995 | 179 | else if ( count <= 3) |
Tezcorp | 0:26ea83732995 | 180 | { |
Tezcorp | 0:26ea83732995 | 181 | lcd.cls(); |
Tezcorp | 0:26ea83732995 | 182 | pc.printf("Name >Natchapat\n"); |
Tezcorp | 0:26ea83732995 | 183 | pc.printf("Surname>Mongkolluck\n"); |
Tezcorp | 0:26ea83732995 | 184 | lcd.setBacklight(TextLCD::LightOn); |
Tezcorp | 0:26ea83732995 | 185 | lcd.setCursor(TextLCD::CurOff_BlkOn); |
Tezcorp | 0:26ea83732995 | 186 | lcd.printf("Name >Natchapat\n"); |
Tezcorp | 0:26ea83732995 | 187 | lcd.printf("Surname>Mongkolluck\n"); |
Tezcorp | 0:26ea83732995 | 188 | //lcd.printf(" Welcome :)\n"); |
Tezcorp | 0:26ea83732995 | 189 | pc.printf("waiting for step"); |
Tezcorp | 0:26ea83732995 | 190 | |
Tezcorp | 0:26ea83732995 | 191 | } |
Tezcorp | 0:26ea83732995 | 192 | else if (count == 4) |
Tezcorp | 0:26ea83732995 | 193 | { |
Tezcorp | 0:26ea83732995 | 194 | lcd.cls(); |
Tezcorp | 0:26ea83732995 | 195 | lcd.printf("No one enter\n"); |
Tezcorp | 0:26ea83732995 | 196 | lcd.setBacklight(TextLCD::LightOff); |
Tezcorp | 0:26ea83732995 | 197 | lcd.cls(); |
Tezcorp | 0:26ea83732995 | 198 | } |
Tezcorp | 0:26ea83732995 | 199 | count++; |
Tezcorp | 0:26ea83732995 | 200 | wait(1); |
Tezcorp | 0:26ea83732995 | 201 | } |
Tezcorp | 0:26ea83732995 | 202 | if ( count >= 5 && count_step == 0 ) |
Tezcorp | 0:26ea83732995 | 203 | { |
Tezcorp | 0:26ea83732995 | 204 | pc.printf("\n\n no one go inside \n\n"); |
Tezcorp | 0:26ea83732995 | 205 | } |
Tezcorp | 0:26ea83732995 | 206 | } |
Tezcorp | 0:26ea83732995 | 207 | //-----------------------------------------------------------Reset Value |
Tezcorp | 0:26ea83732995 | 208 | UID = ""; |
Tezcorp | 0:26ea83732995 | 209 | Card_Value = 0; |
Tezcorp | 0:26ea83732995 | 210 | wait_ms(1000); |
Tezcorp | 0:26ea83732995 | 211 | count = 0; |
Tezcorp | 0:26ea83732995 | 212 | //weight = 0; |
Tezcorp | 0:26ea83732995 | 213 | //---------------------------------------------------------------------- |
Tezcorp | 0:26ea83732995 | 214 | |
Tezcorp | 0:26ea83732995 | 215 | }// close while (true) |
Tezcorp | 0:26ea83732995 | 216 | }// close main |
Tezcorp | 0:26ea83732995 | 217 | //--------------Void------------------------------------------------------------------------------------------------------------ |
Tezcorp | 0:26ea83732995 | 218 | |
Tezcorp | 0:26ea83732995 | 219 | //---------------------------------------------------------------------------LCD |
Tezcorp | 0:26ea83732995 | 220 | void I2CScan() |
Tezcorp | 0:26ea83732995 | 221 | { |
Tezcorp | 0:26ea83732995 | 222 | unsigned int uibaudrate=9600; |
Tezcorp | 0:26ea83732995 | 223 | pc.baud(uibaudrate); |
Tezcorp | 0:26ea83732995 | 224 | |
Tezcorp | 0:26ea83732995 | 225 | unsigned int uifrequency=400000; //400KHz for i2c Max |
Tezcorp | 0:26ea83732995 | 226 | i2c_lcd.frequency (uifrequency); |
Tezcorp | 0:26ea83732995 | 227 | |
Tezcorp | 0:26ea83732995 | 228 | pc.printf("\n\rHello World "); |
Tezcorp | 0:26ea83732995 | 229 | pc.printf("at %u BAUD and %uKHz i2c Frequency\n\r",uibaudrate,uifrequency/1000); |
Tezcorp | 0:26ea83732995 | 230 | pc.printf("Using mbed.org Martin\n\r"); |
Tezcorp | 0:26ea83732995 | 231 | |
Tezcorp | 0:26ea83732995 | 232 | |
Tezcorp | 0:26ea83732995 | 233 | ucdata_write[0]=0;ucdata_write[1]=0; |
Tezcorp | 0:26ea83732995 | 234 | |
Tezcorp | 0:26ea83732995 | 235 | for (int Device_Adress=0;Device_Adress<=0xFE;Device_Adress+=2)//Stepping in 2 Because Read/Write use LSB |
Tezcorp | 0:26ea83732995 | 236 | { |
Tezcorp | 0:26ea83732995 | 237 | if (!i2c_lcd.write((Device_Adress|WRITE), ucdata_write, 1, 0))// Check for ACK from i2c Device NB I am 'ORing' the Write Bit |
Tezcorp | 0:26ea83732995 | 238 | { |
Tezcorp | 0:26ea83732995 | 239 | pc.printf("ACK from the Device at Address %#4x\n\r",Device_Adress); |
Tezcorp | 0:26ea83732995 | 240 | FF=FF+1; |
Tezcorp | 0:26ea83732995 | 241 | wait(2); |
Tezcorp | 0:26ea83732995 | 242 | } |
Tezcorp | 0:26ea83732995 | 243 | else |
Tezcorp | 0:26ea83732995 | 244 | { |
Tezcorp | 0:26ea83732995 | 245 | //Left the following in for development/Future coding |
Tezcorp | 0:26ea83732995 | 246 | //pc.printf("\n\rCannot get an ACK from the Device check connections!\n\r"); |
Tezcorp | 0:26ea83732995 | 247 | //lcd.printf("No ACK from\nDevice!"); |
Tezcorp | 0:26ea83732995 | 248 | } |
Tezcorp | 0:26ea83732995 | 249 | } |
Tezcorp | 0:26ea83732995 | 250 | pc.printf("\n\r %d Devices have been detected!\n\r",FF); |
Tezcorp | 0:26ea83732995 | 251 | pc.printf("\n\r"); |
Tezcorp | 0:26ea83732995 | 252 | } |
Tezcorp | 0:26ea83732995 | 253 | //------------------------------------------------------------------------------ |