#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <YourFont.h> // Include your custom font
#include <SoftwareSerial.h>
#include <EEPROM.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
SoftwareSerial mySerial(3, 4); // RX, TX
int potensio, value_bluetooth, nilai_batas, kirim;
int satuan, puluhan, ratusan, ribuan;
void setup() {
Serial.begin(57600);
mySerial.begin(38400);
pinMode(A7, INPUT); // potensio
pinMode(A6, INPUT); // filter
pinMode(2, INPUT_PULLUP); // button lock
pinMode(5, OUTPUT); // led output
digitalWrite(5, HIGH); // kondisi awal led mati
satuan = EEPROM.read(0);
puluhan = EEPROM.read(1) * 10;
ratusan = EEPROM.read(2) * 100;
ribuan = EEPROM.read(3) * 1000;
nilai_batas = satuan + puluhan + ratusan + ribuan;
if (nilai_batas <= 0) {
nilai_batas = 450;
}
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Initialize with I2C address 0x3C (for 128x64)
display.display();
delay(2000);
display.clearDisplay();
}
void loop() {
potensio = analogRead(A7);
if (potensio == 0) {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Reinitialize OLED display if potensio is 0
}
Serial.println("Selamat Datang ROSEMERY");
int value_read = analogRead(A6);
int data_bluetooth = value_read;
value_bluetooth = (value_bluetooth + data_bluetooth) / 2;
if (value_bluetooth > nilai_batas) {
mySerial.print(1, DEC);
delay(10);
digitalWrite(5, LOW);
kirim = 1;
} else {
mySerial.print(0, DEC);
delay(10);
digitalWrite(5, HIGH);
kirim = 0;
}
inilcd();
}
void inilcd() {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.print("Val: ");
display.print(value_bluetooth);
display.setCursor(0, 56);
display.print("Pot: ");
display.print(potensio);
display.setCursor(65, 0);
display.print("Thr: ");
display.print(nilai_batas);
display.setCursor(80, 56);
display.print("Stat: ");
display.print(kirim);
display.display();
if (digitalRead(2) == 0) {
satuan = potensio % 10;
puluhan = (potensio / 10) % 10;
ratusan = (potensio / 100) % 10;
ribuan = (potensio / 1000) % 10;
EEPROM.write(0, satuan);
EEPROM.write(1, puluhan);
EEPROM.write(2, ratusan);
EEPROM.write(3, ribuan);
delay(300);
satuan = EEPROM.read(0);
puluhan = EEPROM.read(1) * 10;
ratusan = EEPROM.read(2) * 100;
ribuan = EEPROM.read(3) * 1000;
nilai_batas = satuan + puluhan + ratusan + ribuan;
}
delay(10);
}