Arduino для начинающих. Урок 2. Подключение кнопки
Продолжаем серию уроков “Arduino для начинающих”. Сегодня подключаем к ардуино кнопку и светодиод (при нажатой кнопке светодиод будет гореть, при отжатой — не гореть). Это одна из базовых схем, которая неоднократно пригодиться вам в будущем и может использоваться для управления роботом на Arduino. В вашем будущем роботе по нажатию кнопки могут происходить самые разные действия.
В посте помимо видео-инструкции приводим листинг программы и схему подключения.
Видео-инструкция сборки модели кнопки на Arduino:
Для сборки модели нам потребуется:
- плата Arduino
- Breadboard
- 5 проводов и/или перемычек «папа-папа»
- светодиод
- кнопка
- резисторы на 10 кОм и 220 Ом.
Схема подключения модели Arduino с кнопкой и светодиодом:
Также вам потребуется программа Arduino IDE, которую можно скачать с сайта Arduino.
Для работы этой модели подойдет следующая программа (программу вы можете просто скопировать в Arduino IDE):
int button = 2;
int led = 8;
void setup() {
pinMode(led, OUTPUT);
pinMode(button, INPUT);
}
void loop(){
if (digitalRead(button) == HIGH) {
digitalWrite(led, HIGH);
}
else {
digitalWrite(led, LOW);
}
}
Так выглядит собранная модель Arduino кнопки со светодиодом:
На этом второй урок «Arduino для начинающих» закончен. Продолжение следует!
Смотрите также:
Учебный курс «Arduino для начинающих»: главная страница.
Посты по урокам:
- Первый урок: Светодиод
- Второй урок: Кнопка
- Третий урок: Потенциометр
- Четвертый урок: Сервопривод
- Пятый урок: Трехцветный светодиод
- Шестой урок: Пьезоэлемент
- Седьмой урок: Фоторезистор
- Восьмой урок: Датчика движения (PIR) и E-mail
- Девятый урок: Подключение датчика температуры и влажности DHT11 или DHT22
Все посты сайта «Занимательная робототехника» по тегу Arduino.
Наш YouTube канал, где публикуются видео-уроки.
Не знаете, где купить Arduino? Все используемые в уроке комплектующие входят в большинство готовых комплектов Arduino, их также можно приобрести по отдельности. Подробная инструкция по выбору здесь. Низкие цены, спецпредложения и бесплатная доставка на сайтах AliExpress и DealExtreme. Если нет времени ждать посылку из Китая — рекомендуем интернет-магазины Амперка и DESSY. Низкие цены и быструю доставку предлагает интернет-магазин ROBstore. Смотри также список магазинов.
Автор: Александр Гагарин
Сергей
02.11.2014
Мне очень понравилось с фоторезистором. А сделайте пожалуйста навесным монтажом.
Вячеслав
28.02.2015
С +5V провод идет на кнопку и через резистор на землю? Это же почти к.з.?
Александр
02.03.2015
Резистор на 10 ком достаточно ограничивает ток.
Констатин
06.03.2015
Добрый день!
Подскажите пожалуйста уже 100500 раз собирал эту схему у вас в видео светодиод не горит, а после нажатия кнопки горит, у меня он горит всегда только после нажатия кнопки он горит чуть ярче. в чем может быть дело?
Занимательная робототехника
07.03.2015
Добрый день. Если просто соединить выводы кнопки через резистор с пином контроллера и землей, то это не работает. При нажатии кнопки пин соединяется с землей, и digitalRead будет считывать логический 0, но при отпущенной кнопке пин не будет соединен ни с какой линией и будет «висить в воздухе», и программа будет считать с вывода и 0 и 1 случайным образом. Правильное подключение предполагает, что в разомкнутом состоянии пин должен быть соединен через резистор с шиной питания, а в замкнутом — с землей, либо наоборот. Попробуйте и так, и так.
Внутри микроконтроллера есть подтягивающие резисторы. Но они могут быть программно включены или выключены. Попробуйте включить и выключить подтягивающие резисторы программно.
После того, как пин установлен в режим входа, чтобы включить на нем подтягивающий резистор нужно «записать в него 1» с помощью digitalWrite.
void setup() {
pinMode(8, OUTPUT);
pinMode(2, INPUT);
digitalWrite(2, HIGH); //включаем подтягивающий резистор
}
void loop() {
digitalWrite(8, !digitalRead(2));
}
Макс
24.02.2019
int LED=0;
void setup() {
pinMode(13, OUTPUT);
pinMode(5, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
bool x=digitalRead(5);
delay(200);
if (x ==false)
{
Serial.print(«Кнопка нажата! «);
if(LED ==1)
{ digitalWrite(13, LOW); LED=0; Serial.println(» Свет выключен! «);}
else{digitalWrite(13,HIGH); LED=1; Serial.println(» Свет включен! «);}
}
}
Марина
04.10.2016
Была такая же проблема, долго не понимала в чем дело.
Оказалось, просто не до конца воткнула кнопку :)
Михаил
15.05.2015
Что нужно изменить в вашем коде, чтобы было так :
нажал на кнопку один раз — лампочка включилась,
нажал второй раз — выключилась… и так далее.. ?
Денис
19.05.2015
Есть множество вариантов решения данной задачи. Например такой:
const int buttonPin = 2;
const int ledPin = 13;
void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
}
void loop() {
digitalRead(buttonPin);
while(!digitalRead(buttonPin)){}
digitalWrite(ledPin, HIGH);
while(digitalRead(buttonPin)){}
while(!digitalRead(buttonPin)){}
digitalWrite(ledPin, LOW);
while(digitalRead(buttonPin)){}
}
Роман
30.05.2015
Здравствуйте, можно ли void loop() построчно комментарий?
Занимательная робототехника
30.05.2015
void loop() {
digitalRead(buttonPin); //считываем значение с кнопки
while(!digitalRead(buttonPin)){} //пока кнопка не нажата ждем
digitalWrite(ledPin, HIGH); //включаем светодиод
while(digitalRead(buttonPin)){} //пока кнопка еще нажата ждем
while(!digitalRead(buttonPin)){}//пока кнопка не нажата ждем
digitalWrite(ledPin, LOW); //выключаем светодиод
while(digitalRead(buttonPin)){} //пока кнопка еще нажата ждем
}
То есть: ждем нажатия кнопки и включаем светодиод, затем ждем отжатия кнопки и повторного нажатия, выключаем светодиод, ждем отжатия кнопки.
Толик
13.10.2016
ошибки выдаёт с воид лупом чёта
Youjinn
21.10.2016
Подскажите что может быть, заюзал ваш код для кноки, все вроде работает но на 5-6 нажатия когда светодиод должен выключаться он горит, или должен гореть — выключаеться. В общем не 100% получаеться связь между кнопкой и светодиодом. Иногда проскакивает
Денис
19.05.2015
или можно запустить образец из digital -> debounce
он делает то же самое
Вячеслав
30.06.2015
Здравствуйте подскажите что нужно добавить в скейч что б алгоритм работы был таков: 2 кнопки Одно нажатие на кнопку 1 светодиод загорается горит 5 сек и затухает,если нажать на вторую то светик сразу гаснет??
/*
intledPin = 12;
int buttonApin = 8;
int buttonBpin = 7;
byte leds = 0;
void setup()
{
pinMode(ledPin, OUTPUT);
pinMode(buttonApin, INPUT_PULLUP);
pinMode(buttonBpin, INPUT_PULLUP);
}
Void loop()
{
if (digitalRead(buttonApin) == LOW)
{
digitalWrite(ledPin, HIGH);
delay(5000);
digitalWrite(12, LOW);
}
if (digitalRead(buttonBpin) == LOW)
{
digitalWrite(ledPin, LOW);
}
}
Занимательная робототехника
30.06.2015
Ваш скетч не работает, потому что программа выполняет delay(5000), в этот момент ничего больше выполняться не может.
Можно использовать функцию millis(), возвращающую, сколько миллисекунд прошло с начала работы программы.
int ledPin = 12;
int buttonApin = 8;
int buttonBpin = 7;
void setup()
{
pinMode(ledPin, OUTPUT);
pinMode(buttonApin, INPUT_PULLUP);
pinMode(buttonBpin, INPUT_PULLUP);
}
void loop()
{
unsigned long currentMillis = 0;
if (digitalRead(buttonApin) == LOW)
{
digitalWrite(ledPin, HIGH);
currentMillis = millis();
}
if (digitalRead(buttonBpin) == LOW || millis()-currentMillis>5000)
{
digitalWrite(ledPin, LOW);
}
}
Вячеслав
01.07.2015
Спасибо что так быстро ответили но что то не получается( Выдает ошибку!
Занимательная робототехника
03.07.2015
В синтаксисе ошибки нет. Распишите ситуацию подробнее. Какая ошибка выдается?
Антон
08.08.2015
Помогите пожалуйста. 100 раз все проверил — светодиод не загорается. Такое ощущение, что не идет питание 5V с платы. Как можно просто диагностировать эту неисправность?
Денис
10.08.2015
Во-первых, нужно убедиться, что пины правильные. Далее, лучше всего проверить мультиметром.
Еще для простоты можно светодиод воткнуть напрямую к 5в и земле. Если будет гореть (может и взорвется), то питание идет и проблема в подключении.
Чтобы проверить подключение собственно кнопки можно загрузить код
int pushButton = 2;
void setup() {
Serial.begin(9600);
pinMode(pushButton, INPUT);
}
void loop() {
int buttonState = digitalRead(pushButton);
Serial.println(buttonState);
delay(100);
}
И зайти в монитор порта. Если выдает при нажатии 1, то кнопка работает.
Михаил
11.08.2015
Почему не удаётся плавно запустить светодиод?
//Свет плавно загорается после нажатия кнопки, кнопка нажимается ещё раз, свет моргает и гаснет.
int button = 2;
int led = 9;
int i = 0;
void setup() {
pinMode(led, OUTPUT);
pinMode(button, INPUT);
}
void loop() {
digitalRead(button); //считываем значение с кнопки
while(!digitalRead(button)){} //пока кнопка не нажата ждем
do{
analogWrite(led, i);
i = i+1;
}
while(i==255);//включаем светодиод плавно
digitalWrite(led, HIGH); //включаем светодиод
while(digitalRead(button)){} //пока кнопка еще нажата ждем
while(!digitalRead(button)){}//пока кнопка не нажата ждем
digitalWrite(led, LOW);//моргаем несколько раз
delay(100);
digitalWrite(led, HIGH);
delay(100);
digitalWrite(led, LOW);
delay(100);
digitalWrite(led, HIGH);
delay(100);
digitalWrite(led, LOW);
delay(100);
digitalWrite(led, HIGH);
delay(100);
digitalWrite(led, LOW); //выключаем светодиод
while(digitalRead(button)){} //пока кнопка еще нажата ждем
}
Денис
11.08.2015
Во-первых, неправильный цикл (http://arduino.ru/Reference/DoWhile), во-вторых, после каждого увеличения i нудно поставить delay
Михаил
11.08.2015
Благодарю, Денис! Сейчас въехал, у меня проверка условия была не верна. Сделал вот так, сейчас всё красиво.
//Свет плавно загорается после нажатия кнопки, кнопка нажимается ещё раз, свет моргает и гаснет.
int button = 2;
int led = 9;
int i = 0;
void setup() {
pinMode(led, OUTPUT);
pinMode(button, INPUT);
}
void loop() {
digitalRead(button); //считываем значение с кнопки
while(!digitalRead(button)){} //пока кнопка не нажата ждем
do
{
analogWrite(led, i);
i = i+1;
delay(10);
} while(i<100);//включаем светодиод плавно медленно
do
{
analogWrite(led, i);
i = i+1;
delay(5);
} while(i<200);//включаем светодиод плавно средне
do
{
analogWrite(led, i);
i = i+1;
delay(1);
} while(i<255);//включаем светодиод плавно быстро
i = 0;//обнуление счётчика
digitalWrite(led, HIGH); //включаем светодиод
while(digitalRead(button)){} //пока кнопка еще нажата ждем
while(!digitalRead(button)){}//пока кнопка не нажата ждем
digitalWrite(led, LOW);//моргаем несколько раз
delay(100);
digitalWrite(led, HIGH);
delay(100);
digitalWrite(led, LOW);
delay(100);
digitalWrite(led, HIGH);
delay(100);
digitalWrite(led, LOW);
delay(100);
digitalWrite(led, HIGH);
delay(100);
digitalWrite(led, LOW); //выключаем светодиод
while(digitalRead(button)){} //пока кнопка еще нажата ждем
}
Влад
19.10.2015
Объясните пожалуйста неучу=) кнопка соединена с с +5v и с землей через резистор. Зачем вообще нужно соединять с землей кнопку? Может я что то недопонимаю в принципе работы кнопки?
Занимательная робототехника
20.10.2015
Когда кнопка разомкнута, то если не было бы резистора, то на вход могли бы поступать хаотичные сигналы вместо ожидаемого нами отсутствия напряжения. Можно встретить терминологию «оставить вход в «подвешенном» состоянии». Причина — шумы, образующиеся вокруг провода производят электричество из электромагнитных волн среды.
Стягивающий резистор рядом со входом гарантирует отсутствие напряжения при разомкнутой цепи (кнопка не нажата — цепь разомкнута).
sergey
15.11.2015
Подтягивающий резистор всегда ставится к +5в а тут наоборот . Почему? Почему не используется внутренний подтягивающий резистор?
Ренат
29.11.2015
Здравствуйте.Как можно проделать этот алгоритм .По кнопке меняется режим скорости переключения диодов (5с 2c 1c 0.5c)
ЗёБрА
04.12.2015
Подскажите как создать светильник из ARDUINO UNO У меня набор «Матрёшка» НО он выводит ОЩИБКЮ!!!!! когда вожу код
Владимир
20.01.2016
Скажите пожалуйста, насколько я понимаю, перед записью нового кода, нужно удалить старый с памяти платы. Как это сделать?
Занимательная робототехника
20.01.2016
Нет, не верно. Просто загружаете новый скетч с помощью Arduino IDE
Александр
28.01.2016
помогите пожалуйста
нужно чтобы при зажатии кнопка тоесть нажал и не отпускаеш
загорелся светодиод и проигрался на mini MP3 1 трек и мр3 выключился а светодиод продолжал гореть если отпустить кнопку то все должно выключится
у меня просто получается что Mp3 гоняет один трек по кругу и я не совсем понимаю как мр3 должен выйти из цикла
#include
#include
int switchPin = 9;
int ledPin = 7;
void setup()
{
Serial.begin (9600);
mp3_set_serial (Serial);
mp3_set_volume (5);
delay (100);
pinMode (switchPin, INPUT);
pinMode (ledPin, OUTPUT);
}
void loop()
{
if (digitalRead(switchPin) == HIGH)
{
digitalWrite(ledPin, HIGH);
}
else
{
digitalWrite(ledPin, LOW);
}
if (digitalRead(switchPin) == HIGH)
{
delay(500);
mp3_play(1);
delay(5000);
mp3_stop();
}
else
mp3_stop();
}
Денис
30.01.2016
Т.е. проблема в том, что если кнопка зажата то мп3 должен проиграть мелодию и после этого остановиться, а сейчас при зажатии трек повторяется?
Александр
28.01.2016
как мне выйти из цикла только для mp3 не совсем понимаю
ромча
06.03.2016
very very veryveryvery GOOD!
пРЕКРАСНО
Alex
16.03.2016
Почему то малое напряжение если подключать на одну нагрузку несколько управляющих кнопок, светодиод включается но напряжение 1,3 вольта.
int led_1 = 2;
int led_2 = 3;
int led_3 = 4;
int led_4 = 5;
int button_1 = 6;
int button_2 = 7;
int button_3 = 8;
int button_4 = 9;
int button_5 = 10;
int button_6 = 11;
int button_7 = 12;
int button_8 = 13;
int button_9 = A0;
int button_10 = A1;
int button_11 = A2;
int button_12 = A3;
int button_13 = A4;
int button_14 = A5;
void setup()
{
Serial.begin(9600);
Serial.println();
pinMode(led_1, OUTPUT);
pinMode(led_2, OUTPUT);
pinMode(led_3, OUTPUT);
pinMode(led_4, OUTPUT);
pinMode(button_1, INPUT);
pinMode(button_2, INPUT);
pinMode(button_3, INPUT);
pinMode(button_4, INPUT);
pinMode(button_5, INPUT);
pinMode(button_6, INPUT);
pinMode(button_7, INPUT);
pinMode(button_8, INPUT);
pinMode(button_9, INPUT);
pinMode(button_10, INPUT);
pinMode(button_11, INPUT);
pinMode(button_12, INPUT);
pinMode(button_13, INPUT);
pinMode(button_14, INPUT);
}
void loop()
{
if (digitalRead(button_1) == HIGH)
{
digitalWrite(led_1,HIGH);
}
else
{
digitalWrite(led_1,LOW);
}
if (digitalRead(button_2) == HIGH)
{
digitalWrite(led_2,HIGH);
}
else
{
digitalWrite(led_2,LOW);
}
if (digitalRead(button_3) == HIGH)
{
digitalWrite(led_3,HIGH);
}
else
{
digitalWrite(led_3,LOW);
}
if (digitalRead(button_4) == HIGH)
{
digitalWrite(led_4,HIGH);
}
else
{
digitalWrite(led_4,LOW);
}
//**************************************
if (digitalRead(button_5) == HIGH)
{
digitalWrite(led_1,HIGH);
}
else
{
digitalWrite(led_1,LOW);
}
if (digitalRead(button_6) == HIGH)
{
digitalWrite(led_2,HIGH);
}
else
{
digitalWrite(led_2,LOW);
}
if (digitalRead (button_7) == HIGH)
{
digitalWrite(led_3,HIGH);
}
else
{
digitalWrite(led_3,LOW);
}
if (digitalRead (button_8) == HIGH)
{
digitalWrite(led_4,HIGH);
}
else
{
digitalWrite(led_4,LOW);
}
//**********************************
if (digitalRead (button_9) == HIGH)
{
digitalWrite(led_1,HIGH);
}
else
{
digitalWrite(led_1,LOW);
}
if (digitalRead (button_10) == HIGH)
{
digitalWrite(led_2,HIGH);
}
else
{
digitalWrite(led_2,LOW);
}
if (digitalRead (button_11) == HIGH)
{
digitalWrite(led_3,HIGH);
}
else
{
digitalWrite(led_3,LOW);
}
if (digitalRead (button_12) == HIGH)
{
digitalWrite(led_4,HIGH);
}
else
{
digitalWrite(led_4,LOW);
}
//**********************************
if (digitalRead (button_13) == HIGH)
{
digitalWrite(led_1,HIGH);
}
else
{
digitalWrite(led_1,LOW);
}
if (digitalRead (button_14) == HIGH)
{
digitalWrite(led_3,HIGH);
}
else
{
digitalWrite(led_3,LOW);
}
}
Макс
31.08.2016
Подскажите мне не грамотному, как в уроке № 2, где собирают кнопку+диод, как модифицировать схему, чтобы нажимаешь на кнопку и диод продолжает гореть, еще раз нажимаешь диод гаснет. В исходном решении нажимаешь — горит, отпускаешь гаснет. Спасибо
Игорь
25.10.2016
Посмотри уроки Джереми Блюма. На ютубе есть с нормальным переводом от Амперки
Дмитрий
26.10.2016
Помогите пожалуйста моя идея работы скетча такая : один раз нажмешь на кнопку и все 6 светодиодов приемом бегущего огонька работают все время пока не нажмешь второй раз кнопку. Если второй раз нажать на кнопку то они перестают работать.
int button = 10;
int led = 2;
void setup() {
int pin = 2;
for (pin = 2 ; pin <= 7 ; pin = pin + 1) {
pinMode ( pin , OUTPUT) ;
}
pinMode(led, OUTPUT);
pinMode(button, INPUT);
bool flag = false;
}
int delay_len = 20 ;
void loop() {
if (button == 1) {
for (pin = 2 ; pin <= 7 ; pin = pin + 1) {
blink (pin);
}
void blink ( int pin ) {
digitalWrite ( pin, HIGH ) ;
delay ( delay_len );
digitalWrite ( pin, LOW ) ;
delay ( delay_len );
}
}
if (digitalRead (button) == HIGH)
if (flag == true ;
if flag == false ;
else
if flag == true) {
digitalWrite(pin, HIGH);
else
digitalWrite(pin, LOW);
delay(500);
}
}
Артем
29.10.2016
Такая же проблема, один в один. Никак не могу понять как комбинировать несколько кодов вместе. По отдельности все работает, а как объединить кнопку и бегущую строку не понимаю.
Дмитрий
30.10.2016
У меня также.Я не знаю как соединить все вместе.
Александр
02.11.2016
Подскажите пожалуйста как добавить кнопку чтобы отключались 6 ть каналов шим ? Вот мой код :
[code]
int buttonPin = 7;
int ledPin = 9;
int potPin = A0;
int led1Pin =3; // Светодиод подключен к выходу 3
int led2Pin =5; // Светодиод подключен к выходу 5
int led3Pin =6; // Светодиод подключен к выходу 6
int led4Pin =9; // Светодиод подключен к выходу 9
int led5Pin =10; // Светодиод подключен к выходу 10
int led6Pin =11; // Светодиод подключен к выходу 11
int analog1Pin = 3; // потенциометр подключен к выходу 3
int analog2Pin = 3; // потенциометр подключен к выходу 3
int analog3Pin = 3; // потенциометр подключен к выходу 3
int analog4Pin = 3; // потенциометр подключен к выходу 3
int analog5Pin = 3; // потенциометр подключен к выходу 3
int analog6Pin = 3; // потенциометр подключен к выходу 3
int val1 = 0; // переменная для хранения значения
int val2 = 0; // переменная для хранения значения
int val3 = 0; // переменная для хранения значения
int val4 = 0; // переменная для хранения значения
int val5 = 0; // переменная для хранения значения
int val6 = 0; // переменная для хранения значения
void setup()
{
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(led1Pin, OUTPUT); // установка порта на выход
pinMode(led2Pin, OUTPUT); // установка порта на выход
pinMode(led3Pin, OUTPUT); // установка порта на выход
pinMode(led4Pin, OUTPUT); // установка порта на выход
pinMode(led5Pin, OUTPUT); // установка порта на выход
pinMode(led6Pin, OUTPUT); // установка порта на выход
}
void loop()
{
val1 = analogRead(analog1Pin); // считываем значение с порта, подключенному к потенциометру
analogWrite(led1Pin, val1 / 4); // analogRead возвращает значения от 0 до 1023, analogWrite должно быть в диапозоне от 0 до 255
val2 = analogRead(analog2Pin); // считываем значение с порта, подключенному к потенциометру
analogWrite(led2Pin, val2 / 4); // analogRead возвращает значения от 0 до 1023, analogWrite должно быть в диапозоне от 0 до 255
val3 = analogRead(analog3Pin); // считываем значение с порта, подключенному к потенциометру
analogWrite(led3Pin, val3 / 4); // analogRead возвращает значения от 0 до 1023, analogWrite должно быть в диапозоне от 0 до 255
val4 = analogRead(analog4Pin); // считываем значение с порта, подключенному к потенциометру
analogWrite(led4Pin, val4 / 4); // analogRead возвращает значения от 0 до 1023, analogWrite должно быть в диапозоне от 0 до 255
val5 = analogRead(analog5Pin); // считываем значение с порта, подключенному к потенциометру
analogWrite(led5Pin, val5 / 4); // analogRead возвращает значения от 0 до 1023, analogWrite должно быть в диапозоне от 0 до 255
val6 = analogRead(analog6Pin); // считываем значение с порта, подключенному к потенциометру
analogWrite(led6Pin, val6 / 4); // analogRead возвращает значения от 0 до 1023, analogWrite должно быть в диапозоне от 0 до 255
}
[/code]
Александр
02.11.2016
Подскажите пожалуйста как добавить кнопку чтобы при однократном нажатии отключало 6 ть каналов шим одновременно а при повторном — включало? Вот мой код :
[code]
int buttonPin = 7;
int ledPin = 9;
int potPin = A0;
int led1Pin =3; // Светодиод подключен к выходу 3
int led2Pin =5; // Светодиод подключен к выходу 5
int led3Pin =6; // Светодиод подключен к выходу 6
int led4Pin =9; // Светодиод подключен к выходу 9
int led5Pin =10; // Светодиод подключен к выходу 10
int led6Pin =11; // Светодиод подключен к выходу 11
int analog1Pin = 3; // потенциометр подключен к выходу 3
int analog2Pin = 3; // потенциометр подключен к выходу 3
int analog3Pin = 3; // потенциометр подключен к выходу 3
int analog4Pin = 3; // потенциометр подключен к выходу 3
int analog5Pin = 3; // потенциометр подключен к выходу 3
int analog6Pin = 3; // потенциометр подключен к выходу 3
int val1 = 0; // переменная для хранения значения
int val2 = 0; // переменная для хранения значения
int val3 = 0; // переменная для хранения значения
int val4 = 0; // переменная для хранения значения
int val5 = 0; // переменная для хранения значения
int val6 = 0; // переменная для хранения значения
void setup()
{
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(led1Pin, OUTPUT); // установка порта на выход
pinMode(led2Pin, OUTPUT); // установка порта на выход
pinMode(led3Pin, OUTPUT); // установка порта на выход
pinMode(led4Pin, OUTPUT); // установка порта на выход
pinMode(led5Pin, OUTPUT); // установка порта на выход
pinMode(led6Pin, OUTPUT); // установка порта на выход
}
void loop()
{
val1 = analogRead(analog1Pin); // считываем значение с порта, подключенному к потенциометру
analogWrite(led1Pin, val1 / 4); // analogRead возвращает значения от 0 до 1023, analogWrite должно быть в диапозоне от 0 до 255
val2 = analogRead(analog2Pin); // считываем значение с порта, подключенному к потенциометру
analogWrite(led2Pin, val2 / 4); // analogRead возвращает значения от 0 до 1023, analogWrite должно быть в диапозоне от 0 до 255
val3 = analogRead(analog3Pin); // считываем значение с порта, подключенному к потенциометру
analogWrite(led3Pin, val3 / 4); // analogRead возвращает значения от 0 до 1023, analogWrite должно быть в диапозоне от 0 до 255
val4 = analogRead(analog4Pin); // считываем значение с порта, подключенному к потенциометру
analogWrite(led4Pin, val4 / 4); // analogRead возвращает значения от 0 до 1023, analogWrite должно быть в диапозоне от 0 до 255
val5 = analogRead(analog5Pin); // считываем значение с порта, подключенному к потенциометру
analogWrite(led5Pin, val5 / 4); // analogRead возвращает значения от 0 до 1023, analogWrite должно быть в диапозоне от 0 до 255
val6 = analogRead(analog6Pin); // считываем значение с порта, подключенному к потенциометру
analogWrite(led6Pin, val6 / 4); // analogRead возвращает значения от 0 до 1023, analogWrite должно быть в диапозоне от 0 до 255
}
[/code]
Николай
30.12.2022
Чтобы реализовать отключение и включение шести каналов PWM с помощью кнопки, вам нужно будет добавить код, который опрашивает состояние кнопки и принимает решение о том, какие каналы PWM нужно включить или отключить. Вот пример такого кода:
int buttonState = digitalRead(buttonPin); // считываем состояние кнопки
if (buttonState == LOW) { // если кнопка нажата
// отключаем каналы PWM
analogWrite(led1Pin, 0);
analogWrite(led2Pin, 0);
analogWrite(led3Pin, 0);
analogWrite(led4Pin, 0);
analogWrite(led5Pin, 0);
analogWrite(led6Pin, 0);
} else { // иначе (кнопка н
Николай
30.12.2022
Чтобы реализовать однократное включение/выключение светодиодов при нажатии на кнопку, нужно использовать функцию digitalRead() для чтения состояния кнопки, а также использовать переменную, которая будет хранить состояние кнопки (нажата или отжата). Также может понадобиться использовать задержку, чтобы избежать многократного срабатывания кода при нажатии на кнопку.
Чтобы реализовать отключение и включение нескольких каналов ШИМ при однократном нажатии на кнопку
int buttonPin = 7;
int led1Pin = 3;
int led2Pin = 5;
int led3Pin = 6;
int led4Pin = 9;
int led5Pin = 10;
int led6Pin = 11;
bool ledsOn = false;
void setup()
{
pinMode(buttonPin, INPUT);
pinMode(led1Pin, OUTPUT);
pinMode(led2Pin, OUTPUT);
pinMode(led3Pin, OUTPUT);
pinMode(led4Pin, OUTPUT);
pinMode(led5Pin, OUTPUT);
pinMode(led6Pin, OUTPUT);
}
void loop()
{
// читаем состояние кнопки
int buttonState = digitalRead(buttonPin);
// если кнопка нажата
if (buttonState == HIGH)
{
// инвертируем состояние переменной ledsOn
ledsOn = !leds
islam
20.11.2016
int button = 2;
int led = 8;
void setup() {
pinMode(led, OUTPUT);
pinMode(button, INPUT);
}
void loop(){
if (digitalRead(button) == HIGH) {
digitalWrite(led, HIGH);
}
else {
digitalWrite(led, LOW);
}
}
помогите пожалуйста вместо одной кнопки сделать две кнопки
Adam
27.03.2017
Добрый день,есть кнопка нажимаешь включаешь 1 светодиод 2 паралельно мигает отпускаеш кнопку отключаешь обе светодиода
Ксения
13.04.2017
всем привет, подскажите, пожалуйста! мы сделали модель и код. рабоет так: нажал на кнопку — диод горит, еще раз нажал- потух. сейсам мне надо сделать так: нажал- слабо горит, еще нажал- сильнее горит, еще нажал- сильно горит, нажал еще-потух диод. прежний код выглядит так.
int ledPin = 13;
int switchPin = 8;
boolean lastButton = LOW;
boolean ledOn = false;
boolean currentButton = LOW;
void setup()
{
pinMode(ledPin, OUTPUT);
pinMode(switchPin, INPUT);
}
boolean debounce (boolean last)
{
currentButton = digitalRead (switchPin);
if (last != currentButton)
{
delay (5);
currentButton = digitalRead (switchPin);
}
return currentButton;
}
void loop() {
currentButton = debounce (lastButton);
if(lastButton == LOW && currentButton == HIGH)
{
ledOn = !ledOn;
}
lastButton = currentButton;
digitalWrite(ledPin, ledOn);
}
Ivan
29.04.2017
Объясните пожалуйста, зачем в землю резистор. Объясните пожалуйста максимально простыми словами, никак не могу понять:(
питер
02.07.2017
Доброго дня . Подскажите пожалуйста зачем нужно резистором тянуть землю на кнопку , если при нажатии кнопка пропускает плюс ?
Владимир
28.11.2017
Здравствуйте. как будет выглядеть скейч на две кнопки и два светодиода которые будут выключается по времени. Например на 1 секунду
полина
13.06.2018
Как прописать код для радуино, чтобы светодиод загорался только при одновременном нажатии на 2 кнопки
Dana
21.09.2018
Включение светодиода с помощью кнопки
Когда на кнопку нажали,включается светодиод
Когда на кнопку не нажали,выключаем светодиод
Глеб
30.12.2022
Для того, чтобы реализовать включение светодиода с помощью кнопки, нужно использовать функцию digitalRead, которая позволяет считывать состояние пина (нажата кнопка или нет). Также нужно использовать функцию digitalWrite, которая позволяет установить состояние пина (высокое или низкое).
Михаил
30.12.2022
Подключение кнопки к плате Arduino является одним из самых простых и базовых элементов работы с электронными устройствами. Чтобы подключить кнопку к плате Arduino, необходимо следующее:
Подключить один конец кнопки к одному из пинов платы Arduino (например, к пину 2).
Подключить другой конец кнопки к земле (GND).
Подключить плату Arduino к компьютеру с помощью USB-кабеля.
Открыть программу Arduino IDE и создать новый скетч.
В начале скетча определить номер пина, к которому подключена кнопка: const int buttonPin = 2;
В секции setup инициализировать этот пин как вход: pinMode(buttonPin, INPUT);
В секции loop считывать состояние кнопки с помощью команды digitalRead:
int buttonState = digitalRead(buttonPin);
В результате состояние кнопки будет сохранено в переменной buttonState — если кнопка нажата, то buttonState будет равно HIGH, если не нажата — равно LOW.
Ниже приведен пример кода, который мигает светодиодом, когда кнопка нажата:
const int ledPin = 13; // Пин светодиода
const int buttonPin = 2; // Пин кнопки
void setup() {
pinMode(ledPin, OUTPUT); // Инициал
Этот код будет проверять состояние кнопки каждый цикл `loop` и включать светодиод, если кнопка нажата, и выключать его, если кнопка не нажата.
Однако, часто необходимо, чтобы светодиод мигал регулярно, а не только при нажатии кнопки. Для этого можно использовать функцию `delay` и переменную, которая хранит состояние светодиода (включен/выключен). Ниже приведен код, реализующий мигание светодиода с частотой 1 раз в секунду:
const int ledPin = 13; // Пин светодиода
const int buttonPin = 2; // Пин кнопки
int ledState = LOW; // Состояние свет
Добавить код, отвечающий за мигание светодиода с частотой 1 раз в секунду:
void loop() {
int buttonState = digitalRead(buttonPin); // Считываем состояние кнопки
if (buttonState == HIGH) { // Если кнопка нажата
ledState = !ledState; // Меняем состояние светодиода
digitalWrite(ledPin, ledState); // Включаем/выключаем светодиод
}
delay(1000); // Ждем 1 секунду
}
В этом коде мы считываем состояние кнопки, а затем меняем состояние светодиода и включаем/выключаем его, если кнопка нажата. Затем мы ждем 1 секунду с помощью функции delay и возвращаемся в начало цикла. В результате светодиод будет мигать с частотой 1 раз в секунду.
Загрузите скетч на плату Arduino с помощью программы Arduino IDE. Сначала нужно выбрать нужную плату в меню «Сервис» -> «Устройство». Затем нажмите на кнопку «Загрузить» или нажмите «Ctrl + U» на клавиатуре.
После загрузки скетча вы можете нажать кнопку на плате Arduino и увидеть, как светодиод начинает мигать. Если светодиод не мигает, проверьте, что все провода подключены правильно и что правильно выбрана плата в Arduino IDE.
Михаил
30.12.2022
И вот вы уже умеете подключать кнопку к плате Arduino и реализовывать мигание светодиода с помощью нее. Это только один из примеров того, что можно сделать с помощью Arduino. С ее помощью можно реализовывать различные электронные устройства и роботов, от простых до сложных.