#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>
// ================= OLED =================
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_ADDR 0x3C
#define SDA_PIN 8
#define SCL_PIN 9
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// ================= BUTTONS =================
#define BTN_UP 0
#define BTN_DOWN 1
#define BTN_WAKE 2
// ================= ADDRESS PINS =================
#define ADDR_A 6
#define ADDR_B 7
// ================= SENSORS =================
#define DHTPIN 3
#define VIB_PIN 5
#define LDR_PIN 10
// ================= BUZZER =================
#define BUZZER 4
#define PWM_FREQ 2000
#define PWM_RES 8
// ================= MODES =================
enum Mode { MODE_MENU, MODE_SLEEP_POD, MODE_HOME_AUTO };
Mode currentMode = MODE_MENU;
// ================= DHT =================
#define DHTTYPE DHT22
DHT* dht = nullptr;
float temperature = 0, humidity = 0;
// ================= MENU =================
const char* menuItems[] = { "CALL", "MAP", "GAMES" };
int selectedIndex = 0;
// ================= DISPLAY SLEEP =================
unsigned long lastUserActivity = 0;
bool displaySleeping = false;
// ================= SETUP =================
void setup() {
pinMode(BTN_UP, INPUT_PULLDOWN);
pinMode(BTN_DOWN, INPUT_PULLUP);
pinMode(BTN_WAKE, INPUT_PULLUP);
pinMode(ADDR_A, INPUT_PULLDOWN); // IMPORTANT
pinMode(ADDR_B, INPUT_PULLDOWN); // IMPORTANT
Wire.begin(SDA_PIN, SCL_PIN);
if (!display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR)) {
while (1);
}
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
display.setTextSize(2);
display.setCursor(10, 24);
display.print("BOOT OK");
display.display();
lastUserActivity = millis();
}
// ================= LOOP =================
void loop() {
display.clearDisplay();
display.setTextSize(2);
display.setCursor(10, 24);
display.print("RUNNING");
display.display();
delay(500);
}