3.1. Katse Nuppude ja Slideswitch’i kasutamise võimalus
1.- Näidis-nupp
// Nuppud.
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
}
}

2.- Näidis- Slideswitch’i kasutamine
// C++ code
//
int swPin=4;
int ledPin=10;
int switchstate=0;
void setup()
{
pinMode(swPin, OUTPUT);
pinMode(ledPin, OUTPUT);
}
void loop()
{
switchstate=digitalRead(swPin);
if(switchstate==HIGH)
{
digitalWrite(ledPin, HIGH);
}
else
{
digitalWrite(ledPin, LOW);
}
}

3.2. Katse Photoresistor
// C++ code
//
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);
}

Задание 3 Öölamp
Состав
1 синий светодиод
2 резистора на 220в и 1 на 10Kq
8 проводов
1 плата ARDUINO UNO
1 кнопка
1 breadboard small
Принцип работы “Ночника”
При высоком уровне света ночник не работает и лампочка не горит, в случае если темнеет лампочка подстраивает яркость с помощью фоторезистора(датчика света) в зависимости от уровня освещения.
Процесс работы над проектом
- Составляем схему “Ночника” На сайте “Tinkercad”.
- Попутно все конспектируем
- Программируем поведение “Ночника”.
- Тестируем
- Собираем “Ночник”
- Переносим рабочий код на плату
- Тестируем прототип
- Фиксируем итог
Схема подключения

Код для “Ночника”
// C++ code
//
const int sensorPin = 0;
const int button1Pin = 2;
const int ledPin = 9;
int lightLevel, high = 0, low = 1023; // Создаем глобальные переменные для уровней яркости high (высокий), low (низкий)
int previousButtonState = LOW; // Переменная для отслеживания предыдущего состояния кнопки
bool lightState = false; // Переменная для отслеживания состояния света
void setup() {
pinMode(button1Pin, INPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600); // Настройка для работы с последовательным портом (для отладки)
}
void light() {
lightLevel = analogRead(sensorPin);
manualTune(); // Ручное изменение диапазона от светлого к темному.
analogWrite(ledPin, lightLevel); // Изменение яркости светодиода в зависимости от уровня освещенности
Serial.print("Light level: ");
Serial.println(lightLevel); // Вывод данных с фоторезистора (0-1023)
}
void manualTune() {
lightLevel = map(lightLevel, 300, 800, 0, 255); // Будет от 300 темно, до 800 (светло).
lightLevel = constrain(lightLevel, 0, 255);
}
void loop() {
int button1State = digitalRead(button1Pin); // Считывание состояния кнопки
if (button1State == HIGH && previousButtonState == LOW) { // Если кнопка нажата и предыдущее состояние не было HIGH
// Переключение состояния света
lightState = !lightState; // Инвертируем состояние света
digitalWrite(ledPin, lightState ? HIGH : LOW); // Включаем или выключаем свет в зависимости от состояния
delay(100); // Задержка для устранения дребезга контактов
}
previousButtonState = button1State; // Обновляем предыдущее состояние кнопки
if (lightState) {
light(); // Если свет включен, читаем и отображаем уровень освещенности
}
}
Демонстрация “Ночника”
Возможности применения
- Регулировка ярковсти света в комнате
- Регулировка мощности чего-либо с зависимостью от уровня света
- Переключение режимов работы устройств с зависимостью от уровня света
- И тому подобное
Новые функции:
Serial.begin()
–
Функция инициирует последовательный обмен данными с микроконтроллером с фиксированной скоростью передачи данных. Она используется для установления соединения между микроконтроллером и компьютером или другими устройствами через последовательный порт (обычно используется для отладки и обмена данными). Перед использованием функций вывода (например, Serial.print()
) необходимо вызвать Serial.begin()
, чтобы установить скорость передачи данных.
analogRead()
–
Функция считывает значение аналогового сигнала с определенного аналогового вывода микроконтроллера. Как правило, микроконтроллеры имеют ограниченное количество аналоговых входов, и analogRead()
позволяет измерять аналоговые значения этих выводов. Значение, возвращаемое этой функцией, находится в диапазоне от 0 до 1023, где 0 соответствует напряжению на выводе, равному 0 В, а 1023 – напряжению, равному опорному напряжению (обычно 5 В).
analogWrite()
–
используется для управления аналоговым выходом, таким как яркость светодиода или скорость мотора, с помощью широтно-импульсной модуляции (ШИМ).