Включение светодиода кнопкой Ардуино можно осуществить различными способами — можно управлять светодиодом одной или двумя кнопками, а можно плавно менять яркость светодиода.
Рассмотрев представленные скетчи, вы сможете использовать в своих проектах тактовые кнопки для управления Ардуино.
Включение и выключение светодиода кнопкой Ардуино производится с помощью подключения одной тактовой кнопки к цифровому пину без подтягивающего резистора. Дело в том, что платы Arduino имеют встроенные резисторы, которыми можно управлять. Для этого следует использовать в pinMode() параметр INPUT_PULLUP, которая сконфигурирует пин на вход с подтягивающим резистором.
Обратите внимание, что при использовании INPUT_PULLUP происходит подтяжка цифрового входа к 5 вольтам, поэтому значение входящего сигнала будет инвертирован.
То есть, при отпущенной кнопке, которая подключена к заземлению — GND, на цифровом входе будет высокий сигнал. При нажатии на кнопку — на входе, который сконфигурирован с помощью INPUT_PULLUP, будет низкий сигнал.
20 способов помигать светодиодом на Arduino
Для переключения светодиода кнопкой Ардуино соберите схему: один контакт кнопки на пин 2, второй на GND. Светодиод подключите на пин 10 и GND (не забудьте про резистор к светодиоду 220 Ом).
Обратите внимание, что тактовая кнопка на макетной плате подключена к микроконтроллеру без подтягивающего резистора.
Пин 2 подключен к 5V через встроенный резистор, поэтому при отпущенной кнопке на входе пине 2 будет высокий уровень сигнала, а при нажатии кнопки будет низкий уровень..
Скетч. Управление светодиодом Ардуино через кнопку
boolean buttonWasUp = true; boolean ledEnabled = false; void setup() < pinMode(10, OUTPUT); // определяем пин 10 как выход pinMode(2, INPUT_PULLUP); // определяем пин 2 как вход и подтягиваем его >void loop() < // узнаем, отпущена ли кнопка сейчас boolean buttonIsUp = digitalRead(2); // если кнопка была отпущена и не отпущена сейчас if (buttonWasUp !buttonIsUp) < // исключаем дребезг контактов тактовой кнопки delay(10); // и считываем сигнал с кнопки снова buttonIsUp = digitalRead(2); // если кнопка нажата, то переворачиваем сигнал светодиода if (!buttonIsUp) < ledEnabled = !ledEnabled; digitalWrite(10, ledEnabled); >> // запоминаем состояние кнопки для новой итерации buttonWasUp = buttonIsUp; >
Пояснения к коду:
- boolean — это глобальная переменная Ардуино, которая может принимать всего два значения – true (истина) и false (ложь);
- задержка delay(10); в программе позволяет избежать «дребезг контактов» кнопки и исключить ложное срабатывание.
Скетч. Управление двумя кнопками одним светодиодом
(кнопки на пин 2 и пин 4, светодиод пин 10)
boolean button1WasUp = true; boolean button2WasUp = true; void setup() < pinMode(10, OUTPUT); digitalWrite(10, LOW); pinMode(2, INPUT_PULLUP); pinMode(4, INPUT_PULLUP); >void loop() < // узнаем, отпущены ли две кнопки сейчас boolean button1IsUp = digitalRead(2); boolean button2IsUp = digitalRead(4); // если кнопка 1 была отпущена и не отпущена if (button1WasUp !button1IsUp) < delay(10); // повторно считываем сигнал с кнопки 1 button1IsUp = digitalRead(2); if (!button1IsUp) < digitalWrite(10, LOW); >> // если кнопка 2 была отпущена и не отпущена if (button2WasUp !button2IsUp) < delay(10); // повторно считываем сигнал с кнопки 2 button2IsUp = digitalRead(4); if (!button2IsUp) < digitalWrite(10, HIGH); >> // запоминаем состояние двух кнопок ардуино button1WasUp = button1IsUp; button2WasUp = button2IsUp; >
Пояснения к коду:
- данный пример программы позволяет включать светодиод нажатием одной кнопки и выключать светодиод нажатием второй кнопки;
- Задержка Ардуино delay(10); позволяет избежать «дребезг контактов» кнопки и исключить возможность ложного срабатывания.
Источник: xn--80aanbzjgivicdg0b3l.xn--p1ai
Как мигать светодиодом на Ардуино: 3 варианта
Программирование
На чтение 6 мин Просмотров 593 Опубликовано 23.01.2023
Казалось бы, что может быть проще, чем мигание светодиода?
На первый взгляд, это мигание светодиодом является бесполезным и никакой практической пользы априори принести не может. Однако начнем эту статью именно с разъяснения этого вопроса. Например, вы пишете код для какого-либо устройства, но у его микроконтроллера недостаточно требуемых портов ввода и вывода.
В целях экономии вы приобрели самую дешевую плату, или же требуется эргономичность устройства. Вы не стали устанавливать дисплей для сигнализирования успешного выполнения какой либо программы, передачи данных о режиме работы или мониторинга каких либо показаний. Но получать какую либо информация о том, что программа выполнилась успешно или произошла ошибка просто необходимо. Для подобных целей можно использовать светодиод в качестве показателя какого-то состояния.
В данной статье рассмотрим множество способов и вариаций программы, выполняющей мигание диодом.
В целом, программа мигания светодиодом является одной из первых, которую осваивают при изучении Ардуино. Многие контроллеры уже имеют в своей памяти простейшую основу кода мигания светодиода с завода.
то же самое, но с использованием пинов:
void setup()
void loop()
digitalWrite(13,HIGH);
delay(500);
digitalWrite(13,LOW);
delay(500);
>
Также, данную программу можно написать с использованием флагов, чем мы упростим ее:
void setup()
boolean flag = 0;
void loop()
digitalWrite(13, flag = !flag);
delay(500);
>
Мигание светодиодом с использованием функции digitalRead. Подадим любое значение на пин, а затем прочитаем его:
Команду “мигать” светодиоду можно дать без использования встроенных функций библиотеки Arduino:
В следующей программе просим светодиод мигать при помощи счетчика:
void setup()
volatile uint32_t top = 50000;
volatile uint32_t counter = 0;
ISR(EE_READY_vect)
EECR |= (1
if (++counter >= top)
counter = 0;
digitalWrite(13, !digitalRead(13));
>
>
Прицепим тон на 2 и 5 пин, затем подключим внешнее аппаратное прерывание и создадим счетчик:
void setup()
uint32_t count = 0;
void isr()
if (++count >= 10)
count = 0;
digitalWrite(13, !digitalRead(13));
>
>
Воспользуемся функцией Assembler Jump(asm volatile (“jmp 0x0000”)) для возврата в начало команды без сбрасывания регистров(выходных данных):
void setup()
void loop()
>
Подсоединяем к любом пинам тон, затем после задержки читаем состояние пина:
#include
void setup()
byte state = EEPROM.read(0);
void loop()
>
От автора: Советую остановить свое изучение данной темы на этом моменте, поскольку все, что идёт далее-нужно скорее всего не радиолюбителям, а тем, кто планирует создавать крупные системы типа автосигнализации или RGB подсветки. Дальнейшие действия очень сложны для понимания и требуют очень много времени. К тому же, мощность Ардуино ограничена, возможны различные ошибки из-за недостатка памяти.
Задача с “часами”
Понимаю, что данный способ для понимания довольно сложен, но постараемся донести его. Для начала, мы настраиваем пин как выход. Затем включаем в цикле диод командой SBI, вызываем задержку, после чего “гасим” наш светодиод и вызываем переход с данного цикла. Далее, наш код похож чем то на обычные часы. Когда секундная стрелка делает полный оборот, то минутная-делает небольшой шаг.
void setup()
asm volatile
(
“setup: nt”
“SBI %[DDR], %[PIN] nt” //Настраиваем PIN как выход(PB5 как OUTPUT)
“loop: nt”
“SBI %[PORT], %[PIN] nt” //Включаем диод командой SBI(PB5 в HIGH)
“CALL delay nt” //Задержка
“CBI %[PORT], %[PIN] nt” //”Гасим” светодиод(PB5 в LOW)
“CALL delay nt” //Задержка
«RJMP loop nt» //повторение цикла, Jump с одного на другой
«delay: nt» //
«LDI r16, 0x00 nt»
«LDI r17, 0xD4 nt»
«LDI r18, 0x30 nt»
«delay_loop: nt»
«SUBI r16, 1 nt»
«SBCI r17, 0 nt»
«SBCI r18, 0 nt»
«BRNE delay_loop nt»
«RET nt»
:
: [PORT] «I» (_SFR_IO_ADDR(PORTB)),
[DDR] «I»(_SFR_IO_ADDR(DDRB)),
[PIN] «I»(PB5)
:»r16″, «r17», «r18»
);
>
Обрабатываем битовую матрицу состояния светодиода. Просто делаем “нарастание вспышек”.
Введем несколько состояний светодиода-будем обрабатывать битовую матрицу, уменьшая время срабатывания события до 0.125 секунд и в 1 байт вкладываем 8 битов состояний.
byte modes[] =
0B00000000, //выключен
0B11111111, //постоянно
0B00001111, //Мигание по 0.5 сек
0B00000001, //Короткая вспышка раз в секунду
0B00000101, //Две вспышки раз в секунду
0B00010101, //Три вспышки раз в секунду
0B01010101 //Частые короткие вспышки (4 раза в секунду)
>;
uint32_t ms, ms1 = 0, ms2 = 0;
uint8_t blink_loop = 0;
uint8_t blink_mode = 0;
uint8_t modes_count = 0;
void setup()
void loop()
ms = millis();
// срабатывает 125 мс
if( ( ms — ms1 ) > 125|| ms < ms1 )
ms1 = ms;
// битовая маска используется для поиска состояния
if( blink_mode
blink_loop++;
>
// демонстрация переключения режимов
// меняем эффект раз в 5 сек.
if( ( ms — ms2 ) > 5000|| ms < ms2 )
ms2 = ms;
blink_mode = modes[modes_count++];
if( modes_count >= 7 )modes_count = 1;
>
>
Тоже самое с использованием библиотеки Ticker для платы ESP8266:
uint8_t blink_loop = 0;
uint8_t blink_mode = 0;
uint8_t modes_count = 0;
void timerIsr()
if( blink_mode
blink_loop++;
>
void setup()
void loop()
blink_mode = 0B00001111; //Мигание по 0.5 сек
delay(5000);
blink_mode = 0B00000001; //Короткая вспышка раз в секунду
delay(5000);
blink_mode = 0B00000101; //Две короткие вспышки раз в секунду
delay(5000);
blink_mode = 0B00010101; //Три короткие вспышки раз в секунду
delay(5000);
blink_mode = 0B01010101; //Частые короткие вспышки (4 раза в секунду)
delay(5000);
>
ESP очень чувствителен к прерываниям, в таком случае обязательно сработает таймер WDT, считающий, что на обработку встроенных функций выделяется слишком мало времени.
В целом, общие знания, требуемые для радиолюбителей, объяснены доступно. Надеюсь, что данная статья поможет вам создать ваш уютный уголок, или же создать прибор, способный определить состояние какого либо устройства. Эти программы могут помочь вам создать устройства для проверки какого-либо устройства на работоспособность. К тому же, это заложит основы для создания ампер-,вольт- и мультиметра. В целом, создание подобных устройств не является сложной задачей, которая имеет связь с данной темой.
Источник: arduino-info.ru
Урок 1. Изучаем Ардуино без Arduino. Мигаем светодиодом.
Сегодня начну цикл уроков по программированию Arduino без Arduino. Как такое возможно я рассказывал в статье: TinkerCad Circuits создание схем и Arduino проектов. В предыдущей статье вы найдете краткое описание сервиса и основных возможностей. При создании проекта автоматически добавляется тестовый код, который позволяет мигать встроенным на плату Arduino светодиодом. В данном Arduino уроке подробно на этом останавливаться не будем, а научим мигать внешним светодиодам.
Схема подключения светодиода к Arduino.
Для того чтобы сделать Arduino урок мигание светодиодом, добавим на рабочее поле необходимые элементы и Arduino. Соединим все по схеме.
Если у вас возникли сложности при сборке схемы, посмотрите видео. А также подробно про сборку схем рассказывал вот тут.
Справочник языка Arduino.
Схема к уроку 1. Arduino и Мигающий светодиод, собрана. Можно перейти к редактированию кода, но для этого нужно знать, что обозначает каждая строчка кода. В этом нам поможет справочник языка Ардуино. Я иногда буду ссылаться на сайт Portal-PK,- это мой второй сайт, и часть информации присутствует на нем.
Справочником языка Arduino можно пользоваться и на данном сайте, тут он сделан немного по другому.
Разбираем код Arduino урока.
Изменим код так, чтобы мигал наш светодиод. В коде используются две обязательные функции:
Функция setup() вызывается, когда стартует скетч, и используется для инициализации переменных, определения режимов работы выводов, запуска используемых библиотек и т.д. Функция setup запускается только один раз, после каждой подачи питания или сброса платы Arduino.
После вызова функции setup(), которая инициализирует и устанавливает первоначальные значения, функция loop() делает точь-в-точь то, что означает её название, и крутится в цикле, позволяя вашей программе совершать вычисления и реагировать на них. Используйте её для активного управления платой Arduino.
Внутри функции setup() написана функция:
pinMode() Устанавливает режим работы заданного вход/выхода(pin) как входа или как выхода.
- pin: номер вход/выхода(pin), который Вы хотите установить
- mode: режим одного из двух значений — INPUT или OUTPUT, устанавливает на вход или выход соответственно.
В бесконечном цикле loop() Располагаются две функции:
Функция digitalWrite() подает HIGH или LOW значение на цифровой выход (pin).
Если выход был установлен в режим выход (OUTPUT) функцией pinMode(), то для значения HIGH напряжение на соответствующем выходе будет 5В, и 0В(земля) для LOW.
Функция delay() останавливает выполнение программы на заданное в параметре количество миллисекунд (1000 миллисекунд в 1 секунде).
Как видим из примера, у нас бесконечное количество раз выполняется код:
digitalWrite(2, HIGH); // включаем светодиод delay(500); // ждем 1000 millisecond(s) или 1 секунду digitalWrite(2, LOW); // выключаем светодиод delay(500); // ждем 1000 millisecond(s) или 1 секунду.
Сперва, мы включаем светодиод, затем ждем 1 секунду. После выключаем светодиод и опять ждем 1 секунду, и так бесконечное количество раз, пока подается напряжение на Arduino.
Загружаем код в Arduino UNO.
Если у вас есть в наличии Arduino UNO, можно подключить всё по схеме, которую рассматривали выше, и загрузить код в отладочную плату Arduino. Для этого достаточно скопировать код и вставить его в Arduino IDE.
Для Arduino урока мигаем светодиодам понадобиться:
- Arduino UNO или Arduino Nano
- Плата макетная беспаечная
- Резистор 220 ОМ
- Соединительные провода папа-папа
- Светодиод 3 или 5 мм.
Что такое Arduino и как пользоваться данной программой вы можете прочитать тут.
После того, как вы подключили Ардуино к компьютеру, необходимо выбрать плату и порт, к которому подключена Arduino UNO.
Затем нажимаем на кнопку «Загрузить», после чего вы увидите надпись «Загрузка завершена».
На первый взгляд, все достаточно просто, но, если разобраться со всеми мелочами, то даже мигание светодиодом достаточно интересная задача, которая открывает перед вами дверь в освоение программно аппаратного комплекса Arduino.
Понравился урок 1, мигание светодиодом? Не забудь поделиться с друзьями в соц. сетях.
А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.
Спасибо за внимание!
Технологии начинаются с простого!
Источник: arduino-tex.ru