Arduino напряжение кнопки против высокого/низкого состояния
Я измеряю напряжение между заземлением кнопки и входным полюсом на следующем рисунке. Когда кнопка находится в выключенном
состоянии, там есть 5
В, когда она включена и светодиод включен, там есть 0
. Является ли это правильным способом, а также как мне облегчить написание кода и сделать так, чтобы светодиод низкого уровня был выключен. В этом скетче
digitalWrite(led1, LOW);
означает, что светодиод действительно включен, так как же мне настроить его так, чтобы он отображал фактическое состояние, high=led on
.
#include <ezButton.h>
// -----
// Declaration
// -----
const int button1 = 9;
const int led1 = 4;
int ledState = LOW;
ezButton button(button1);
// -----
// Setup
// -----
void setup()
{
pinMode(led1, OUTPUT);
pinMode(button1, INPUT_PULLUP);
button.setDebounceTime(50);
}
// *****
// Main Loop
// *****
void loop()
{
if( digitalRead(button1) == LOW ) {
digitalWrite(led1, HIGH);
}
else {
digitalWrite(led1, LOW);
}
}
// *****
@Varonne, 👍1
Обсуждение1 ответ
Чтобы ответить на поставленный вопрос буквально: Да, это правильный путь для вашей схемы, в которой кнопка находится между контактом и GND, а светодиод между VCC. и контакт:
Я понимаю эту путаницу. Однако смысл верен, поскольку уровень на выводе кнопки становится НИЗКИМ
при нажатии. А уровень на выводе светодиода должен быть НИЗКИМ
, чтобы ток протекал.
Вы можете определить свои собственные константы:
//остальное опущено
const int LED_ON = LOW;
const int LED_OFF = HIGH;
const int BUTTON_PRESSED = LOW;
const int BUTTON_RELEASED = HIGH;
void loop()
{
if (digitalRead(button1) == BUTTON_PRESSED) {
digitalWrite(led1, LED_OFF);
}
else {
digitalWrite(led1, LED_ON);
}
}
Если вы хотите продолжать использовать HIGH
и LOW
, но интерпретировать их как:
HIGH
= кнопка нажата/светодиод горитLOW
= кнопка отпущена/индикатор выключен
Тогда нужно доработать схему:
К сожалению, для вывода кнопки не существует режима вывода INPUT_PULLDOWN
, поэтому вам необходимо подключить понижающий резистор извне. Обязательно установите для вывода значение INPUT
, а не INPUT_PULLUP
.
Обычное значение понижающего резистора составляет 10 кОм.
- Определение того, была ли нажата и отпущена кнопка
- Хорошая кнопка debouncing/Библиотека StateChange
- Остановить мигание светодиодов
- Интеграция 2 кнопок для включения и выключения светодиода.
- Код Arduino для управления 4 светодиодами с 4 кнопок
- Нужен ли подтягивающий/понижающий резистор для цепи светодиода кнопки?
- Как прервать функцию цикла и перезапустить ее?
- Как перезапустить счетчик в программе с помощью кнопки в настройке LDR Tripwire
@Juraj но разве "int ledState = LOW;" не предписывает, что при запуске Arduino с этим скетчем светодиод выключен?, @Varonne
какова цель
int ledState = LOW;
? ... ваша программа не использует " ledState`, @jsotolaconst int LED_Off = HIGH; const int LED_On = LOW; затем используйте LED_On/Off по своему усмотрению..., @Abel
Итак, если я правильно понимаю, вы путаетесь, потому что включение светодиода означает запись на него НИЗКО. И вы хотите изменить это, чтобы больше не путаться. Это верно?, @chrisl
Чтобы ответить на ваш вопрос, *Это правильный путь*, да, это один правильный путь. Нет ничего неправильного в светодиодной схеме, которая включает светодиод при низком напряжении и выключает при высоком. Если вы хотите изменить это фундаментальное свойство, вы должны изменить схему., @lurker
Если я правильно понимаю, вы несколько сбиты с толку обратной логикой кнопки ПОДТЯГИВАНИЯ. В качестве альтернативы комментарию @Abel вы можете определить
const int PRESSED=LOW;
и написатьif (digitalRead(button1) == PRESSED) digitalWrite(led1, HIGH);
, @DataFiddler