KKK

Dependencies:   mbed MFRC522 HX711 TextLCD

Committer:
Tezcorp
Date:
Sun Dec 16 19:41:07 2018 +0000
Revision:
0:26ea83732995
DDD

Who changed what in which revision?

UserRevisionLine numberNew 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 //------------------------------------------------------------------------------