Katse Nuppude ja Slideswitch’i kasutamise võimalus
3.1

// C++ code
//
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 ( переменные для сохранения состояния кнопок)
// Поскольку кнопки имеют только два состояния (нажаты и не нажаты) мы будем
// работать с ними используя цифровые порты ввода. Для того чтобы считывать
// digitalRead() функция позволяет получить один параметр с цифрового порта и возвратить либо HIGH (+5V), либо LOW ("0").
button1State = digitalRead(button1Pin);// salvestame muutujasse nupu hetke väärtuse
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); // süütame LEDi (включаем светодиод)
}
else
{
digitalWrite(ledPin, LOW); // kustutame LEDi (выключаем светодиод)
}
}
3.2

// C++ code
//
const int sensorPin = 0;
const int ledPin = 9;
int lightLevel, high = 0, low = 1023; // создадим глобальные переменные для уровней яркости high (высокий), low (низкий):
void setup()
{
pinMode(ledPin, OUTPUT);
Serial.begin(9600); // //Serial monitori seadistamine (для отладки, чтобы увидеть показания датчиков)
}
void loop()
{
// Диапазон чисел с которыми работает функция analogRead() находится в пределах от 0 (0 вольт) и 1023 (5 вольт).
// Но! Управлением яркостью светодиода занимается функция analogWrite(), она использует диапазон от от 0 до 255.
lightLevel = analogRead(sensorPin); //loeme mõõdetud analoogväärtuse
// Эту проблему можно решить с помощью двух полезных функций под названием map() и constrain():
// Функция map() может преобразовывать один диапазон значений в другой. К примеру - мы указываем map() в параметрах, диапазон "из" 0-1023 "в" 0-255, она преобразует первый больший диапазон во второй, более мелкий.
// Поскольку map() может столкнуться с числами за пределами диапазона, скажем или больше, или меньше, или даже с отрицательными.
// Поэтому нужно за ранее подготовиться к такому повороту событий, для этого можно, и даже нужно использовать еще одну функцию - constrain().
// Функция constrain() проверит содержится ли число в заданном диапазоне.
// Если число выше диапазона, он будет уменьшено до самого большого, а если число ниже диапазона, он будет увеличенно до самого низкого
// Пример: если constrain() столкнулось с числами 1024, 1025, 1026.., она их преобразует в 1023, 1023, 1023..). С отрицательными числами она сделает тоже самое, т.е все отрицательные станут 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) // если уровень "lightLevel" меньше 1023, то присвоим
{
low = lightLevel; // теперь самым "низким" ~ 800
}
if (lightLevel > high)
{
high = lightLevel;
}
lightLevel = map(lightLevel, low+0, high-30, 0, 255);
lightLevel = constrain(lightLevel, 0, 255);
}
Ölammp
Töö kirjeldus:
Potentsiomeetriga sisse-välja lülituv öölamp. Kui see on sisse lülitatud, reageerib see valgusele: kui tume on sisse lülitatud, kui valgus on välja lülitatud.
Komponendid:
Arudino Uno
Takisti (2)(330 Om ja 10kOm)
Juhtmed (9)
1 LEDi
PotentsiomeetrValgustakisti
https://www.tinkercad.com/things/5MVnhZCDnv5?sharecode=iSm-UTltX-rbzO5Wk244V_7-TdEopayw4SbD61DH5Xo

Tööpõhimõte:
Sellel öövalgusel on kaks režiimi: sisse-ja väljalülitamine.
Kui see on sisse lülitatud, ei tohi ükski tuli sellele langeda, et valgus süttiks. Kui valgus tabab seda, siis pirn ei paista.
Kuidas seda kasutada saab?
Seda saab kasutada valgustamiseks lastetubades või pimedates ruumides.
Programm:
// C++ code
//
int sensorRes = 0;
int sensorPoten = 1;
int sensorPotenValue = 0;
int ledPin = 8;
int lightLevel, high = 0, low = 1023;
int value_new;
void setup()
{
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop()
{
sensorPotenValue=analogRead(sensorPoten);
value_new=map(sensorPotenValue,0,1023,1,2);
if (value_new==2)
{
on2();
}
else
{
off();
}
}
void on ()
{
sensorPotenValue = analogRead(sensorPoten);
lightLevel = analogRead(sensorRes);
if (lightLevel < low)
{
low = lightLevel;
}
if (lightLevel > high)
{
high = lightLevel;
}
lightLevel = map(lightLevel, low+0, high-30, 0, 255);
lightLevel = constrain(lightLevel, 0, 255);
analogWrite(ledPin, lightLevel);
Serial.print(lightLevel);
Serial.println("");
}
void on2()
{
sensorPotenValue = analogRead(sensorPoten);
lightLevel = analogRead(sensorRes);
lightLevel = map(lightLevel, 300, 800, 0, 255);
lightLevel = constrain(lightLevel, 0, 255);
analogWrite(ledPin, lightLevel);
Serial.print(lightLevel);
Serial.println("");
}
void off()
{
digitalWrite(ledPin, LOW);
}