Кнопка ардуино подключение программа

Подключение тактовой кнопки к Ардуино

Как подключить тактовую кнопку к цифровым и аналоговым входам на Arduino Uno правильно. Расскажем, как избежать «дребезг контактов», рассмотрим схему подключения одной и нескольких кнопок к плате Ардуино. Рассмотрим функции digitalRead и analogRead в языке программирования C++, которые часто требуется использовать при создании различных проектов на Ардуино для начинающих.

Работа с тактовыми кнопками на Ардуино

Главная проблема использования кнопок для управления Arduino заключается в «дребезге контактов». Дело в том, что механические контакты в тактовых кнопках никогда не замыкаются и размыкаются мгновенно. В течении нескольких миллисекунд происходит многократное замыкание и размыкание контактов — в итоге на микроконтроллер поступает не единичный сигнал, а серия импульсов.

Подключение кнопки к Ардуино и дребезг

Уроки Arduino. Расширенное управление кнопкой

Для того, чтобы исключить на микроконтроллере Arduino дребезг кнопки используют различные электрические схемы с триггерами и конденсаторами. Но намного удобнее и проще использовать программный способ борьбы с возможным дребезгом тактовой кнопки — для этого применяют задержку на несколько миллисекунд или используют библиотеку Bounce2.h для борьбы с дребезгом контактов для Arduino.

Подключение кнопки к Ардуино с резистором

Для этого занятия потребуется:

  • Arduino Uno / Arduino Nano / Arduino Mega;
  • макетная плата;
  • 1 светодиод;
  • резисторы на 220 Ом и 10 кОм;
  • 1 тактовая кнопка;
  • провода «папа-папа» и «папа-мама».

Схема. Подключение кнопки к Ардуино Уно

Используем цифровые порты на плате для подключения тактовой кнопки и команду digitalRead для считывания данных. Соберите схему, как на рисунке выше и загрузите скетч. Обратите внимание, что при отпущенной кнопке на Pin2 поступает логический «0». С помощью кнопки будем выключать и включать встроенный светодиод, подключенный к цифровому 13 порту на плате микроконтроллера Ардуино.

Скетч Ардуино подключение кнопки к цифровому входу

void setup() < pinMode(13, OUTPUT); // объявляем пин 13 как выход pinMode(2, INPUT); // объявляем пин 2 как вход > void loop() < if (digitalRead(2) == HIGH) // когда на пин 2 поступает высокий сигнал < digitalWrite(13, HIGH); // зажигаем светодиод > if (digitalRead(2) == LOW) // когда на пин 2 поступает низкий сигнал < digitalWrite(13, LOW); // выключаем светодиод > >

Пояснения к коду:

  1. процедура setup выполняется один раз, используется процедура для конфигурации портов микроконтроллера (назначение режима работы портов);
  2. процедуры setup и loop должны присутствовать в любой программе (скетче);
  3. использованные константы: INPUT , OUTPUT , LOW , HIGH , пишутся заглавными буквами, иначе компилятор их не распознает и выдаст ошибку.

Подключение кнопки с подтягивающим резистором

Подключение кнопки к Ардуино с резистором

Уроки Arduino #5 — работа с цифровыми портами и подключение кнопки

Можно также сделать подключение кнопок к аналоговому входу Ардуино (обозначены, как Analog In на плате). Принципиальное отличие данной схемы — это использование аналогового порта на микроконтроллере. Для включения и выключения светодиода будем также использовать встроенный светодиод на плате. Переключите тактовую кнопку к аналоговому входу A1 и загрузите в плату следующий скетч.

Скетч Ардуино подключение кнопки к аналоговому входу

void setup() < pinMode(13, OUTPUT); // объявляем пин 13 как выход pinMode(A1, INPUT); // объявляем пин A1 как вход > void loop() < if (analogRead(A1) > 300) // когда аналоговая кнопка нажата < digitalWrite(13, HIGH); // зажигаем светодиод > if (analogRead(A1) < 300) // когда аналоговая кнопка отпущена < digitalWrite(13, LOW); // выключаем светодиод > >

Пояснения к коду:

  1. в данном скетче мы используем функцию analogRead для считывания значений с аналогового входа A1 , при этом порт можно использовать, как цифровой;
  2. значения на аналоговом входе могут отличаться (все зависит от сопротивления резистора в схеме) и могут принимать значения в диапазоне от 0 до 1023.

Подключение кнопки к Ардуино без резистора

Подключение кнопки без резистора

Для конфигурации порта микроконтроллера в команде pinMode() можно использовать режим работы INPUT_PULLUP. В этом случае к пину подключается 5V с подтягивающим резистором, что позволяет подключать кнопки к Ардуино без резистора. В следующей программе реализована возможность считывания нажатий на тактовые кнопки без дребезга, с помощью которых будет увеличиваться или уменьшаться переменная.

Скетч: подключение кнопки к Ардуино input_pullup

int x; boolean button1WasUp = true; // переменные для считывания нажатия на кнопки boolean button2WasUp = true; void setup() < pinMode(2, INPUT_PULLUP); // подключаем тактовые кнопки pinMode(3, INPUT_PULLUP); Serial.begin(9600); > void loop() < boolean button1IsUp = digitalRead(2); // узнаем текущее состояние кнопок boolean button2IsUp = digitalRead(3); // если кнопка 1 была нажата, увеличиваем переменную «x» if (button1WasUp !button1IsUp) < delay(10); button1IsUp = digitalRead(8); if (!button1IsUp) < x = x + 1; Serial.println(x); > > button1WasUp = button1IsUp; // запоминаем состояние кнопки 1 // если кнопка 2 была нажата, уменьшаем переменную «x» if (button2WasUp !button2IsUp) < delay(10); button2IsUp = digitalRead(10); if (!button2IsUp) < x = x — 1; Serial.println(x); > > button2WasUp = button2IsUp; // запоминаем состояние кнопки 2 >

Пояснения к коду:

  1. задержка delay(10); необходима в программе для исключения влияния дребезга контактов и ложного срабатывания кнопки;
  2. переменная ‘x’ будет выводиться на монитор порта при нажатии на кнопку.

Заключение. В этом обзоре мы рассмотрели подключение кнопки и светодиода к Ардуино (светодиод можно подключить к 13 пину платы). Более интересное подключение, с использованием режима INPUT_PULLUP для порта, рассмотрено при подключении модуля тактовой кнопки без дребезга — здесь. Если у вас остались вопросы по данному обзору — оставляйте их в комментариях к этой записи.

Источник: xn--18-6kcdusowgbt1a4b.xn--p1ai

Подключаем кнопку. Урок 2.2. Ардуино

подключаем кнопку к ардуино

Привет. Сегодня переходим к важной части изучения ардуино. Рассмотрим, как можно использовать пины на плате для ввода данных. Раньше мы использовали их только на вывод. Но все пины в ардуино можно использовать в двух направлениях, это одна из классных возможностей ардуино.

Читайте также:
Какие поставить программы на Андроид

В прошлый раз мы уже подключали светодиоды и сделали примитивное управление ими. Если вы уже забыли или пропустили предыдущий урок, пожалуйста, посмотрите его.

На этот раз мы изменим программу и схему подключения таким образом, чтобы управлять светодиодом с помощью кнопки.

Чтобы выполнить этот урок нам понадобятся.

  • Ардуино UNO
  • Макетная плата
  • Перемычки
  • Резистор номиналом 220 Ом
  • Резистор номиналом 10 кОм
  • Светодиод 5 мм
  • Кнопка
  • Кабель USB

pinMode()

Для того, чтобы перевести контакт ардуино в режим чтения, используется функция pinMode(). Как мы помним, функция принимает два параметр, номер пина, который мы хотим установить на чтение и режим в котором работает пин.

INPUT — устанавливает режим чтения.

OUTPUT — устанавливает на вывод.

pinMode (2, INPUT);

В ардуино все контакты настроены на режим чтения по умолчанию. Так что, если вы не указываете режим OUTPUT, то эти команды можно пропустить. Однако, на этапе обучения мы будем их использовать всегда.

digitalRead()

Функция digitalRead() считывает значение с заданного контакта. В результате ей будет присвоено значение HIGH или LOW, соответственно логические 1 и 0.

Если контакт не подключен, то значение функции может быть любое. Об этом важно помнить. Так как мы хотим подключить к этому контакту кнопку и считывать нажатия на нее. Но без дополнительных резисторов контакт останется не подключенным, когда кнопка не нажата.

Поэтому, для того чтобы избежать ошибок связанных с кнопкой мы будем использовать стягивающий резистор.

Стягивающий резистор подключается параллельно с кнопкой и соединяет пин настроенный на чтение с землей. Таким образом, когда кнопка не нажата, на входе пина установлен LOW уровень напряжения. А когда кнопка нажата, уровень меняется на HIGH.

Подключим кнопку и светодиод соответственно схеме.

Принципиальная схема подключения кнопки и светодиода

Соединим 2 цифровой контакт на плате ардуино с синей шиной на макетной плате через резистор 20 кОм. Также соединим один из контактов кнопки с этой же группой контактов на макетной плате.

Второй контакт кнопки соединим с красной шиной макетной платы.

Анод светодиода через резистор 220 Ом соединяем с 9 пином на ардуино, а Катод с землей.

И соединим синюю шину макетной платы с контактом gnd на плате ардуино, а красную с контактом 5в.

Программа

В среде разработки arduino ide уже есть подходящая программа для нашего урока, воспользуемся ей. В меню файл, examples, digital выберем программу button.

По умолчанию, на вывод светодиода в ней используется 13 пин и подключенная лампочка на плате. Но мы изменим константу ledpin на 9.

const int ledPin = 9;

В цикле loop переменная buttonState считывает нажатие на кнопку.

buttonState = digitalRead(buttonPin);

И в блоке if else мы проверяем состояние переменной buttonState и зажигаем светодиод, если напряжение на 2 пине = 5 вольтам.

if (buttonState == HIGH) < // turn LED on: digitalWrite(ledPin, HIGH); >else < // turn LED off: digitalWrite(ledPin, LOW); >

Полный текст программы

// constants won’t change.

They’re used here to set pin numbers: const int buttonPin = 2; // the number of the pushbutton pin const int ledPin = 9; // the number of the LED pin // variables will change: int buttonState = 0; // variable for reading the pushbutton status void setup() < // initialize the LED pin as an output: pinMode(ledPin, OUTPUT); // initialize the pushbutton pin as an input: pinMode(buttonPin, INPUT); >void loop() < // read the state of the pushbutton value: buttonState = digitalRead(buttonPin); // check if the pushbutton is pressed. If it is, the buttonState is HIGH: if (buttonState == HIGH) < // turn LED on: digitalWrite(ledPin, HIGH); >else < // turn LED off: digitalWrite(ledPin, LOW); >>

Заключение

В этот раз мы рассмотрели новую программу из библиотеки примеров кода в arduino ide. Собрали схему управления светодиодом. Подключили кнопку к ардуино и научились считывать нажатия на эту кнопку в программе. Это уже похоже на настоящее устройство.

В следующий раз рассмотрим использование кнопок чуть подробнее и улучшим программу для управления светодиодом.

Источник: arcadepub.ru

Ардуино для начинающих. Урок 5. Кнопки, ШИМ, функции

Подключение кнопки к Arduino

Как видите, ничего сложно в подключении кнопки к ардуино нет. Обратите внимание, что кнопка установлена так, что каждый ее контакт подключен к разным линиям макетной платы. Так же вы можете заметить резистор на 10 кОм который притягивает контакт к земле. Это нужно для того, что бы мы на 8 контакте не ловили наводок. Попробуйте убрать этот резистор из схемы.

Светодиод будет загораться при шевелении проводов или кнопки. Теперь давайте рассмотрим скетч:

// Первый скетч. Светодиод горит при нажатой кнопке // переменные с пинами подключенных устройств int switchPin = 8; int ledPin = 13; void setup() < pinMode(switchPin, INPUT); pinMode(ledPin, OUTPUT); >void loop() < // включаем всетодиод при нажатой кнопке if(digitalRead(switchPin) == HIGH) < digitalWrite(ledPin, HIGH); >else < digitalWrite(ledPin, LOW); >>

В этом уроке, как и прошлом, в самом начале мы объявляем переменные со значениями пинов к которым у нас подключены кнопка и светодиод. Далее в функции setup() мы обозначаем какой пин используется как вход, а какой как выход. В функции loop() мы используем условный оператор if с оператором сравнения и проверяем приходит ли на пин 8 высокий сигнал. Если да то включаем светодиод, если нет то выключаем. Описание функций и операторов вы найдете в справочнике по языку программирования Arduino

Теперь немного усложним наш код. Давайте сделаем так, что бы при нажатии на кнопку светодиод загорался и гас только при следующем нажатии на кнопку. Для этого в схеме мы менять ничего не будем, а скетч теперь будет выглядеть так:

// второй скетч. меняет состояние при нажатии на кнопку // переменные с пинами подключенных устройств int switchPin = 8; int ledPin = 13; // переменные для хранения состояния кнопки и светодиода boolean lastButton = LOW; boolean currentButton = LOW; boolean ledOn = false; void setup() < pinMode(switchPin, INPUT); pinMode(ledPin, OUTPUT); >// функция для подавления дребезга boolean debounse(boolean last) < boolean current = digitalRead(switchPin); if(last != current) < delay(5); current = digitalRead(switchPin); >return current; > void loop() < currentButton = debounse(lastButton); if(lastButton == LOW currentButton == HIGH) < ledOn = !ledOn; >lastButton = currentButton; digitalWrite(ledPin, ledOn); >

Читайте также:
Как работать в программе designer

В этом скетче мы добавили переменные для хранения состояния светодиода и кнопки.

Так же мы создали новую функцию для подавления дребезга контактов debounse(). Код в цикле loop() тоже немного изменился. Теперь в условном операторе мы проверяем нажата ли кнопка и если нажата, то меняем состояние светодиода на противоположное. Потом меняем переменную с последним состоянием на текущее состояние кнопки и включаем или выключаем светодиод.

Понравилось? Давайте еще больше усложним наш проект. Теперь мы будем управлять яркостью светодиода. Для этого нам надо немного изменить схему нашего устройства. Для управления яркостью мы будем использовать ШИМ.

Значит нам надо подключить светодиод к выходу, который может выдавать ШИМ. Теперь наша схема будет выглядеть вот так:

Подключение светодиода к Arduino

Теперь светодиод подключен к 11 пину ардуино, которой умеет делать ШИМ. И нам пришлось добавить токоограничивающий резистор на 220 Ом перед светодиодом, что бы его не спалить. Это необходимо потому, что светодиоды работают при напряжении 3.3 В, а пин ардуино отдает 5 В. Теперь посмотрим что нужно изменить в скетче:

// переменные с пинами подключенных устройств int switchPin = 8; int ledPin = 11; // переменные для хранения состояния кнопки и светодиода boolean lastButton = LOW; boolean currentButton = LOW; int ledLevel = 0; void setup() < pinMode(switchPin, INPUT); pinMode(ledPin, OUTPUT); >// функция для подавления дребезга boolean debounse(boolean last) < boolean current = digitalRead(switchPin); if(last != current) < delay(5); current = digitalRead(switchPin); >return current; > void loop() < currentButton = debounse(lastButton); if(lastButton == LOW currentButton == HIGH) < ledLevel = ledLevel + 51; >lastButton = currentButton; if(ledLevel > 255) ledLevel = 0; analogWrite(ledPin, ledLevel); >

В этом примере мы изменили значение переменной ledPin на 11.

Так же добавили переменную для хранения уровня ШИМ ledLevel. При нажатии на кнопку будем увеличивать эту переменную. Функция debounce() осталась без изменений. В цикле мы теперь используем функцию analogWrite().

Вот и все! Сегодняшний урок на этом мы закончим. Надеюсь вам все было понятно. Если нет, то можете задавать свои вопросы в комментариях ниже.

24 комментариев

  1. Николай 2018-02-06 03:28:08

Здравствуйте)))
Подскажите пожалуйста новечьку,
Как можно реализовать такой скечь
При нажатии на кнопку светодиод плавно загорается если нажать ещё раз на кнопку то светодиод плавно тухнет…?

  • Александр 2020-11-23 13:45:53

// переменные с пинами подключенных устройств
int switchPin = 8;
int ledPin = 11; // переменные для хранения состояния кнопки и светодиода
boolean lastButton = LOW;
boolean currentButton = LOW;
int ledLevel = 0; void setup() pinMode(switchPin, INPUT);
pinMode(ledPin, OUTPUT);
> // функция для подавления дребезга
boolean debounse(boolean last) boolean current = digitalRead(switchPin);
if(last != current) delay(5);
current = digitalRead(switchPin);
>
return current;
> void loop() currentButton = debounse(lastButton);
//первый цикл, постепенно включает светодиодик
if(lastButton == LOW currentButton == HIGH) for(int i=ledLevel;i 255) ledLevel = 0;
>
currentButton = debounse(lastButton); //второй цикл, постепенно выключает светодиодик
if(lastButton == LOW currentButton == HIGH) for(int i=ledLevel;i>0;i=i-1) ledLevel = ledLevel — 1;
delay(100);
analogWrite(ledPin, ledLevel);>
//if(ledLevel > 255)
ledLevel = 0;
> >

Очевидно при нажатии на кнопку в цикле менять значение ledLevel

  • лолАндрей 33456 2019-01-15 13:51:43

Денис что такое ledlevel?

//Как можно реализовать такой скечь
//При нажатии на кнопку светодиод плавно загорается если нажать ещё раз на кнопку то светодиод плавно тухнет…? /*== к примеру, вот так ==*/ // переменные с пинами подключенных устройств
int switchPin = 8;
int ledPin = 11; // переменные для хранения состояния кнопки и светодиода
boolean lastButton = LOW;
boolean currentButton = LOW;
int ledLevel = 0; // настройка изменения яркости
int deltaLevel = 5; // Шаг изменения яркости
int sign = 1; // Знак шага
int step_delay = 100; // задержка в шаге изменения яркости светодиода // настройка сигнализатора окончания изменения яркости
int max_blink = 3; //число морганий светодиода на pin13 (LED_BUILTIN)
int blink_delay = 500; //задержка состояния светодиода на pin13 (LED_BUILTIN) void setup()
pinMode(switchPin, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);// потушим светодиод на pin13 (LED_BUILTIN)
> // функция для подавления дребезга
boolean debounse(boolean last)
boolean current = digitalRead(switchPin);
if(last != current)
delay(5);
current = digitalRead(switchPin);
>
return current;
> // При нажатии на кнопку, светодиод медленно увеличивает яркость
// При повторном нажатии на кнопку, светодиод медленно гаснет
void loop()
currentButton = debounse(lastButton);
if(lastButton == LOW currentButton == HIGH)
if(ledLevel == 0) sign = 1;
if(ledLevel == 255) sign = -1;
for(int i = 0; i 255) ledLevel = 255;
if(ledLevel < 0) ledLevel = 0;
analogWrite(ledPin, ledLevel);
delay(step_delay);
>
/* Сигнализация окончания цикла изменения яркости светодиода */
for(int i = 0; i < max_blink; i++)
digitalWrite(LED_BUILTIN, HIGH);
delay(blink_delay);
digitalWrite(LED_BUILTIN, LOW);
delay(blink_delay);
>
>
lastButton = currentButton; // переписываем состояние кнопки
> //P.S. почему-то первый ответ криво пошёл, исказился код… надеюсь этот пройдёт

МУЖЧИНЫ кто согласится написать скетч за вознаграждение,к примеру на телефон.

  • Tviort 2018-03-14 21:41:31

Здравствуйте. Какой именно скетч вам нужен?
выдаёт ошибку на for(int i = 0; i 255) ledLevel = 255;

помогите освоить кнопки для изменения параметра int b = 7883; с запоминанием
#include LiquidCrystal_I2C lcd(0x27, 16, 2); #include AccelStepper Stepper1(1, 13, 12); //использует пин 12 и 13 для dir и step, 1 — режим «external driver» (A4988) int dir = 1; int a = 0; int relayPin = 11; int b = 7883; void setup() < lcd.init(); lcd.backlight(); lcd.setCursor(0, 1); lcd.print(b); pinMode (relayPin, OUTPUT); digitalWrite (relayPin, HIGH); >void loop() < Stepper1.setMaxSpeed(1500.0);
Stepper1.setAcceleration(1500.0);
if (Stepper1.distanceToGo() == 0) digitalWrite (relayPin, LOW);
delay(30);
Stepper1.move(b);
delay(500); >
if (Stepper1.distanceToGo() == b)
digitalWrite (relayPin, HIGH);
delay(30);
a = 0;
>
Stepper1.run(); //запуск шагового двигателя. Эта строка повторяется вновь и вновь для непрерывного вращения двигателя >

Читайте также:
Программа покупки авто для семей

так то тело работает как надо, но чтото я в ступоре что и где написать ему еще ))))))

Привет) Имеем простейший скетч для управления оборотами бк мотора. как добавить сюда кнопку, при нажатии и удержании двиг должен крутиться на выставленых оборотах, при отпускании кнопки двиг останавливается
#include Servo motor; void setup() motor.attach(8);
motor.writeMicroseconds(2300);
delay(2000);
motor.writeMicroseconds(800);
delay(6000);
> void loop() < int val = map(analogRead(0), 0, 1023, 800, 2300);
motor.writeMicroseconds(val); >

  • Tviort 2018-07-17 20:41:51

Очень просто! в setup() <> надо добавить строку: pinMode(D5, INPUT); // D5 номер цифрового пина к которому подключена кнопка. Можете подключить к любому цифровому пину но не забудьте поменять значение В loop()<> добавляем следующее условие:
if(digitalRead(D5)) < // ждем высокого сигнала с кнопки
int val = map(analogRead(0), 0, 1023, 800, 2300);
motor.writeMicroseconds(val);
>

  • Игорь 2018-07-18 18:21:29

#include Servo motor; void setup() <
pinMode(D5, INPUT);
motor.attach(8);
motor.writeMicroseconds(2300);
delay(2000);
motor.writeMicroseconds(800);
delay(6000);
> void loop() < if(digitalRead(D5))
int val = map(analogRead(0), 0, 1023, 800, 2300);
motor.writeMicroseconds(val); > ошибка ‘D5’ was not declared in this scope

подскажите где ошибка??

Народ помогите новичку нужен скетч когда держишь нажатой кнопку яркость светодиода увеличивается а как отпустишь сразу гаснет. Нужно для робота уже всю голову сломал

  • Владимир 2018-10-09 19:04:00

Странно что вам никто не ответил. В цикле изменяйте параметры ШИМ от 0 до 255 и постоянно опрашивайте кнопку на предмет нажатия. Сделайте задержку опроса немного больше, например 10ms. Чтобы не ошибиться с «отжатием». По false заканчивайте опрос и устанавливайте выход в LOW.
Написать видимо могу, но тратить на это время не хочу. Я всего пару часов учу этот предмет
Надеюсь вы уже и без меня догадались как это сделать.

Есть стойкое ощущение, что автор статьи дисциплины схемотехника и принцип работы электронных приборов в ВУЗе прогуливал.
«Теперь светодиод подключен к 11 пину ардуино, которой умеет делать ШИМ. И нам пришлось добавить токоограничивающий резистор на 220 Ом перед светодиодом, что бы его не спалить. Это необходимо потому, что светодиоды работают при напряжении 3.3 В, а пин ардуино отдает 5 В.»
1. Без разницы где стоит резистор До или После светодиода.
2. «токоограничивающий резистор» — совершенно верно!
3. «Это необходимо потому, что светодиоды работают при напряжении 3.3 В, а пин ардуино отдает 5 В.» А это вы батенька придумали самостоятельно. Сетодиод — прибор управляемый током (в п.2 ошибки нет). На напряжение ему плевать, кроме полярности естественно. Дальше закон Киргоффа для участка цепи. Я включаю светодиоды в розетку 220В.

Так что напряжение на выходе Arduino тут вообще не причем. Касаемо резистора то тут он, скорее всего ограничивает ток коллектора выходного транзистора контроллера, т.к. светодиод горит ярко уже при 10ma, новые даже при 5-7ma. А здесь ограничено около 20-23ma. Т.е. для свечения светодиода можно было смело ставить 470 Ом и выше. На это плевать когда вы питаетесь от компа и не «греетесь».

Как только будете «жрать» батарейки (или сделаете высоко нагруженную схему), то все будет греться а батарея заканчиваться довольно быстро.
Сорри. не по теме программирования.
К программированию претензий нет. Я в этом пока не сильно понимаю. Первый день…

Как сделать на 2 кнопках? Чтобы нажал на первую кнопку загорелся первый светодиод,нажал на вторую кнопку загорелся второй светодиод.

Подскажите пожалуйста а как написать код чтоб 2 кнопки и 2 светодиода работало. а то я не как не могу в толк взять. Как и что здесь сделоть. int switchPin = 2;
int switch1Pin = 4;
int ledPin = 12;
int led1Pin = 13; // переменные для хранения состояния кнопки и светодиода
boolean lastButton = LOW;
boolean last1Button = LOW;
boolean currentButton = LOW;
boolean current1Button = LOW;
boolean ledOn = false;
boolean led1On = false; void setup() pinMode(switchPin, INPUT);
pinMode(switch1Pin, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(led1Pin, OUTPUT);
> // функция для подавления дребезга boolean debounse(boolean last);
boolean debounse1(boolean last1);
boolean current = digitalRead(switchPin);
boolean current1 = digitalRead(switch1Pin); if (last != current) delay(5);
current = digitalRead(switchPin);
return current;
>
if (last1 != current1) delay(5);
current1 = digitalRead(switch1Pin);
>
return current1;
> void loop() < currentButton = debounse(lastButton);
if(lastButton == LOW currentButton == HIGH) ledOn = !ledOn;
>
lastButton = currentButton;
digitalWrite(ledPin, ledOn); current1Button = debounse1(last1Button);
if(last1Button == LOW current1Button == HIGH) led1On = !led1On;
>
last1Button = current1Button;
digitalWrite(led1Pin, led1On);
>>
>

Подскажите пожалуйста как можно сделать что бы при нажатии и отпускании кнопки определённый цикл запускался, ну скажем мигание светодиода, а при повторном нажатии цикл останавливался.

  • Кеси 2020-04-03 10:08:12

очень просто

Почему когда открываешь монитор порта на пине 13 появляется напряжение и на других пинах тоже. Тоесть реле подключенное к другим пинам тоже срабатывает

«Это необходимо потому, что светодиоды работают при напряжении 3.3 В, а пин ардуино отдает 5 В.» Светодиод работает от тока 10-20мА. И резистор ограничивает ток по закону ОМА. Исправьте ошибку!

подскажите пожалуйста вот ваш код
// второй скетч. меняет состояние при нажатии на кнопку
// переменные с пинами подключенных устройств
int switchPin = 8;
int ledPin = 13; // переменные для хранения состояния кнопки и светодиода
boolean lastButton = LOW;
boolean currentButton = LOW;
boolean ledOn = false; void setup() pinMode(switchPin, INPUT);
pinMode(ledPin, OUTPUT);
> // функция для подавления дребезга
boolean debounse(boolean last) boolean current = digitalRead(switchPin);
if(last != current) delay(5);
current = digitalRead(switchPin);
>
return current;
> void loop() currentButton = debounse(lastButton);
if(lastButton == LOW currentButton == HIGH) ledOn = !ledOn;
>
lastButton = currentButton;
digitalWrite(ledPin, ledOn);
>
одно нажатие на кнопу светодиод горит второе гаснет . мне нужно тоже самое только управлять кодом если кнопка не нажата выполняется первый код нажал выполняется второй , еде раз нажал выполняется первый код , я не пойму как переменную для хранения состояния светодиода boolean ledOn = false; заменить на переменную хранения состояния кода ? подскажите пожалуйста .

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru