Skip to content
Home » Valguskett ülesanne konspekt

Valguskett ülesanne konspekt

Sissejuhatus

Töö kirjeldus:
Koostage diagramm 5 LED-i töörežiimiga, mida lülitatakse potentsiomeetrit pöörates

Kasutatud komponendid:
Arduino UNO plaat (1tk)
Juhtmed (14tk)
Takisti (9tk,  220 Ω)
LED (9tk: 3 punane, 3 roheline, 3 kollane)
Potentsiomeeter (1tk, 250 kΩ)

Töö protsess:
Ühendage dioodid, takisti, juhtmed ja potentsiomeeter plaadiga.
Režiim muutub, keerates potentsiomeetril olevat nuppu.

Loodud režiimid:
1. Kõik LED-id vilguvad korraga. (void all_on)
2. LED-id vilguvad järjest ükshaaval. (void consecutive)
3. LED-id vilguvad värvi kaupa (RGB korral – punased, rohelised, sinised). (void rgb)
4. LED-id vilguvad juhuslikus järjekorras (küünlaefekt). (void candleEffect)
5. “Jooksva tule” efekt – valgus liigub järjest läbi LED-ide. (void running_light)

Uued funktsioonid, mis oli kasutatud

Massiiv LED-ide jaoks:

int ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9, 10};
int arrayLength = sizeof(ledPins) / sizeof(ledPins[0]);

LED-ide seadistamine:

void setup() {
  for (int i = 0; i < arrayLength; i++) {
    pinMode(ledPins[i], OUTPUT);
  }
}

Režiimi valimine potentsiomeetri abil:

int potValue = analogRead(A0);
int mode = map(potValue, 0, 1023, 0, 4); // 0–4 = viis režiimi
mode = constrain(mode, 0, 4);

random() funktsioon candleEffect režiimis:

void candleEffect() {
  for (int i = 0; i < arrayLength; i++) {
    int flickerChance = random(0, 10); // 0–9
    if (flickerChance < 3) { // Umbes 30% tõenäosus, et LED vilgub
      digitalWrite(ledPins[i], HIGH);
      delay(random(10, 100)); // juhuslik vilkumise kestus
      digitalWrite(ledPins[i], LOW);
      delay(random(10, 50));  // juhuslik paus
    }
  }
}
Käivitav kood
// объявление используемых пинов
int ledPins[] = {13, 12, 11, 10, 9, 8, 7, 6, 5};
int arrayLength = sizeof(ledPins) / sizeof(ledPins[0]);

// разделение на массивы по цвету для функции candleEffect()
const uint8_t redPins[]   = {5, 8, 11};
const uint8_t greenPins[] = {6, 9, 12};
const uint8_t bluePins[]  = {7, 10, 13};

void setPins(const uint8_t pins[], size_t n, uint8_t state)
{
    for (size_t i = 0; i < n; ++i) {
        digitalWrite(pins[i], state);
    }
}

void setup() {
  for (int i = 0; i < arrayLength; i++) {
    pinMode(ledPins[i], OUTPUT);
  }
} 

//горят все леды
void all_on()
{
  for (int i = 0; i < arrayLength; i++) {
    digitalWrite(ledPins[i], HIGH);}
  	delay(1000);
  for (int i = 0; i < arrayLength; i++) {
    digitalWrite(ledPins[i], LOW);}
  	delay(1000);
}

//все леды горят по порядку
void consecutive()
{
  for (int i = 0; i < arrayLength; i++) {
    digitalWrite(ledPins[i], HIGH);
  	delay(1000);
    digitalWrite(ledPins[i], LOW);
  	delay(1000);
}
}

//горят только леды своего цвета
void rgb()
{
  	// горит только массив из красных ледов
    setPins(redPins,   sizeof(redPins),   HIGH);
    delay(1000);
    setPins(redPins,   sizeof(redPins),   LOW);
    delay(1000);

    // горит только массив из зеленых ледов
    setPins(greenPins, sizeof(greenPins), HIGH);
    delay(1000);
    setPins(greenPins, sizeof(greenPins), LOW);
    delay(1000);

    // горит только массив из синих ледов
    setPins(bluePins,  sizeof(bluePins),  HIGH);
    delay(1000);
    setPins(bluePins,  sizeof(bluePins),  LOW);
    delay(1000);
}

//эффект свечи - загораются случайные леды быстро
void candleEffect() {
  for (int i = 0; i < arrayLength; i++) {
    int flickerChance = random(0, 10); // 0–9
    if (flickerChance < 3) { // Umbes 30% tõenäosus, et LED vilgub
      digitalWrite(ledPins[i], HIGH);
      delay(random(10, 100)); // juhuslik vilkumise kestus
      digitalWrite(ledPins[i], LOW);
      delay(random(10, 50));  // juhuslik paus
    }
  }
}

//бегущий свет - быстро загораются и тухнут леды по порядку
void running_light()
{
  for (int i = 0; i < arrayLength; i++) {
    digitalWrite(ledPins[i], HIGH);
  	delay(50);
    digitalWrite(ledPins[i], LOW);
  	delay(50);
}
}

void loop() {
  int potValue = analogRead(A0);
  int mode = map(potValue, 0, 1023, 0, 4); // 0–4 = viis režiimi

// передача значений режимов потенциометру
  mode = constrain(mode, 0, 4);
  if (mode==0)
  {
    all_on();
  }
  else if (mode==1)
  {
    consecutive();
  }
  else if (mode==2)
  {
    rgb();
  }
  else if (mode==3)
  {
    running_light();
  }
  else if (mode==4)
  {
    candleEffect();
  }
}
Skeem Tinkercad'is & simulatsioon
Töötav skeem Arduino Uno-ga