Teema 1: LED ja RGB LED ; Valgusfoor

Katse 1 :

void setup()
{
  // pinMode() määrab töörežim
  pinMode(13, OUTPUT);   // 13-pini number, INPUT/OUTPUT(Sisend/Väljund).
}
void loop()
{
  digitalWrite(13, HIGH);   // Lülita sisse
  delay(1000);              // Ootab 1 sek  
  digitalWrite(13, LOW);    // Lülita välja
  delay(1000);              // Ootab 1 sek
}

void setup() – Это функция, которая выполняется один раз при запуске или перезагрузке микроконтроллера. Она используется для настройки начальных параметров. // See on funktsioon, mis käivitub üks kord mikrokontrolleri käivitamisel või taaskäivitamisel. Seda kasutatakse algsete parameetrite seadistamiseks.

pinMode(13, OUTPUT); – Устанавливает 13-й пин на плате Arduino как выход (OUTPUT). Это значит, что на этом пине можно отправлять сигнал (например, включить или выключить светодиод). // Seadistab Arduino plaadi viigu 13 väljundiks (OUTPUT). See tähendab, et sellele viigule saab saata signaali (nt LED-i sisse- või väljalülitamine).

void loop() – Эта функция выполняется бесконечно в цикле после того, как завершена функция setup(). Весь основной код программы выполняется внутри этой функции. // Seda funktsiooni täidetakse lõputult tsüklis pärast funktsiooni setup() lõpetamist. Kogu programmi põhikood käivitatakse selle funktsiooni sees.

digitalWrite(13, HIGH); – Устанавливает 13-й пин в состояние HIGH (высокий уровень), что означает подачу напряжения на этот пин (например, включение светодиода). // Seadistab viigu 13 HIGH, mis tähendab, et sellele viigule rakendatakse pinget (nt LED-i sisselülitamine).

delay(1000); – Ожидает 1000 миллисекунд (или 1 секунду), прежде чем продолжить выполнение программы // Ootab 1000 millisekundit (või 1 sekund) enne programmi täitmise jätkamist.

digitalWrite(13, LOW); – Устанавливает 13-й пин в состояние LOW (низкий уровень), что означает отключение питания на этом пине (выключение светодиода). // Seadistab viigu 13 LOW, mis tähendab, et selle viigu toide on välja lülitatud (LED on välja lülitatud).

Lõpptulemus / Итог : Код включает и выключает светодиод, подключенный к пину 13, с интервалом в 1 секунду, создавая мигающий эффект. // Kood lülitab viiguga 13 ühendatud LED-i sisse ja välja 1 sekundi tagant, tekitades vilkumisefekti.

Katse 2 :

const int RED_PIN = 11;
const int GREEN_PIN = 9;
const int BLUE_PIN = 10;
int DISPLAY_TIME = 100;  // värvimuutuse kiirus
void setup()
{
  pinMode(RED_PIN, OUTPUT);
  pinMode(GREEN_PIN, OUTPUT);
  pinMode(BLUE_PIN, OUTPUT);
}
void loop()
{
mainColors();
showSpectrum();
}
void mainColors()
{
// Kõik LEDid on välja lülitatud
  digitalWrite(RED_PIN, LOW);
  digitalWrite(GREEN_PIN, LOW);
  digitalWrite(BLUE_PIN, LOW);
 delay(1000);
//Põleb punane
  digitalWrite(RED_PIN, HIGH);
  digitalWrite(GREEN_PIN, LOW);
  digitalWrite(BLUE_PIN, LOW);
  delay(1000);
// Põleb roheline
  digitalWrite(RED_PIN, LOW);
  digitalWrite(GREEN_PIN, HIGH);
  digitalWrite(BLUE_PIN, LOW);
  delay(1000);
// Sinine on sisse lülitatud
  digitalWrite(RED_PIN, LOW);
  digitalWrite(GREEN_PIN, LOW);
  digitalWrite(BLUE_PIN, HIGH);
  delay(1000);
// Kollane.
  digitalWrite(RED_PIN, HIGH);
  digitalWrite(GREEN_PIN, HIGH);
  digitalWrite(BLUE_PIN, LOW);
  delay(1000);
// Lilla
  digitalWrite(RED_PIN, LOW);
  digitalWrite(GREEN_PIN, HIGH);
  digitalWrite(BLUE_PIN, HIGH);
  delay(1000);
//Roosa
  digitalWrite(RED_PIN, HIGH);
  digitalWrite(GREEN_PIN, LOW);
  digitalWrite(BLUE_PIN, HIGH);
  delay(1000);
//Valge ehk kõik on sisse lülitatud
  digitalWrite(RED_PIN, HIGH);
  digitalWrite(GREEN_PIN, HIGH);
  digitalWrite(BLUE_PIN, HIGH);
  delay(1000);
}
// Vikerkaar. 
void showSpectrum()
{
  int x;
  for (x = 0; x < 768; x++)
  {
    showRGB(x);  // 
    delay(10);   // paus 0,001 sek
  }
}
// ShowRGB()  põhivärvid: 
// 0 = punane 
// 255 = roheline
// 511 = sinine
// 767 = jälle punane 
void showRGB(int color)
{
  int redIntensity;
  int greenIntensity;
  int blueIntensity;
  if (color <= 255)                
  {
    redIntensity = 255 - color;    // lülitakse välja punane
    greenIntensity = color;        // lülitakse sisse roheline
    blueIntensity = 0;             // sinine on välja lülitatud
  }
  else if (color <= 511)          
  {
    redIntensity = 0;                     // punane on välja lülitatud
    greenIntensity = 255 - (color - 256); 
    blueIntensity = (color - 256);        
  }
  else if (color >= 512)             
  {
    redIntensity = (color - 512);        
    greenIntensity = 0;                  
    blueIntensity = 255 - (color - 512);  
  }
  analogWrite(RED_PIN, redIntensity); // punase LED´i sujuv ümberlülitamine
  analogWrite(BLUE_PIN, blueIntensity);
  analogWrite(GREEN_PIN, greenIntensity);
}

const int RED_PIN = 11; – Определяет пин для красного цвета светодиода, подключенного к пину 11 на плате Arduino. // Määratleb punase värvi LED-i viigu, mis on ühendatud Arduino plaadi viiguga 11.

const int GREEN_PIN = 9; – Определяет пин для зеленого цвета светодиода, подключенного к пину 9 на плате Arduino. // Määratleb rohelise värvi LED-i viigu, mis on ühendatud Arduino plaadi viiguga 9.

const int BLUE_PIN = 10; – Определяет пин для синего цвета светодиода, подключенного к пину 10 на плате Arduino. // Määratleb sinise värvi LED-i viigu, mis on ühendatud Arduino plaadi viiguga 10.

int DISPLAY_TIME = 100; – Задает скорость смены цветов (пауза между переключениями) // Määrab värvimuutuse kiiruse (paus lülituste vahel).

void setup() – Функция выполняется один раз при старте или перезагрузке. // Funktsioon käivitatakse üks kord käivitamisel või taaskäivitamisel.

pinMode(RED_PIN, OUTPUT); – Устанавливает пин для красного светодиода как выход (OUTPUT) // Seadistab punase LED-i viigu väljundiks (OUTPUT).

pinMode(GREEN_PIN, OUTPUT); – Устанавливает пин для зеленого светодиода как выход (OUTPUT). // Seadistab rohelise LED-i viigu väljundiks (OUTPUT).

pinMode(BLUE_PIN, OUTPUT); – Устанавливает пин для синего светодиода как выход (OUTPUT). // Seadistab sinise LED-i viigu väljundiks (OUTPUT).

void loop() – Эта функция выполняется бесконечно, после завершения setup() / Seda funktsiooni täidetakse lõputult pärast setup() lõpetamist.

mainColors(); – Вызывает функцию mainColors(), которая управляет базовыми цветами светодиода. // Kutsub funktsiooni mainColors(), mis kontrollib LED-i põhivärve.

showSpectrum(); – Вызывает функцию showSpectrum(), которая создает эффект радужного спектра. // Kutsub showSpectrum(), mis loob vikerkaare spektri efekti.

digitalWrite(RED_PIN, LOW); / digitalWrite(GREEN_PIN, LOW); / digitalWrite(BLUE_PIN, LOW); – Выключает красный, зеленый, синий диод // Lülitab välja punase, rohelise ja sinise dioodi.

delay(1000); – Задержка 1 секунда перед переключением на следующий цвет. // Viivitus 1 sekund enne järgmisele värvile üleminekut.

for (x = 0; x < 768; x++) – Цикл, который выполняется 768 раз, это количество шагов для создания плавного перехода между цветами. // 768 korda sooritatud tsükkel on sammude arv, et luua sujuv üleminek värvide vahel.

showRGB(x); – Вызов функции showRGB(x) для отображения цвета в зависимости от текущего значения переменной x. // Kutsuge funktsiooni showRGB(x), et kuvada värve sõltuvalt muutuja x praegusest väärtusest.

if (color <= 255) – Если значение color от 0 до 255, то увеличивается интенсивность зеленого цвета, а красный уменьшается, создавая плавный переход от красного к зеленому. // Kui värvi väärtus jääb vahemikku 0-255, suureneb rohelise intensiivsus ja väheneb punane, tekitades sujuvat üleminekut punasest rohelisse.

else if (color <= 511) – Если значение color от 256 до 511, то увеличивается интенсивность синего цвета и уменьшается интенсивность зеленого. // Kui värvi väärtus jääb vahemikku 256-511, suureneb sinise intensiivsus ja väheneb rohelise intensiivsus.

else if (color >= 512) – Если значение color от 512 до 767, то увеличивается интенсивность красного цвета, а синий уменьшается, создавая переход от синего к красному. // Kui värvi väärtus on 512 kuni 767, suureneb punase intensiivsus ja väheneb sinine, tekitades ülemineku sinisest punasesse.

analogWrite(RED_PIN, redIntensity); / analogWrite(GREEN_PIN, greenIntensity); / analogWrite(BLUE_PIN, blueIntensity); – Подает на красный,зеленый и синий пин значение интенсивности цвета. // Väljundab värvi intensiivsuse väärtuse punasele, rohelisele ja sinisele viigule.

Lõpptulemus / Итог : Код управляет RGB-светодиодом, создавая разные цвета (красный, зеленый, синий, желтый, фиолетовый, розовый, белый) и плавный переход через весь спектр цвета, создавая эффект радуги. // Kood juhib RGB LED-i, mis loob erinevaid värve (punane, roheline, sinine, kollane, lilla, roosa, valge) ja sujuvat üleminekut kogu värvispektri ulatuses, tekitades vikerkaarefekti.

————————————————Ülesanne “Valgusfoor”————————————————–

Töö kirjeldus:

Valgusfoor töötab kolmes režiimis.
1) Tavaline režiim autodele, kus on punased, kollased ja rohelised dioodid, mis vahetavad omavahel ja vilguvad lõpus
2) Režiim jalakäijatele on 2 dioodi punane ja roheline ning samuti vahetavad omavahel ja vilguvad lõpus
3) Öörežiimil on 1 kollane diood, mis vilgub.

Kasutatud komponenid:
Arduino UNO plaat (1tk)
Arendusplaat (1tk)
Juhtmed (8tk)
Takisti (6tk, 1kOm)
LED (6tk: 2 punane, 2 roheline, 2 kollane)

Töö protsess:

Alguses töötab valgusfoor normaalselt, näidates esmalt rohelist, seejärel kollast ja seejärel punast. Roheline diood jääb põlema 5 sekundiks ja vilgub 3 sekundiks. Kollane diood jääb põlema 2 sekundiks ilma vilkumiseta ja punane diood jääb põlema 5 sekundiks ja vilgub 3 sekundiks.
Järgmine on jalakäijate režiim, mis kasutab ainult rohelist ja punast dioodi. Roheline diood põleb tavapäraselt ja punane diood põleb 5 sekundit ilma vilkumiseta.
Öörežiimil on 1 kollane diood, mis vilgub 10 sekundit. // Pärast öörežiimi algab kõik otsast peale.

LED-ide rakendamine:

Nt tänavavalgustus, tööstusvalgustus linnavalgustus ja teevalgustus

Skeem:

Programm:

#define PIN_CAR_GREEN    13
#define PIN_CAR_YELLOW   12
#define PIN_CAR_RED      11
// Määrake öise režiimi viik (kollane)
#define PIN_NIGHT_YELLOW 10
// Määrake viigud jalakäijate režiimi jaoks
#define PIN_PED_GREEN    9
#define PIN_PED_RED      8
// Funktsioon auto dioodide väljalülitamiseks 
void turnOffCarLEDs(){
  digitalWrite(PIN_CAR_GREEN, LOW);
  digitalWrite(PIN_CAR_YELLOW, LOW);
  digitalWrite(PIN_CAR_RED, LOW);
}
// Jalakäijate režiimi väljalülitamise funktsioon
void turnOffPedLEDs(){
  digitalWrite(PIN_PED_GREEN, LOW);
  digitalWrite(PIN_PED_RED, LOW);
}
// Öörežiimi väljalülitamise funktsioon
void turnOffNightLED(){
  digitalWrite(PIN_NIGHT_YELLOW, LOW);
}
// Funktsioon kõigi dioodide väljalülitamiseks
void turnOffAllLEDs(){
  turnOffCarLEDs();
  turnOffPedLEDs();
  turnOffNightLED();
}
// Funktsioon LED-i vilkumiseks millisekundite jooksul.
// Tsükkel: diood lülitub sisse 500 ms, seejärel lülitub välja 500 ms.
void blinkLED(int pin, unsigned long duration) {
  unsigned long startTime = millis();
  while(millis() - startTime < duration){
    digitalWrite(pin, HIGH);
    delay(500);
    digitalWrite(pin, LOW);
    delay(500);
  }
}
//Režiimi funktsioon „põleb 5 sekundit, seejärel vilgub 3 sekundit“.
// Kasutatakse nende dioodide puhul, mille puhul on vajalik viivitusefekt koos järgneva vilkumisega (nt rohelised dioodid).
void steadyAndBlink(int pin) {
 // 5 sekundit pidevalt
  digitalWrite(pin, HIGH);
  delay(5000);
  digitalWrite(pin, LOW);
 // 3 sekundit vilkumist
  blinkLED(pin, 3000);
}
// Uus funktsioon pideva valguse jaoks ilma vilkumiseta
void steadyLED(int pin, unsigned long duration) {
  digitalWrite(pin, HIGH);
  delay(duration);
  digitalWrite(pin, LOW);
}
// Funktsioon päevase autorežiimi jaoks.
// Roheline - steadyAndBlink() režiim (põleb 5 sekundit, seejärel vilgub 3 sekundit).
// Kollase puhul - pidevvalgus 2 sekundit (ei vilgu).
// Punase puhul - pidev helendus 5 sekundiks (ilma vilkuta).
void carDayMode(){
  turnOffAllLEDs();
 
// 1. faas: autode jaoks roheline
  steadyAndBlink(PIN_CAR_GREEN);
  turnOffCarLEDs();
 
// 2. faas: kollane autode jaoks (põleb vaid 2 sekundit).
  steadyLED(PIN_CAR_YELLOW, 2000);
  turnOffCarLEDs();
 
// 3. faas: punane autode jaoks (põleb vaid 5 sekundit).
  steadyLED(PIN_CAR_RED, 5000);
  turnOffCarLEDs();
}
// Jalakäijate režiimi funktsioon.
// Roheline - steadyAndBlink() režiim (põleb 5 sekundit, seejärel vilgub 3 sekundit).
// Punase puhul - pidevvalgustus 5 sekundi jooksul (ei vilgu).
void pedestrianDayMode(){
  turnOffAllLEDs();
 
  // 1. faas: roheline jalakäijatele
  steadyAndBlink(PIN_PED_GREEN);
  turnOffPedLEDs();
 
  // 2. faas: punane jalakäijate jaoks (põleb vaid 5 sekundit).
  steadyLED(PIN_PED_RED, 5000);
  turnOffPedLEDs();
}
// Funktsioon öörežiimi jaoks: kollane diood öise režiimi viigul vilgub millisekundite jooksul cycleDuration.
void nightModeCycle(unsigned long cycleDuration){
  // Enne öörežiimi käivitamist lülitage auto ja jalakäijate dioodid välja
  turnOffCarLEDs();
  turnOffPedLEDs();
 
  unsigned long startTime = millis();
  while(millis() - startTime < cycleDuration) {
    digitalWrite(PIN_NIGHT_YELLOW, HIGH);
    delay(500);
    digitalWrite(PIN_NIGHT_YELLOW, LOW);
    delay(500);
  }
}
void setup() {
  // Konfigureerige kõik viigud väljunditeks
  pinMode(PIN_CAR_GREEN, OUTPUT);
  pinMode(PIN_CAR_YELLOW, OUTPUT);
  pinMode(PIN_CAR_RED, OUTPUT);
  pinMode(PIN_NIGHT_YELLOW, OUTPUT);
  pinMode(PIN_PED_GREEN, OUTPUT);
  pinMode(PIN_PED_RED, OUTPUT);
 
  // Vaikimisi on kõik dioodid välja lülitatud
  turnOffAllLEDs();
}
void loop() {
  // Päevarežiim: autotsükkel, seejärel jalakäijate tsükkel.
  carDayMode();
  pedestrianDayMode();
 
  // Öörežiim: kollane diood viigul 10 vilgub 10 sekundit.
  nightModeCycle(10000);
 
  // Pärast öist režiimi algab taas päevatsükkel.
}

Video:

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

Uued funktsioonid:

1) steadyLED(int pin, unsigned long duration)

Эта функция предназначена для того, чтобы включить светодиод на определенное время (без мигания), а затем выключить его. Она принимает два параметра // See funktsioon on mõeldud selleks, et lülitada LED teatud ajaks sisse (ilma vilkumiseta) ja seejärel välja. See võtab vastu kaks parameetrit

  • pin — пин, к которому подключен светодиод // pin, millega LED on ühendatud.
  • duration — продолжительность свечения в миллисекундах // luminestsents kestus millisekundites

Näiteks : steadyLED(PIN_CAR_YELLOW, 2000);

2) steadyAndBlink(int pin)

Она предназначена для того когда нужно чтобы светодиод сначала горел 5 секунд, а затем начал мигать 3 секунды. В коде эта функция используется для зеленого автомобильного светофора // See on mõeldud selleks, kui soovite, et LED süttib esmalt 5 sekundit ja hakkab seejärel 3 sekundit vilkuma. Koodis kasutatakse seda funktsiooni rohelise valgusfoori puhul:

Näiteks: steadyAndBlink(PIN_CAR_GREEN);

3) nightModeCycle(unsigned long cycleDuration)

Эта функция управляет ночным режимом. Она заставляет желтый светодиод на пине PIN_NIGHT_YELLOW мигать 10 секунд. До начала ночного режима она выключает все автомобильные и пешеходные светодиоды // See funktsioon kontrollib öörežiimi. See paneb kollase LED-i PIN_NIGHT_YELLOW viigu vilkuma 10 sekundit. See lülitab kõik sõiduki ja jalakäijate LEDid enne öörežiimi algust välja:

Näiteks: nightModeCycle(10000);

4) Funktsioonid turnOffCarLEDs(), turnOffPedLEDs(), turnOffNightLEDs() ja turnOffAllLEDs() lülitavad lihtsalt kõik või üksikud LEDid välja. Need funktsioonid pakuvad mugavust dioodide väljalülitamiseks enne järgmise režiimi alustamist.

5)unsigned long startTime = millis();

Funktsioon millis() tagastab programmi käivitamisest (või mikrokontrolleri lähtestamisest) möödunud millisekundite arvu.

Muutuja startTime salvestab selle väärtuse, st aja, mil see koodifragment algas.

6)while(millis() – startTime < duration)

See tingimus käivitab tsükli, mis kestab seni, kuni kulunud aeg on suurem või võrdne kestusega.

Iga kord, kui silmus käivitatakse, tagastab millis() uuesti programmi käivitamisest alates jooksva millisekundite arvu. See tähendab, et iga tsükli puhul kontrollitakse, kui palju aega on möödunud alates startTime’i seadmisest.

Muutuja duration määrab, mitu millisekundit silmus peaks kestma. Silmust täidetakse seni, kuni praeguse aja ja algusaegade vahe (millis() – startTime) on võrdne või suurem kui kestus.