#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// #if defined(ESP32)
#include <WiFi.h>
#include <FirebaseESP32.h>
// #elif defined(ESP8266)
// #include <ESP8266WiFi.h>
// #include <FirebaseESP8266.h>
// #endif
#include <addons/TokenHelper.h>
#include <addons/RTDBHelper.h>
#define WIFI_SSID "BezeqMosleh7"
#define WIFI_PASSWORD "328109046"
#define API_KEY "zopHjs3jylPR6mIvN6oryKyDYp7ENkyYDIVLUAdW"
#define DATABASE_URL "https://electronicsprojectapp-ab6a1-default-rtdb.firebaseio.com/" //<databaseName>.firebaseio.com or <databaseName>.<region>.firebasedatabase.app
#define LEDs 13
#define removeButton 12
#define editButton 14
#define addButton 15
String scannedBarcode = "101";
String path = "/Fridges/A1B4/"+scannedBarcode;
bool removeBN = false;
bool editBN = false;
bool addBN = false;
FirebaseData fbdo;
FirebaseAuth auth;
FirebaseConfig config;
LiquidCrystal_I2C lcd(0x27,16,2);
byte Check[] = {
B00000,
B00001,
B00011,
B10110,
B11100,
B01000,
B00000,
B00000
};
byte Increse[] = {
B00000,
B00000,
B00100,
B00100,
B11111,
B00100,
B00100,
B00000
};
byte Decrease[] = {
B00000,
B00000,
B00000,
B00000,
B11111,
B00000,
B00000,
B00000
};
void setup() {
pinMode(LEDs,OUTPUT);
pinMode(removeButton,INPUT);
pinMode(editButton,INPUT);
pinMode(addButton,INPUT);
Serial.begin(9600);
lcd.init();
lcd.begin(16, 2);
lcd.backlight();
lcd.createChar(0,Decrease);
lcd.createChar(1,Check);
lcd.createChar(2,Increse); WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to Wi-Fi");
while (WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
delay(300);
}
Serial.println();
Serial.print("Connected with IP: ");
Serial.println(WiFi.localIP());
Serial.println();
Serial.printf("Firebase Client v%s\n\n", FIREBASE_CLIENT_VERSION);
config.api_key = API_KEY;
config.database_url = DATABASE_URL;
Firebase.begin(DATABASE_URL, API_KEY);
Firebase.setDoubleDigits(5);
}
void loop() {
lcd.setCursor(0,0);
lcd.print("Alii");
while (scannedBarcode=="" && removeBN == false){
lockFridge();
}
if (removeBN || scannedBarcode != "")
openFridge();
delay(50);
}
void lockFridge(){
lcd.setCursor(0,0);
lcd.print("Scan a food item");
digitalWrite(LEDs,LOW);
removeBN = digitalRead(removeButton);
// read barcode here :
path = "/Fridges/A1B4/"+scannedBarcode;
}
void openFridge(){
digitalWrite(LEDs,HIGH);
while (addBN == false && editBN == false && removeBN == false){
addBN = digitalRead(addButton);
editBN = digitalRead(editButton);
removeBN = digitalRead(removeButton);
}
lcd.setCursor(0,0);
if (addBN){
Firebase.getInt(fbdo,path+"/currentAmount");
int x = fbdo.intData();
if (Firebase.ready())
{
Firebase.setInt(fbdo, path+"/currentAmount", x+1);
Firebase.setBool(fbdo, path+"/show", true);
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Food Item Added !");
}
if (removeBN){
Firebase.getInt(fbdo,path+"/currentAmount");
int x = fbdo.intData();
if (Firebase.ready())
{
Firebase.setInt(fbdo, path+"/currentAmount", x-1);
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Food Item Removed !");
}
if (editBN){
lcd.clear();
lcd.setCursor(3, 1);
lcd.write((byte)0);
lcd.setCursor(8, 1);
lcd.write((byte)1);
lcd.setCursor(13, 1);
lcd.write((byte)2);
Firebase.getInt(fbdo,path+"/minAmount");
int minV =fbdo.intData();
Serial.println(minV);
lcd.setCursor(0,0);
lcd.print("Minimum = "+(String)minV);
while (digitalRead(editButton) == false){
if (digitalRead(addButton))
minV++;
if (digitalRead(removeButton) && minV -1 >=0)
minV--;
if (minV >=0 && minV <=9){
lcd.setCursor(11,0);
lcd.print(" ");
}
lcd.setCursor(0,0);
lcd.print("Minimum = "+(String)minV);
}
if (Firebase.ready())
{
Firebase.setInt(fbdo, path+"/minAmount", minV);
}
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Scan it Back !");
// scan & update:
// reset the values for a new food item:
addBN = false;
removeBN = false;
editBN = false;
scannedBarcode="101";
}