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);
  }      

}
 
// *****

, 👍1

Обсуждение

@Juraj но разве "int ledState = LOW;" не предписывает, что при запуске Arduino с этим скетчем светодиод выключен?, @Varonne

какова цель int ledState = LOW;? ... ваша программа не использует " ledState`, @jsotola

const 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


1 ответ


2

Чтобы ответить на поставленный вопрос буквально: Да, это правильный путь для вашей схемы, в которой кнопка находится между контактом и GND, а светодиод между VCC. и контакт:

schematic

Я понимаю эту путаницу. Однако смысл верен, поскольку уровень на выводе кнопки становится НИЗКИМ при нажатии. А уровень на выводе светодиода должен быть НИЗКИМ, чтобы ток протекал.

Вы можете определить свои собственные константы:

//остальное опущено

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 = кнопка отпущена/индикатор выключен

Тогда нужно доработать схему:

schematic

К сожалению, для вывода кнопки не существует режима вывода INPUT_PULLDOWN, поэтому вам необходимо подключить понижающий резистор извне. Обязательно установите для вывода значение INPUT, а не INPUT_PULLUP.

Обычное значение понижающего резистора составляет 10 кОм.

,