#include <Servo.h>
#include <EEPROM.h>
#include <LiquidCrystal_I2C.h>
// LCD ekran bilgileri
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo myservo;
#define ldr A0
#define pil A6
int ldr_oku;
int lldr = 0;
int adim = 106;
float para = 0;
// Pil değişkenleri
int min_deger = 988;
float yuzde = 0;
float deger = 0;
int gerilim = 0;
unsigned long simdiki_zaman = 0;
unsigned long onceki_zaman = 0;
int aralik = 32000;
// Pil Karakterleri
byte pil_yuz[8] = {
B01110,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111
};
byte pil_yetmisbes[8] = {
B01110,
B11011,
B10001,
B11111,
B11111,
B11111,
B11111,
B11111
};
byte pil_elli[8] = {
B01110,
B11011,
B10001,
B10001,
B11111,
B11111,
B11111,
B11111
};
byte pil_yirmibes[8] = {
B01110,
B11011,
B10001,
B10001,
B10001,
B11111,
B11111,
B11111
};
byte pil_on[8] = {
B01110,
B11011,
B10001,
B10001,
B10001,
B10001,
B11111,
B11111
};
// Kumbara değişkenleri
float toplam = 0;
float veritipi;
void setup()
{
Serial.begin(115200);
myservo.attach(12);
pinMode(ldr, INPUT);
myservo.write(106);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Kumbara V.1");
lcd.setCursor(0, 1);
float toplam = EEPROM.get(0, veritipi);
SatirTemizle(1);
lcd.setCursor(0, 1);
lcd.print("Toplam: ");
String mst = String(toplam);
String msst = "TL";
mst.concat(msst);
lcd.setCursor(8, 1);
lcd.print(mst);
}
void loop()
{
lldr = analogRead(ldr);
ldr_oku = map(lldr, 0, 800, 0, 1);
if (ldr_oku == 0) {
myservo.write(adim);
adim++;
delay(30);
lldr = analogRead(ldr);
ldr_oku = map(lldr, 0, 800, 0, 1);
if ((ldr_oku == 1) && (adim >= 146)) {
para = 1;
Hesapla(para);
adim = 106;
myservo.write(adim);
}else if ((ldr_oku == 1) && (adim >= 137)) {
para = 0.50;
Hesapla(para);
adim = 106;
myservo.write(adim);
}else if ((ldr_oku == 1) && (adim >= 126)) {
para = 0.25;
Hesapla(para);
adim = 106;
myservo.write(adim);
}else if ((ldr_oku == 1) && (adim >= 119)) {
para = 0.10;
Hesapla(para);
adim = 106;
myservo.write(adim);
}else if ((ldr_oku == 1) && (adim >= 115)) {
para = 0.05;
Hesapla(para);
adim = 106;
myservo.write(adim);
}
} else {
myservo.write(106);
}
// Pil Ölçümü
simdiki_zaman = millis();
if(onceki_zaman >= 4294967295) onceki_zaman = 0;
if (simdiki_zaman - onceki_zaman >= aralik) {
onceki_zaman = simdiki_zaman;
gerilim = analogRead(pil);
Serial.print("Analog Read: ");
Serial.println(gerilim);
if (gerilim >= 1022)
gerilim = 1022;
if (gerilim <= 988)
gerilim = 988;
yuzde = gerilim - min_deger;
//Serial.print("Yüzde: ");
//Serial.println(yuzde);
deger = (100.00 / 34.00) * yuzde;
//Serial.print("Değer: ");
//Serial.println(deger);
if (deger >= 90.00)
{
lcd.createChar(1, pil_yuz);
lcd.setCursor(15, 1);
lcd.write(1);
} else if (deger >= 75.00)
{
lcd.createChar(1, pil_yetmisbes);
lcd.setCursor(15, 1);
lcd.write(1);
} else if (deger >= 50.00)
{
lcd.createChar(1, pil_elli);
lcd.setCursor(15, 1);
lcd.write(1);
} else if (deger >= 25.00)
{
lcd.createChar(1, pil_yirmibes);
lcd.setCursor(15, 1);
lcd.write(1);
} else
{
lcd.createChar(1, pil_on);
lcd.setCursor(15, 1);
lcd.write(1);
}
}
}
void Hesapla(float gelen_para) {
SatirTemizle(0);
lcd.setCursor(0, 0);
lcd.print("Son Atilan: ");
lcd.setCursor(12, 0);
lcd.print(gelen_para);
Serial.print("Son Atilan: ");
Serial.println(gelen_para);
float toplam = EEPROM.get(0, veritipi);
toplam += gelen_para;
//EEPROM.put(0,toplam);
SatirTemizle(1);
lcd.setCursor(0, 1);
lcd.print("Toplam: ");
String mst = String(toplam);
String msst = "TL";
mst.concat(msst);
lcd.setCursor(8, 1);
lcd.print(mst);
Serial.print("Toplam: ");
Serial.print(toplam);
Serial.println(" TL");
delay(50);
}
void SatirTemizle(int satir) {
lcd.setCursor(0, satir);
lcd.print(" ");
lcd.setCursor(0, satir);
}