Ülesanne #1

int sensorPin = 0;
int ledPin = 13;
int sensorValue = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  sensorValue = analogRead(sensorPin); //   loeb analoog sisendi väärtust ja saadab tagasi täisarvu vahemikus 0 kuni 1023. See tähendab 10 bitilist täpsust (2^10 = 1024).		  
  digitalWrite(ledPin, HIGH);
  delay(sensorValue);
  digitalWrite(ledPin, LOW);
  delay(sensorValue);
  float voltage = sensorValue * (5.0 / 1023.0); // konverteerime väärtuse (0 - 1023)  ja tagastab (0 - 5V):
  Serial.println(voltage);   // Saadud tulemused kirjutame Serial Monitori.
}

Valguskett

Video

https://drive.google.com/file/d/1hUYbvl1wwFTKsxeG2VRs5v_Yvs7geKVr/view?usp=sharing

Kirjeldus

On vaja luua kett, mis koosneb mitmest valgusdioodist, mis töötavad erinevates režiimides. Režiimi saab valida potentsiomeetri abil, iga režiim annab valguskettale erinevad visuaalsed efektid.

Komponendid

  • Arduino UNO plaat (1tk)
  • Arendusplaat (1tk)
  • Juhtmed (14tk)
  • 220 Ω Takisti (9tk)
  • LED (9tk: 3 punane, 3 roheline, 3 sinine)
  • 250 kΩ Potentsiomeeter (1tk)

Selgitus

Loome massiivi LED-ide jaoks:

int sensorPin = A3; // potentsiomeeter
int ledPins[] = {5, 6, 7, 8, 9, 10, 11, 12, 13};
int arrayLength = sizeof(ledPins) / sizeof(ledPins[0]); // massiivi suurus

LED-ide seadistamine:

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

Loome LED-ide vilkumise efekti juhuslikult:

void tree() {
  for (int i = 0; i < arrayLength; i++) {
    int flickerChance = random(0, 10); // siin genereeritakse juhuslik arv vahemikus 0 kuni 9

    if (flickerChance < 3) { // umbes 30% tõenäosus, et LED vilgub
      digitalWrite(ledPins[i], HIGH); // lülitame sisse praeguse LED-i
      delay(random(30, 150)); // ootame juhuslikku aega (30 kuni 150 ms)
      digitalWrite(ledPins[i], LOW);
      delay(random(10, 50));  // juhuslik paus (10 kuni 50 ms)
    }
  }
}

Loome vilkuvate punaste valgusdioodide efekti:

void redLight() {
  digitalWrite(13, HIGH);
  digitalWrite(10, HIGH);
  digitalWrite(7, HIGH);
  delay(250);
  digitalWrite(13, LOW);
  digitalWrite(10, LOW);
  digitalWrite(7, LOW);
  delay(250);
}

Esiteks lülituvad kõik punased LED-id sisse, siis on viivitus 250 ms, pärast seda lülituvad kõik punased LED-id välja ja jälle on viivitus 250 ms.


Loome vilkuvate siniste valgusdioodide efekti:

void blueLight() {
  digitalWrite(11, HIGH);
  digitalWrite(8, HIGH);
  digitalWrite(5, HIGH);
  delay(250);
  digitalWrite(11, LOW);
  digitalWrite(8, LOW);
  digitalWrite(5, LOW);
  delay(250);
}

Esiteks lülituvad kõik sinised LED-id sisse, siis on viivitus 250 ms, pärast seda lülituvad kõik sinised LED-id välja ja jälle on viivitus 250 ms.


Loome vilkuvate roheliste valgusdioodide efekti:

void greenLight() {
  digitalWrite(12, HIGH);
  digitalWrite(9, HIGH);
  digitalWrite(6, HIGH);
  delay(250);
  digitalWrite(12, LOW);
  digitalWrite(9, LOW);
  digitalWrite(6, LOW);
  delay(250);
}

Esiteks lülituvad kõik rohelised LED-id sisse, siis on viivitus 250 ms, pärast seda lülituvad kõik rohelised LED-id välja ja jälle on viivitus 250 ms.


Loome funktsiooni kõigi valgusdioodide väljalülitamiseks:

void turnOff() {
  for (int i = 0; i < arrayLength; i++) // läbime kõik ledPins massiivi elemendid
  {
    digitalWrite(ledPins[i], LOW); // lülitame iga valgusdioodi välja
  }
}

Loome tsükli, milles kontrollitakse potentsiomeetri väärtust ja käivitatakse vastav visuaalne efekt:

void loop() {
  int potValue = analogRead(sensorPin); // siin loetakse potentsiomeetri väärtused
  int mode = map(potValue, 0, 1023, 0, 4); // 5 režiimi (0-4)
  mode = constrain(mode, 0, 4); // režiimi väärtuse piiramine vahemikus 0 kuni 4
 
  if (mode == 1) // kui režiim on 1, käivitatakse funktsioon tree()
  {
    tree();
  }
  else if (mode == 2)
  {
    redLight();
  }
  else if (mode == 3)
  {
    blueLight();
  } 
  else if (mode == 4)
  {
    greenLight();
  }
  else
    turnOff();
}

Kood

int sensorPin = A3; // potentsiomeeter
int ledPins[] = {5, 6, 7, 8, 9, 10, 11, 12, 13};
int arrayLength = sizeof(ledPins) / sizeof(ledPins[0]); // massiivi suurus

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

void loop() {
  int potValue = analogRead(sensorPin);
  int mode = map(potValue, 0, 1023, 0, 4); // 5 režiimi (0-4)
  mode = constrain(mode, 0, 4);

  if (mode == 1)
  {
    tree();
  }
  else if (mode == 2)
  {
    redLight();
  }
  else if (mode == 3)
  {
    blueLight();
  } 
  else if (mode == 4)
  {
    greenLight();
  }
  else
    turnOff();
}

// efektid
void tree() {
  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(30, 150)); // juhuslik vilkumise kestus
      digitalWrite(ledPins[i], LOW);
      delay(random(10, 50));  // juhuslik paus
    }
  }
}

void redLight() {
  digitalWrite(13, HIGH);
  digitalWrite(10, HIGH);
  digitalWrite(7, HIGH);
  delay(250);
  digitalWrite(13, LOW);
  digitalWrite(10, LOW);
  digitalWrite(7, LOW);
  delay(250);
}

void blueLight() {
  digitalWrite(11, HIGH);
  digitalWrite(8, HIGH);
  digitalWrite(5, HIGH);
  delay(250);
  digitalWrite(11, LOW);
  digitalWrite(8, LOW);
  digitalWrite(5, LOW);
  delay(250);
}

void greenLight() {
  digitalWrite(12, HIGH);
  digitalWrite(9, HIGH);
  digitalWrite(6, HIGH);
  delay(250);
  digitalWrite(12, LOW);
  digitalWrite(9, LOW);
  digitalWrite(6, LOW);
  delay(250);
}

void turnOff() {
  for (int i = 0; i < arrayLength; i++)
  {
    digitalWrite(ledPins[i], LOW);
  }
}