// Assignment - Task A
// Embedded IoT System Fall 2025
// Name: Malaika
// Reg#: 1291
#include <Arduino.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// --- Pin Configuration ---
#define LED1 4
#define LED2 19
#define BTN1 32 // Button 1 → Change mode
#define BTN2 33 // Button 2 → Reset to OFF
// --- OLED Setup ---
Adafruit_SSD1306 display(128, 64, &Wire, -1);
// --- Variables ---
int mode = 0; // 0=OFF, 1=Alternate, 2=Both ON, 3=PWM Fade
// --- Function to Show Mode on OLED ---
void showMode() {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(10, 25);
display.print("Mode: ");
switch (mode) {
case 0: display.print("Both OFF"); break;
case 1: display.print("Alternate Blink"); break;
case 2: display.print("Both ON"); break;
case 3: display.print("PWM Fade"); break;
}
display.display();
}
void setup() {
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(BTN1, INPUT_PULLUP);
pinMode(BTN2, INPUT_PULLUP);
// --- Initialize OLED Display ---
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
while (true); // stop if OLED not found
}
showMode(); // Display initial mode
}
void loop() {
// --- Button 1: Cycle Modes ---
if (digitalRead(BTN1) == LOW) {
delay(200); // debounce
mode = (mode + 1) % 4; // Cycle through 0–3
showMode();
while (digitalRead(BTN1) == LOW); // wait until released
}
// --- Button 2: Reset to OFF ---
if (digitalRead(BTN2) == LOW) {
delay(200);
mode = 0;
showMode();
while (digitalRead(BTN2) == LOW);
}
// --- LED Behaviors ---
switch (mode) {
case 0: // Both OFF
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
break;
case 1: // Alternate Blink
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
delay(300);
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
delay(300);
break;
case 2: // Both ON
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
break;
case 3: // PWM Fade
for (int i = 0; i <= 255; i++) {
analogWrite(LED1, i);
analogWrite(LED2, 255 - i);
delay(5);
}
for (int i = 255; i >= 0; i--) {
analogWrite(LED1, i);
analogWrite(LED2, 255 - i);
delay(5);
}
break;
}
}