// MINIMAL OPTIMIZED VERSION - FITS IN 32KB FLASH
// Automated Energy-Saving Lighting System
// Group 21 - EEE320
// ============ PIN DEFINITIONS ============
#define PIR_PIN PA1 // Motion sensor input
#define LDR_PIN PA0 // Light sensor input
#define LED1_PIN PA5 // Main light
#define LED2_PIN PA6 // Backup light
// ============ VARIABLES ============
int darkThreshold = 50;
bool motion = false;
bool dark = false;
int lightLevel = 0;
void setup() {
Serial.begin(115200);
// Initialize pins
pinMode(LED1_PIN, OUTPUT);
pinMode(LED2_PIN, OUTPUT);
pinMode(PIR_PIN, INPUT);
pinMode(LDR_PIN, INPUT_ANALOG);
// Initial state
digitalWrite(LED1_PIN, LOW);
digitalWrite(LED2_PIN, LOW);
Serial.println("System Ready");
Serial.println("Format: Motion|Dark|LDR|Action");
Serial.println("------------------------------");
}
void loop() {
// Read sensors
motion = digitalRead(PIR_PIN);
lightLevel = analogRead(LDR_PIN);
dark = (lightLevel > darkThreshold);
// AND Logic
if (motion && dark) {
digitalWrite(LED1_PIN, HIGH);
digitalWrite(LED2_PIN, HIGH);
Serial.print("MOTION:YES DARK:YES LDR:");
Serial.print(lightLevel);
Serial.println(" -> LIGHTS ON (Energy Saving Active)");
} else {
digitalWrite(LED1_PIN, LOW);
digitalWrite(LED2_PIN, LOW);
Serial.print("MOTION:");
Serial.print(motion ? "YES" : "NO ");
Serial.print(" DARK:");
Serial.print(dark ? "YES" : "NO ");
Serial.print(" LDR:");
Serial.print(lightLevel);
Serial.println(" -> LIGHTS OFF");
}
delay(1000);
}Loading
st-nucleo-c031c6
st-nucleo-c031c6