#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SoftwareSerial.h>
#include <Hx711.h>
#include "SPI.h"
#include "MFRC522.h"
#include <Servo.h>
#define SS_PIN 10
#define RST_PIN 9
#define SP_PIN 8
#define lcdAddress 0x27
int servoPin1 = 6;
int servoPin2 = 7;
int angle = 0;
int hx711,charge;
byte key_flag=0;
Servo servo1, servo2;
MFRC522 rfid(SS_PIN, RST_PIN);
MFRC522::MIFARE_Key key;
SoftwareSerial BTSerial(2, 3);
LiquidCrystal_I2C lcd(0x27);
Hx711 scale(A1, A0);
void setup()
{
Serial.begin(9600);
BTSerial.begin(9600);
SPI.begin();
rfid.PCD_Init();
servo1.attach(servoPin1);
servo2.attach(servoPin2);
Serial.println("CLEARDATA");
Serial.println("LABEL,Time,ID,Weight,Charge");
lcd.begin(16, 2);
lcd.print("Weight= " + String(scale.getGram()) + " g ");
lcd.setCursor ( 0, 1 );
lcd.print ("charge= " + String(scale.getGram()) + " won");
delay(200);
}
void loop()
{
if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial())
return;
MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&
piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
Serial.println(F("Your tag is not of type MIFARE Classic."));
return;
}
String strID = "";
for (byte i = 0; i < 4; i++) {
strID +=
(rfid.uid.uidByte[i] < 0x10 ? "0" : "") +
String(rfid.uid.uidByte[i], HEX) +
(i!=3 ? ":" : "");
}
strID.toUpperCase();
Serial.print("Tap card key: ");
Serial.println(strID);
if(key_flag==0 && strID =="6B:A7:82:CB") // 카드 1
{
servo1.write(130);
key_flag=1;
}
if(key_flag==1 && strID =="6B:A7:82:CB") // 카드 1
{
servo1.write(0);
key_flag=0;
}
if(key_flag==0 && strID =="06:54:73:A1") // 카드2
{
servo2.write(130);
key_flag=1;
}
if(key_flag==1 && strID =="06:54:73:A1") // 카드 2
{
servo2.write(0);
key_flag=0;
}
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
hx711 = analogRead(A0); // 무게값 읽어옴
charge=hx711; // 무게값이 금액으로
Serial.print("DATA,TIME,"); // data time 출력
Serial.print(strID); // 아이디 출력
Serial.print(","); // ,
Serial.print(hx711); // 무게출력
Serial.print(","); // ,
Serial.println(charge); // 금액 출력
if (Serial.available()) // 블루투스 통신 시리얼모니터-> BT->스마트폰
{
BTSerial.write(Serial.read());
}
}