Your cart is currently empty!


♦
Jekaterina Guzek, Õpimapp / Portfolio
В этом Arduino-проекте используется две кнопки, которые управляют светодиодом.
💡 Логика простая: если нажата только одна кнопка (любая), светодиод загорается.
Если нажаты ни одной — светодиод выключен.
Компоненты:
Схема:
Код:
// Nuppud.
// -----Kood-----
const int button1Pin = 2; // Пин, к которому подключена кнопка 1
const int button2Pin = 3; // Пин, к которому подключена кнопка 2
const int ledPin = 13; // Пин, к которому подключен светодиод
void setup() {
pinMode(button1Pin, INPUT); // Устанавливаем пин кнопки 1 как вход
pinMode(button2Pin, INPUT); // Устанавливаем пин кнопки 2 как вход
pinMode(ledPin, OUTPUT); // Устанавливаем пин светодиода как выход
}
void loop() {
int button1State, button2State; // Переменные для хранения состояния кнопок
button1State = digitalRead(button1Pin); // Считываем состояние кнопки 1 (HIGH или LOW)
button2State = digitalRead(button2Pin); // Считываем состояние кнопки 2
// Если нажата только одна из кнопок (любая одна, но не обе сразу)
if (((button1State == LOW) || (button2State == LOW)) &&
!((button1State == LOW) && (button2State == LOW))) {
digitalWrite(ledPin, HIGH); // Включаем светодиод
} else {
digitalWrite(ledPin, LOW); // Выключаем светодиод
}
}
📌 Этот проект демонстрирует, как можно управлять светодиодом с помощью простого ползункового переключателя. При переключении — лампочка включается или выключается.
Компоненты:
Схема:
Код:
// C++ code
//
int swPin = 4; // Пин кнопки
int ledPin = 10; // Пин светодиода
int switchState = 0; // Переменная для хранения состояния кнопки
void setup() {
pinMode(swPin, INPUT); // Устанавливаем пин кнопки как вход
pinMode(ledPin, OUTPUT); // Устанавливаем пин светодиода как выход
}
void loop() {
switchState = digitalRead(swPin); // Считываем состояние кнопки
if (switchState == HIGH) {
digitalWrite(ledPin, HIGH); // Включаем светодиод, если кнопка нажата
} else {
digitalWrite(ledPin, LOW); // Выключаем светодиод, если кнопка не нажата
}
}
🧠 Как работает
HIGH
) — загорается светодиод.LOW
) — светодиод не горит.Этот проект демонстрирует, как фоторезистор может управлять яркостью светодиода.
💡 Чем темнее — тем ярче светит лампа. Чем светлее — тем тусклее.
Компоненты:
Схема:
Код:
const int sensorPin = 0; // Пин, к которому подключён фоторезистор (аналоговый вход A0)
const int ledPin = 9; // Пин, к которому подключён светодиод (ШИМ выход)
int lightLevel, high = 0, low = 1023; // переменные для измерения освещённости, max и min значений
void setup() {
pinMode(ledPin, OUTPUT); // Устанавливаем пин светодиода как выход
Serial.begin(9600); // Настраиваем монитор порта (скорость 9600 бод)
}
void loop() {
// analogRead() возвращает значение от 0 (0 В) до 1023 (5 В)
// analogWrite() управляет ШИМ (яркостью светодиода) от 0 (выключен) до 255 (максимально яркий)
lightLevel = analogRead(sensorPin); // Считываем аналоговое значение освещённости
// Вариант ручной настройки диапазона освещения
manualTune();
// Вариант автоматической калибровки (если хочешь — раскомментируй строку ниже)
// autoTune();
analogWrite(ledPin, lightLevel); // Устанавливаем яркость светодиода в зависимости от уровня света
// Если хочешь, чтобы светодиод загорался при темноте, замени на:
// analogWrite(ledPin, 255 - lightLevel);
Serial.print(lightLevel); // Выводим уровень освещённости в монитор порта
Serial.println(""); // Переход на новую строку
delay(1000); // Задержка 1 секунда
}
// ----- Ручная настройка границ яркости -----
void manualTune() {
// Преобразуем значение света из диапазона 300–800 в 0–255
// 300 — темно (будет 0), 800 — светло (будет 255)
lightLevel = map(lightLevel, 300, 800, 0, 255);
// Ограничиваем результат диапазоном от 0 до 255
lightLevel = constrain(lightLevel, 0, 255);
}
// ----- Автоматическая калибровка границ -----
void autoTune() {
// Если текущий уровень света меньше минимального — обновляем low
if (lightLevel < low) {
low = lightLevel;
}
// Если текущий уровень света больше максимального — обновляем high
if (lightLevel > high) {
high = lightLevel;
}
// Преобразуем текущее значение в диапазон 0–255,
// исключая крайние значения для устойчивости (low+10 и high-30)
lightLevel = map(lightLevel, low + 10, high - 30, 0, 255);
// Ограничиваем результат диапазоном от 0 до 255
lightLevel = constrain(lightLevel, 0, 255);
}
🧠 Как работает
Ниже расмотрим код:
const int potPin = A0; // Потенциометр
const int lightSensorPin = A1; // Фоторезистор
const int redPin = 9;
const int greenPin = 10;
const int bluePin = 11;
int lightLevel;
int potValue;
int colorMode;
void setup() {
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
Serial.begin(9600);
}
void loop() {
// Считываем значения
potValue = analogRead(potPin);
lightLevel = analogRead(lightSensorPin);
// Определяем цвет по потенциометру
colorMode = map(potValue, 0, 1023, 0, 4); // 0–3
if (lightLevel < 800) {
// Темно → включаем выбранный цвет
if (colorMode == 0) {
setColor(255, 0, 0);
} else if (colorMode == 1) {
setColor(0, 255, 0);
} else if (colorMode == 2) {
setColor(0, 0, 255);
} else if (colorMode == 3) {
setColor(255, 255, 0);
}
} else {
// Светло → выключаем лампу
setColor(0, 0, 0);
}
// Отладка
Serial.print(" Mode: ");
Serial.println(colorMode);
delay(100);
}
void setColor(int r, int g, int b) {
analogWrite(redPin, r);
analogWrite(greenPin, g);
analogWrite(bluePin, b);
}
const int potPin = A0; // Пин потенциометра
const int lightSensorPin = A1; // Пин фоторезистора
const int redPin = 9; // Пин красного канала RGB
const int greenPin = 10; // Пин зелёного канала RGB
const int bluePin = 11; // Пин синего канала RGB
int lightLevel; // Текущее значение освещённости
int potValue; // Значение с потенциометра
int colorMode; // Режим (0–3), выбранный цвет
Код делиться на несколько блоков
void setup() {
pinMode(redPin, OUTPUT); // Этот пин управляет красным каналом RGB-светодиода.
pinMode(greenPin, OUTPUT); // Этот пин управляет зеленым каналом RGB-светодиода.
pinMode(bluePin, OUTPUT); // Этот пин управляет синим каналом RGB-светодиода.
Serial.begin(9600); // Включает последовательную связь (Serial Monitor) со скоростью 9600 бит/сек.
}
Это функция, которая выполняется один раз при старте Arduino. В ней задаются начальные настройки: направления пинов, скорость обмена с компьютером и другие параметры.
void loop() {
// Считываем значения
potValue = analogRead(potPin);
lightLevel = analogRead(lightSensorPin);
// Определяем цвет по потенциометру
colorMode = map(potValue, 0, 1023, 0, 4); // 0–3
if (lightLevel < 800) {
// Темно → включаем выбранный цвет
if (colorMode == 0) { // Красный
setColor(255, 0, 0);
} else if (colorMode == 1) { // Зелёный
setColor(0, 255, 0);
} else if (colorMode == 2) { // Синий
setColor(0, 0, 255);
} else if (colorMode == 3) { // Жёлтый
setColor(255, 255, 0);
}
} else {
// Светло → выключаем лампу
setColor(0, 0, 0);
}
analogRead(potPin)
— получает значение от потенциометра (0–1023).
analogRead(lightSensorPin)
— получает значение от фоторезистора (0–1023).
map(...)
переводит диапазон 0–1023 в значения 0, 1, 2 или 3.
if (lightLevel < 800) – Если значение с фоторезистора меньше 800 (темно)
setColor(0, 0, 0); – Если значение освещённости 800 или выше, то все цвета отключаются (RGB = 0,0,0).
// Отладка
Serial.print("Mode: ");
Serial.println(colorMode);
delay(100);
}
Для себя чтобы видить значения Mode:
в Serial Monitor
Serial.print()
не делает перехода на новую строку
void setColor(int r, int g, int b) {
analogWrite(redPin, r);
analogWrite(greenPin, g);
analogWrite(bluePin, b);
}
void
— означает, что функция ничего не возвращает.
setColor
— имя функции.
(int r, int g, int b)
— она принимает три параметра:
analogWrite(...)
— отправляет ШИМ-сигнал (PWM) на каждый пин
0
— полностью выключен
255
— максимально яркий
Видео схемы, как работает код на www.tinkercad.com
Так же видео как работает в реальности наш проект ночник