Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define Rui
- #define solenoidPin 3
- #define buzzer 14
- #define SS_PIN 10
- #define RST_PIN 9
- #include <EEPROM.h>
- #include <Wire.h>
- #include <LiquidCrystal_I2C.h>
- LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Inicializa o display no endereco 0x27
- #include <SPI.h>
- #include <MFRC522.h>
- MFRC522 rfid(SS_PIN, RST_PIN);
- MFRC522::MIFARE_Key key;
- MFRC522::StatusCode status;
- byte block;
- byte buffer1[18];
- byte len;
- byte nuidPICC[4];
- int ledState = LOW;
- unsigned long uidCliente = 0;
- long saldo = 0;
- long meuSaldo = 0;
- bool creditado = false;
- //-----------------------------------------------------------------------------
- void setup()
- {
- Serial.begin(115200);
- pinMode(solenoidPin, OUTPUT);
- pinMode(buzzer, OUTPUT);
- digitalWrite(solenoidPin, LOW);
- SPI.begin();
- rfid.PCD_Init();
- lcd.begin (16, 2);
- lcd.setCursor(0, 0);
- lcd.setBacklight(HIGH);
- lcd.print("INICIALIZANDO");
- lcd.setCursor(0, 1);
- lcd.print("O SISTEMA");
- delay(200);
- bipe(1, 20);
- }
- //-----------------------------------------------------------------------------
- void loop()
- {
- if (leCartao() == 0)
- return;
- bipe(1, 20);
- Serial.println(" Digite o Valor" );
- while (creditado == false)
- {
- if (Serial.available() > 0)
- {
- saldo = Serial.parseInt();
- fimDeOperacao();
- }
- }
- }
- //--------------------------------------------------------------------------------------
- void fimDeOperacao() // GRAVAR SALDO
- {
- digitalWrite(solenoidPin, LOW); // FECHA SOLENOIDE
- for (int i = 0; i < 4; i++) // PISCA SALDO
- {
- lcd.setCursor(0, 1);
- lcd.print(" ");
- delay(200);
- lcd.setCursor(0, 1);
- lcd.print("SALDO: R$ ");
- lcd.print((float)saldo / 100, 2);
- delay(200);
- }
- meuSaldo = (long)(saldo); //(long)(35.27 * 100); // DEBUG
- for (int i = 0; i < 4; i++)
- {
- buffer1[i] = (buffer1[i] << 8) + (meuSaldo & 0xFF);
- meuSaldo = meuSaldo >> 8;
- }
- bipe(3, 20);
- if (saldo < 1) // 1 centavo
- return;
- unsigned long uidTroco = 0; // VERIFICA SE A UID DA TAG QUE RECEBE O TROCO É A MESMA QUE SE SERVIU AGORA.
- for (byte i = 0; i < 4; i++)
- {
- nuidPICC[i] = rfid.uid.uidByte[i];
- uidTroco = uidTroco << 8;
- uidTroco = uidTroco + (long)nuidPICC[i];
- }
- // Serial.print("uidCliente: ");
- // Serial.println(uidCliente, HEX);
- // Serial.print("uidTroco: ");
- // Serial.println(uidTroco, HEX);
- // if (uidCliente != uidTroco)
- // {
- // lcd.clear();
- // lcd.print("CARTAO DIFERENTE");
- // lcd.setCursor(0, 1);
- // lcd.print("TROCO ARMAZENADO");
- // delay(2000);
- // rfid.PICC_HaltA();
- // rfid.PCD_StopCrypto1();
- // return;
- // } // FIM VERIFICA SE A UID DA TAG QUE RECEBE O TROCO É A MESMA QUE SE SERVIU AGORA.
- block = 4;
- Serial.println(F("Authenticating using key A..."));
- status = rfid.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(rfid.uid));
- if (status != MFRC522::STATUS_OK)
- {
- Serial.print(F("PCD_Authenticate() failed: "));
- Serial.println(rfid.GetStatusCodeName(status));
- rfid.PICC_HaltA(); // Halt PICC
- rfid.PCD_StopCrypto1(); // Stop encryption on PCD
- return;
- }
- #ifdef Rui
- Serial.print ("Rui 2");
- //status = rfid.MIFARE_Write(block, buffer1, 16); // <<<------------------------------------------------
- creditado = true;
- #else
- status = rfid.MIFARE_Write(block, buffer1, 16); // <<<------------------------------------------------
- creditado = true;
- #endif
- if (status != MFRC522::STATUS_OK)
- {
- Serial.print(F("MIFARE_Write() failed: "));
- Serial.println(rfid.GetStatusCodeName(status));
- return;
- }
- else
- {
- Serial.println(F("MIFARE_Write() success: "));
- }
- rfid.PICC_HaltA(); // Halt PICC
- rfid.PCD_StopCrypto1(); // Stop encryption on PCD
- saldo = 0;
- lcd.setCursor(0, 0);
- lcd.print ("MUITO OBRIGADO ");
- lcd.setCursor(0, 1);
- lcd.print ("SISTEMA TAPHERR ");
- bipe(2, 100);
- delay(3000);
- lcd.clear();
- }
- //------------------------------------------------------------------------
- byte leCartao()
- {
- creditado = false;
- Serial.println("Aproxime o cartão");
- uidCliente = -1;
- while ((!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()))
- {
- lcd.setCursor(0, 0);
- lcd.print("SISTEMA TAPHERR ");
- lcd.setCursor(0, 1);
- lcd.print("APROXIME CARTAO ");
- if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial())
- {
- break;
- }
- }
- MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
- if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI && // CARTÃO É DO TIPO CORRETO?
- piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
- piccType != MFRC522::PICC_TYPE_MIFARE_4K)
- return 0; // CARTÃO NÃO É DO TIPO CORRETO
- for (byte i = 0; i < 4; i++) // GRAVA A UID E NA EEPROM
- {
- nuidPICC[i] = rfid.uid.uidByte[i];
- uidCliente = uidCliente << 8;
- uidCliente = uidCliente + (long)nuidPICC[i];
- }
- for (byte i = 0; i < 6; i++)
- {
- key.keyByte[i] = 0xFF;
- }
- block = 4;
- len = 18;
- status = rfid.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 4, &key, &(rfid.uid)); //line 834 of MFRC522.cpp file
- if (status != MFRC522::STATUS_OK)
- return;
- status = rfid.MIFARE_Read(block, buffer1, &len);
- if (status != MFRC522::STATUS_OK)
- return;
- Serial.print("UID: ");
- Serial.println(uidCliente, HEX);
- return 1;
- }
- //------------------------------------------------------------------------
- void bipe(byte bipes, word _delay)
- {
- for (byte i = 1; i < bipes + 1; i++)
- {
- digitalWrite(buzzer, HIGH);
- delay(_delay);
- digitalWrite(buzzer, LOW);
- delay(_delay);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement