3.1. Katse Nuppude ja Slideswitch’i kasutamise võimalus
Kasutatud komponendid:
Arduino UNO plaat 1tk
Arendusplaat 1tk
Nupp 2tk
Diood 1tk
Juhtme 7tk
Rezistor(220) 3tk

const int button1Pin = 2; //viik kunu on ühebdatud nupp1
const int button2Pin = 3; //viik kuhu on ühendatud nupp2
const int ledPin = 13;
void setup()
{
pinMode(button1Pin, INPUT); //algväärtuse nupu viigu sisendiks
pinMode(button2Pin, INPUT); //algväärtuse nupu viigu sisendiks
pinMode(ledPin, OUTPUT); //algväärtuse LED viigu väljundiks
}
void loop()
{
int button1State, button2State; //nupu oleku muutujad
button1State = digitalRead(button1Pin);// salvestame muutujasse nupu hetke väärtuse(HIGH või LOW)
button2State = digitalRead(button2Pin);
if (((button1State == LOW) || (button2State == LOW)) // kui nupu on alla vajutatud
&& !
((button1State == LOW) && (button2State == LOW))) // kui nupude on alla vajutatud
{
digitalWrite(ledPin, HIGH); // lülitame LED sisse
}
else
{
digitalWrite(ledPin, LOW); // lülitame LED välja
}
}
const int button1Pin = 2; — Nupp 1 pordi määramine (pind 2).
const int button2Pin = 3; — Nupp 2 pordi määramine (pind 3).
const int ledPin = 13; — LED pordi määramine (pind 13).
void setup() — Funktsioon, mis käivitatakse ainult üks kord programmi alguses. Pordid seadistatakse.
pinMode(button1Pin, INPUT); — Seab nupp 1 pordi sisendiks.
pinMode(button2Pin, INPUT); — Seab nupp 2 pordi sisendiks.
pinMode(ledPin, OUTPUT); — Seab LED pordi väljundiks.
void loop() — Peamine funktsioon, mis täidetakse lõputult.
int button1State, button2State; — Muutujate deklareerimine nuppude olekute salvestamiseks.
button1State = digitalRead(button1Pin); — Nupu 1 oleku lugemine.
button2State = digitalRead(button2Pin); — Nupu 2 oleku lugemine.
if (((button1State == LOW) || (button2State == LOW)) && !((button1State == LOW) && (button2State == LOW))) — Tingimus, et kontrollida, kas vähemalt üks nupp on vajutatud, aga mitte mõlemad korraga.
digitalWrite(ledPin, HIGH); — LED sisse lülitamine, kui tingimus on täidetud.
digitalWrite(ledPin, LOW); — LED välja lülitamine, kui tingimus ei ole täidetud.
3.2. Katse Photoresistor
Kasutatud komponendid:
Arduino UNO plaat 1tk
Arendusplaat 1tk
Juhtme 6tk
Rezistor(220) 1tk
Rezistor(1000) 1tk
Photoresistor 1tk
diood 1tk

const int sensorPin = 0;
const int ledPin = 9;
int lightLevel, high = 0, low = 1023;
void setup()
{
pinMode(ledPin, OUTPUT);
Serial.begin(9600); // //Serial monitori seadistamine
}
void loop()
{
// AnalogRead() kasutab väärtused vahemikus 0 (0 вольт) и 1023 (5 вольт).
// AnalogWrite(), kasutatakse, et LEDi sujuvalt sisselülitada 0(ei põle) kuni 255(põleb maksimalselt).
lightLevel = analogRead(sensorPin); //loeme mõõdetud analoogväärtuse
// Map() teisendab sisendi väärtused ühest vahemikust teisse. Näiteks, "from" 0-1023 "to" 0-255.
// Constrain() saed muutujale kindlad piirväärtused.
// Näiteks: kui constrain() kohtub arvudega 1024, 1025, 1026.., siis ta teisendab need 1023, 1023, 1023..). Kui arvud vähem kui 0, siis teisendab need 0:.
// lightLevel = constrain(lightLevel, 0, 255);
manualTune(); //
//autoTune(); //
analogWrite(ledPin, lightLevel);
// Выражение выше, будет изменять яркость светодиода вместе с уровнем освещенности. Чтобы сделать наоборот, заменить в analogWrite(ledPin, lightLevel) "lightLevel" на "255-lightLevel". Теперь у нас получился ночник!
Serial.print(lightLevel); // prindime tulemused Serial Monitori (вывод данных с фоторезистора (0-1023))
Serial.println("");
delay(1000);
}
void manualTune()
{
lightLevel = map(lightLevel, 300, 800, 0, 255); // kaardistame selle analoogväljundi vahemikku (будет от 300 темно, до 800 (светло)).
lightLevel = constrain(lightLevel, 0, 255);
}
void autoTune()
{
if (lightLevel < low)
{
low = lightLevel;
}
if (lightLevel > high)
{
high = lightLevel;
}
lightLevel = map(lightLevel, low+10, high-30, 0, 255);
lightLevel = constrain(lightLevel, 0, 255);
}
Funktsioonid:
void setup() – täidetakse ainult korra programmi käivitamisel. Seadistab pinnid ja käivitab seriaalmonitori.
void loop() – programmi põhitsükkel, mis töötab lõpmatult, loeb fotodiode taset ja reguleerib LED-i heledust vastavalt valguse tasemele.
manualTune() – funktsioon käsitsi heledusreguleerimiseks, muudab fotodiode väärtuse vahemikku 0–255, arvestades ainult vahemikku 300–800 (pime–valgus).
autoTune() – funktsioon automaatseks heledusreguleerimiseks, määrab valgustaseme minimaalse ja maksimaalse väärtuse ning skaalaab neid vahemikku 0–255.
analogWrite(ledPin, lightLevel) – reguleerib LED-i heledust vastavalt mõõdetud valguse tasemele.
analogRead(sensorPin) – loeb fotodiode analoogväärtuse.
Serial.print() – kuvab mõõdetud väärtused seriaalmonitoris veaotsingu jaoks.
Serial.println() – lisab uue rea pärast andmete kuvamist seriaalmonitoris.
delay(1000) – peatab programmi täitmise 1000 millisekundiks (1 sekund).
map() – muudab väärtuse ühest vahemikust teise.
constrain() – piirab väärtuse määratud vahemikku.
Kasutamije elus:
Automaatne valgustus ruumides:
See kood võib olla kasutatav nutikas valgustuses, et reguleerida LEDide heledust ruumis sõltuvalt välistest valgustingimustest. Näiteks pimedates tubades võivad LED-id automaatselt särama minna, samas kui valgelt valgustatud tubades muutuvad need heledamaks.
Praktiline Ülesanne 3.1 Öölamp
Arduino UNO plaat 1tk
Arendusplaat 1tk
Juhtme 10tk
Rezistor(220) 3tk
Rezistor(1000) 1tk
Photoresistor 1tk
diood 3tk
potensiomeeter 1tk

// Pinid
const int ldrPin = A0;
const int potPin = A1;
const int ledPins[] = {8, 9, 10};
const int ledCount = 3;
void setup() {
// LED-de pinide seadistamine
for (int i = 0; i < ledCount; i++) {
pinMode(ledPins[i], OUTPUT);
digitalWrite(ledPins[i], LOW); // Lülitame LED-id välja alguses
}
Serial.begin(9600); // Alustame serial monitori
}
void loop() {
int lightLevel = analogRead(ldrPin); // Loeme valguse taseme
int potValue = analogRead(potPin); // Loeme potentiomeetri väärtuse
// Jagame potentiomeetri väärtuse 5 alaks
int mode = map(potValue, 0, 1023, 1, 5);
Serial.print("Režiim: ");
Serial.print(mode);
Serial.print(" | Valgus: ");
Serial.println(lightLevel);
// Vastavalt režiimile juhime LED-e
switch (mode) {
case 1: // Kõik LED-id on välja
controlLeds(0);
break;
case 2: // Üks LED vastavalt valgusele
if (lightLevel < 500) controlLeds(1);
else controlLeds(0);
break;
case 3: // Kaks LED-i vastavalt valgusele
if (lightLevel < 500) controlLeds(2);
else controlLeds(0);
break;
case 4: // Kolm LED-i vastavalt valgusele
if (lightLevel < 500) controlLeds(3);
else controlLeds(0);
break;
case 5: // Kõik LED-id on alati sisse lülitatud
controlLeds(3);
break;
}
delay(100); // Viivitus süsteemi tööks
}
void controlLeds(int numberOn) {
// LED-ide juhtimine
for (int i = 0; i < ledCount; i++) {
digitalWrite(ledPins[i], i < numberOn ? HIGH : LOW); // Lülitame LED-id sisse/välja
}
}
Funktsioonid:pinMode(pin, mode)-Seab pinni Arduinol sisendiks (INPUT) või väljundiks (OUTPUT).digitalWrite(pin, value)-Seab pinni olekuks HIGH (sisse lülitatud) või LOW (välja lülitatud).analogRead(pin)-Loeb analoogväärtuse pinnilt vahemikus 0 kuni 1023.map(value, fromLow, fromHigh, toLow, toHigh)-Muudab väärtuse ühe vahemiku ulatusest teise.Serial.begin(speed)-Algatab seeriaportaali antud andmeedastuskiirusel.Serial.print(data)-Saadab andmed seeriaportaali ilma uue reavahetuseta lõpus.Serial.println(data)-Saadab andmed seeriaportaali koos uue reavahetusega lõpus.delay(ms)-Peatab programmi täideviimise määratud arvu millisekunditeks.switch / case-Tingimuslause, mis valib ja täidab ühe mitmest koodiblokist sõltuvalt muutuja väärtusest.
Kuidas kood töötab:
Programm juhib valgusdioode fotosensori ja potentsiomeetri näitude põhjal. Sõltuvalt potentsiomeetri asendist valitakse üks viiest töörežiimist, mis reguleerivad sisse lülitatud valgusdioodide arvu. Kui valgustus on alla teatud taseme, lülituvad valgusdioodid sisse. Programm väljastab režiimi ja valguse andmed seeriamonitorile ning värskendab LED-ide olekut iga 100 millisekundi järel.
Video:
https://drive.google.com/file/d/1dNCjmRKT3YjyIUIszBiKAHDxBUrr4Jdb/view?usp=sharing