#include <SPI.h>
#include <MFRC522.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
#define SS 10
#define RST 9
LiquidCrystal_I2C lcd(0x27, 20, 4);
MFRC522 scanner(SS,RST);
SoftwareSerial mySoftwareSerial(4,3); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
const uint8_t maximum=6;
uint8_t index;
int count=0;
String tag[6]={"9314b72d","f12fee1b","d27b920","83d2382d","9382c62d","939e3f2d"};
String goods[6]={"BISCUIT","JUICE","APPLE","CHOCOLATE","HALUA","FLOWER"};
String price[6]={"500/-","1000/-","2000/-","5000/-","3000/-","6000/-"};
void setup()
{
// ONLY FOR SIMULATION
pinMode(2, INPUT_PULLUP);
lcd.init();
lcd.backlight();
welcomeDisplay();
mySoftwareSerial.begin(9600);
Serial.begin(115200);
SPI.begin();
scanner.PCD_Init();
if (!myDFPlayer.begin(mySoftwareSerial)) {
Serial.println(F("Not initialized:"));
Serial.println(F("1. Check the DFPlayer Mini connections"));
Serial.println(F("2. Insert an SD card"));
//while (true); COMMENTED FOR SIMULATION
}
Serial.println();
Serial.println(F("DFPlayer Mini module initialized!"));
// Initial settings
myDFPlayer.volume(30); // Volume 5
myDFPlayer.play(11);
init_display();
}
void loop()
{
String tempTag=readTag();
if(tempTag!="error")
{
uint8_t tempIndex=analyseTag(tempTag);
if(tempIndex != 99)
{
goods_display(tempIndex);
}
}
//for simulation only
if(digitalRead(2)==LOW)
{
delay(500);
goods_display(count);
count++;
if(count>5)
{count=0;}
}
}
void init_display()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("SYSTEM RUNNING");
lcd.setCursor(0,1);
lcd.print("GOODS SCANNING");
}
String readTag()
{
if(!scanner.PICC_IsNewCardPresent())
{
Serial.println("no card present");
return "error";
}
if(!scanner.PICC_ReadCardSerial())
{
Serial.println("card not readable");
return "error";
}
//save data and return output
String myTag;
for (int i = 0; i < scanner.uid.size; i++)
{
myTag += String(scanner.uid.uidByte[i],HEX);
}
Serial.print("THE TAG DETECTED IS:");
Serial.println(myTag);
return myTag;
}
unsigned int analyseTag(String tagId)
{
for(uint8_t i=0;i<maximum;i++)
{
if(tagId==tag[i])
{
return i;
}
}
return 99;
}
void welcomeDisplay()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" BLIND SHOPPING ");
lcd.setCursor(0,1);
lcd.print(" ASSISTANT ");
lcd.setCursor(0,2);
lcd.print("INITIALIZING SYS");
lcd.setCursor(0,3);
lcd.print("PLEASE WAIT ....");
delay(3000);
}
void goods_display(uint8_t i)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("***DETECTION INFO***");
lcd.setCursor(0,1);
lcd.print("GOODS:");
lcd.setCursor(7,1);
lcd.print(goods[i]);
lcd.setCursor(0,2);
lcd.print("PRICE:");
lcd.setCursor(7,2);
lcd.print(price[i]);
lcd.setCursor(0,3);
lcd.print("******END INFO******");
//myDFPlayer.play(i); comment for simulation
}
nano:12
nano:11
nano:10
nano:9
nano:8
nano:7
nano:6
nano:5
nano:4
nano:3
nano:2
nano:GND.2
nano:RESET.2
nano:0
nano:1
nano:13
nano:3.3V
nano:AREF
nano:A0
nano:A1
nano:A2
nano:A3
nano:A4
nano:A5
nano:A6
nano:A7
nano:5V
nano:RESET
nano:GND.1
nano:VIN
nano:12.2
nano:5V.2
nano:13.2
nano:11.2
nano:RESET.3
nano:GND.3
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
bz1:1
bz1:2
chip2:VCC
chip2:RX
chip2:TX
chip2:DAC_R
chip2:DAC_I
chip2:SPK_1
chip2:GND
chip2:SPK_2
chip2:IO_1
chip2:GND
chip2:IO_2
chip2:ADKEY_1
chip2:ADKEY_2
chip2:USB+
chip2:USB-
chip2:BUSY
bz2:1
bz2:2
chip1:SS
chip1:SCK
chip1:MOSI
chip1:MISO
chip1:IRQ
chip1:GND
chip1:RST
chip1:VCC
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r