Valguskett

Ülesanne 2 Гирлянда-Valguskett

See programm juhib valguskette (LED-de rida), millel on 10 LED-i. Potentsiomeetri abil saad valida ühe viiest vilkumisrežiimist. Kõik toimub Arduino plaadil.



Komponendid:
  • 12 eri värvi pirnid
  • 1 potensiomeeter
  • 12 takistit

Kuidas see töötab?

  1. Ühendused:
    • Potentsiomeeter on ühendatud analoogsisendisse A0.
    • LED-id on ühendatud digitaalpordidesse 2 kuni 13.
  2. Potentsiomeetri lugemine: Igas tsüklis (loop()) loetakse potentsiomeetri väärtus funktsiooniga analogRead(potPin) – see annab väärtuse vahemikus 0 kuni 1023.
  3. Režiimi määramine: Funktsioon map() teisendab potentsiomeetri väärtuse vahemikku 0 kuni 4. See tähendab, et kokku on viis erinevat töörežiimi. Funktsioon constrain() tagab, et väärtus ei läheks üle piiri (st jääks vahemikku 0–4).
  4. Režiimi valik: Vastavalt saadud väärtusele (mode) valitakse, millist vilkumisrežiimi kasutada:
    • allBlink() – kõik LED-id vilguvad korraga.
    • oneByOne() – LED-id vilguvad järjest (vasakult paremale).
    • reverseBlink() – LED-id vilguvad vastupidises järjekorras (paremalt vasakule).
    • candleEffect() – LED-id vilguvad juhuslikult, imiteerides küünlaleeki.
    • wave() – LED-id süttivad lainena, siis kustuvad samamoodi.
  5. setAll() funktsioon: See on abifunktsioon, mis võimaldab kõiki LED-e korraga sisse või välja lülitada, olenevalt kas kasutatakse HIGH või LOW väärtust.

KOD:

const int potPin = A0; // Potentsiomeeter ühendatud A0 külge
int leds[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; // LEDid ühendatud pin-koodidesse
const int ledCount = sizeof(leds) / sizeof(leds[0]);

void setup() {
  for (int i = 0; i < ledCount; i++) {
    pinMode(leds[i], OUTPUT);
  }
  Serial.begin(9600);
}

void loop() {
  int potValue = analogRead(potPin); // Loeme potentsiomeetri väärtuse
  int mode = map(potValue, 0, 1023, 0, 5); // 5 režiimi: 0–4
  mode = constrain(mode, 0, 4); // Veendume, et väärtus oleks vahemikus 0 kuni 4
  Serial.print("Valitud režiim: ");
  Serial.println(mode);

  switch (mode) {
    case 0: allBlink(); break;
    case 1: oneByOne(); break;
    case 2: reverseBlink(); break;
    case 3: candleEffect(); break;
    case 4: wave(); break;
  }
}

// Kõik LED-id vilguvad korraga
void allBlink() {
  setAll(HIGH);
  delay(300);
  setAll(LOW);
  delay(300);
}

// LED-id vilguvad järjest
void oneByOne() {
  for (int i = 0; i < ledCount; i++) {
    digitalWrite(leds[i], HIGH);
    delay(150);
    digitalWrite(leds[i], LOW);
  }
}

// LED-id vilguvad tagurpidi järjest
void reverseBlink() {
  for (int i = ledCount - 1; i >= 0; i--) {
    digitalWrite(leds[i], HIGH);
    delay(150);
    digitalWrite(leds[i], LOW);
  }
}

// Küünlaefekt (juhuslik vilkumine)
void candleEffect() {
  for (int i = 0; i < ledCount; i++) {
    digitalWrite(leds[i], HIGH);
    delay(random(50, 120));
    digitalWrite(leds[i], LOW);
    delay(random(30, 100));
  }
}

// "Laine" efekt
void wave() {
  for (int i = 0; i < ledCount; i++) {
    digitalWrite(leds[i], HIGH);
    delay(100);
  }
  for (int i = 0; i < ledCount; i++) {
    digitalWrite(leds[i], LOW);
    delay(100);
  }
}

// Kõik LED-id korraga sisse või välja
void setAll(int state) {
  for (int i = 0; i < ledCount; i++) {
    digitalWrite(leds[i], state);
  }
}

VIDEO: