Ülesanne “Öölamp”

Töö kirjeldus
Öölambi töö, valguses ei sütti ainult kaks LED-i või ainult kaks süttivad või ei sütti üldse, pimedas põleb neli LED-i.

Arduino UNO plaat (1tk)
Arendusplaat (1tk)
Juhtmed (11tk)
Takisti (5tk, 220 Om), (1tk, 10kOm)
LED (5tk: 4 roheline)
Nupp (1tk)
Fototakisti (1tk)

Tööprotsess:

Ühendage dioodid, takisti, fototakisti, nupp ja juhtmed plaadiga.

Nupu vajutamisel süttivad LED-id ja töötavad pimedal ajal. Eredama valgustuse korral töötab neljast LED-ist vaid kaks. Kõige eredamas valguses ei tööta ükski LED.

Skeem:

Programm:

// C++ code
//
int ledRED1 = 13;
int ledRED2 = 12;
int ledRED3 = 11;
int ledRED4 = 10;
const int buttonPin = 3;
const int sensorPin = 0;

int lightLevel, high = 0, low = 1023;
bool isOn = false;
bool buttonState = false;
bool lastButtonState = false;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;

void setup() {
pinMode(ledRED1, OUTPUT);
pinMode(ledRED2, OUTPUT);
pinMode(ledRED3, OUTPUT);
pinMode(ledRED4, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(9600);
}

void loop() {
int reading = digitalRead(buttonPin);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() – lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == LOW) { // Если кнопка нажата
isOn = !isOn;
}
}
}
lastButtonState = reading;

lightLevel = analogRead(sensorPin);
if (lightLevel > high) {
high = lightLevel;
}
if (lightLevel < low) {
low = lightLevel;
}
int brightness = map(lightLevel, low, high, 0, 255);

if (isOn) {
analogWrite(ledRED1, brightness);
analogWrite(ledRED2, brightness);
analogWrite(ledRED3, brightness);
analogWrite(ledRED4, brightness);
} else {
digitalWrite(ledRED1, LOW);
digitalWrite(ledRED2, LOW);
digitalWrite(ledRED3, LOW);
digitalWrite(ledRED4, LOW);
}
}

Video: