3.1. Katse Nuppude ja Slideswitch’i kasutamise võimalus
Skeema

Kood
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
}
}
3.2. Katse Photoresisto

Kood
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);
}
Ülesanne 3.1 Öölamp
Projekt: Öölamp Arduino abil
Eesmärk:
Luua öölamp, mis:
- Lülitub sisse ja välja nupuvajutusega
- Muudab värvi iga sisselülitamisega (kui kasutatakse RGB LED-i)
- Reguleerib eredust vastavalt ümbritsevale valgusele (LDR abil)
Komponendid:
- Arduino
- Nupp
- Valgustakisti (LDR)
- RGB LED (või tavaline LED)
- Takistid
- Makettplaat ja juhtmed
Funktsionaalsus:
- Nupp lülitab lambi sisse/välja
- Iga kord sisse lülitades muutub värv (RGB LED-i korral)
- Mida pimedam on ruumis, seda eredamalt lamp põleb
Skeem

Kood
const int ldrPin = A0;
const int buttonPin = 7;
const int redPin = 9;
const int greenPin = 10;
const int bluePin = 11;
bool isOn = false;
int colorMode = 0;
bool lastButtonState = HIGH;
void setup() {
pinMode(ldrPin, INPUT);
pinMode(buttonPin, INPUT_PULLUP); // Кнопка подключена к GND
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
Serial.begin(9600);
}
void loop() {
bool currentButtonState = digitalRead(buttonPin);
// Обработка нажатия кнопки
if (lastButtonState == HIGH && currentButtonState == LOW) {
isOn = !isOn;
if (isOn) {
colorMode = (colorMode + 1) % 3; // Переключаем цвет
}
delay(200); // Защита от дребезга
}
lastButtonState = currentButtonState;
int lightLevel = analogRead(ldrPin); // 0 (темно) - 1023 (светло)
int brightness = map(lightLevel, 0, 1023, 255, 0); // Чем темнее — тем ярче
if (isOn) {
int r = 0, g = 0, b = 0;
if (colorMode == 0) r = brightness;
else if (colorMode == 1) g = brightness;
else if (colorMode == 2) b = brightness;
analogWrite(redPin, r);
analogWrite(greenPin, g);
analogWrite(bluePin, b);
} else {
analogWrite(redPin, 0);
analogWrite(greenPin, 0);
analogWrite(bluePin, 0);
}
delay(50);
}
Video
bool isOn = false;
int colorMode = 0;
bool lastButtonState = HIGH;
Need muutujad juhivad öölambi tööd.isOn näitab, kas lamp on hetkel sisse lülitatud (true) või välja lülitatud (false).colorMode hoiab meeles, mis värv parasjagu LED-il on — iga kord, kui lamp uuesti sisse lülitatakse, muutub värv (nt punane, roheline, sinine).lastButtonState salvestab nupu eelmise oleku, et korrektselt tuvastada vajutusi — nii ei lülitu lamp kogemata mitu korda järjest sisse-välja, kui nuppu hoitakse all.
if (lastButtonState == HIGH && currentButtonState == LOW) {
isOn = !isOn;
if (isOn) {
colorMode = (colorMode + 1) % 3; // Переключаем цвет
if (lastButtonState == HIGH && currentButtonState == LOW)
- See tähendab: «Kas nupp just vajutati alla?»
- Kui eelmises tsüklis (
lastButtonState) nupp polnud all (HIGH),
aga praegu (currentButtonState) on all (LOW),
siis kasutaja just vajutas nuppu. - Seda nimetatakse nupu serva tuvastamiseks («edge detection»).
isOn = !isOn;
- Kui nuppu vajutati, muudame lambi olekut:
- Kui ta oli
false(väljas), saabtrue(sisse) - Kui ta oli sees, saab välja
- Kui ta oli
!isOntähendab vastupidist väärtust — sisse/välja lülitamine
if (isOn) { colorMode = (colorMode + 1) % 3; }
- Kui lamp läks just sisse, siis:
- Värv muutub —
colorModesuureneb ühe võrra. % 3tähendab, et loendur käib ringi: 0 → 1 → 2 → 0 → …
- Värv muutub —
