#include <SevSeg.h>
SevSeg sevseg;
const int photoResistorPin = A0;
const int potentiometerPin = A1;
const int buttonPin1 = 2;
const int buttonPin2 = 3;
const int buzzerPin = 4;
const int rgbRedPin = 9;
const int rgbGreenPin = 10;
const int rgbBluePin = 11;
int displayMode = 0; // 0 - Light level, 1 - Potentiometer level
bool buzzerState = false;
void setup() {
pinMode(photoResistorPin, INPUT);
pinMode(potentiometerPin, INPUT);
pinMode(buttonPin1, INPUT_PULLUP);
pinMode(buttonPin2, INPUT_PULLUP);
pinMode(buzzerPin, OUTPUT);
pinMode(rgbRedPin, OUTPUT);
pinMode(rgbGreenPin, OUTPUT);
pinMode(rgbBluePin, OUTPUT);
byte numDigits = 4;
byte digitPins[] = {5, 6, 7, 8};
byte segmentPins[] = {9, 10, 11, 12, 13, A2, A3, A4};
bool resistorsOnSegments = false;
byte hardwareConfig = COMMON_ANODE;
bool updateWithDelays = false;
bool leadingZeros = false;
bool disableDecPoint = false;
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros, disableDecPoint);
sevseg.setBrightness(90); // Initial brightness
}
void loop() {
int lightLevel = analogRead(photoResistorPin);
int potLevel = analogRead(potentiometerPin);
int brightness = map(potLevel, 0, 1023, 0, 100);
if (digitalRead(buttonPin1) == LOW) {
displayMode = (displayMode + 1) % 2;
delay(200); // Debounce delay
}
if (digitalRead(buttonPin2) == LOW) {
buzzerState = !buzzerState;
delay(200); // Debounce delay
}
// RGB LED control based on light level
int redValue = map(lightLevel, 0, 1023, 0, 255);
int greenValue = 255 - redValue;
int blueValue = map(lightLevel, 0, 1023, 255, 0);
analogWrite(rgbRedPin, redValue);
analogWrite(rgbGreenPin, greenValue);
analogWrite(rgbBluePin, blueValue);
// Buzzer control
if (buzzerState) {
if (lightLevel > 800 || potLevel > 900 || potLevel < 100) {
digitalWrite(buzzerPin, HIGH);
tone(buzzerPin, 300, 300);
} else {
tone(buzzerPin, 400, 300);
digitalWrite(buzzerPin, LOW);
}
} else {
tone(buzzerPin, 500, 300);
digitalWrite(buzzerPin, LOW);
}
static unsigned long timer = millis();
static int deciSeconds = 0;
if (millis() - timer >= 100) {
timer += 100;
deciSeconds++;
if (deciSeconds == 10000) {
deciSeconds=0;
}
sevseg.setNumber(deciSeconds, 1);
}
sevseg.refreshDisplay();
}