Почему на кнопке всегда написано LOW?

Это код, который я использовал в своем проекте

void setup() {
  Serial.begin(9600);
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
  pinMode(8,OUTPUT);
  pinMode(9,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(11,OUTPUT);
  pinMode(12,OUTPUT);
  pinMode(5,INPUT);
}
void loop() {
  Serial.println(digitalRead(5));
  if(digitalRead(5)==HIGH){
    blink(12,100);
    blink(11,100);
    blink(10,100);
    blink(9,100);
    blink(8,100);
    blink(7,100);
    blink(6,100);
    Serial.println("blink done");
  }
  
}
void blink(int a,int b)
{
  digitalWrite(a,HIGH);
  delay(b);
  digitalWrite(a,LOW);
  delay(b);
}

Изображение Tinkercad моей работы

Ссылка на проект https://www.tinkercad.com/things/55vY18FFxDR-blinking- led-wave/editel?sharecode=xQAM80Uu6sJ-hBnLLd04KasomJ2eNNzWLgKZMARe4ig

, 👍2

Обсуждение

подключите только переключатель, резистор и светодиод... определите, какие два контакта соединяются при нажатии кнопки... подозреваю, что левый верхний контакт всегда подключен к левому нижнему контакту, @jsotola

L1 и L2 или R1 и R2 (L для левого, R для правого) соединяются, когда кнопка открыта. [ссылка]https://www.tinkercad.com/things/kMT2yOJpFzg-analog-read/editel?returnTo=%2Fdashboard%3Fcollection%3Ddesigns%26type%3Dcircuits&sharecode=OoTMPbTeJWJGX6WAKZCwLJWxiERzOEBsVfjqZH9p4Kw вот я и проверил., @KillerJosh345

у вас коричневый провод подключен к L1, который всегда подключен к L2, а L2 подключен к земле... почему вы удивляетесь, что коричневый провод всегда заземлен?, @jsotola

Да, я знаю об этом, но меня беспокоит то, что он не отображает 1 и не мигает после нажатия кнопки. Я попытался переместить перемычку контакта D5 на j30, и на нем отобразилась 1, и мигание начало работать (поскольку R1 и R2 подключены, но это противоречит назначению переключателя)., @KillerJosh345

Вы имеете в виду, что когда вы замыкаете 5 В на GND, нажимая кнопку (именно так вы его подключили), он не работает? Возможно, Polyfuse требует некоторого времени для сброса или защиты USB-порта., @KIIV

отсоедините провод 5 В от a30... переместите D5 на j30... включите внутренний подтягивающий резистор pinMode(5,INPUT_PULLUP);, @jsotola

Я изменил условие if digitalRead на НИЗКОЕ, и, как сказал @jsotola, я изменил pinMode на INPUT_PULLUP, *ЭТО РАБОТАЛО*... каким-то образом.... Мы будем очень признательны, если вы объясните, почему провод 5 В и это типичное кнопочное соединение не работали., @KillerJosh345

в схеме выше D5 всегда подключен к GND... подключение 5 В к GND не приводит к повышению напряжения на D5... в реальной схеме соединение между 5 В и GND может легко что-то повредить, @jsotola

Понятно, но почему приведенная ниже типичная схема кнопки даже работает, а не здесь. Можно ли переделать вот эту кнопку......? Мои ссылки на симуляции: https://imgur.com/a/jUagd1q (изображение) https://imgur.com/a/vnZSJ6H (видео), @KillerJosh345


1 ответ


Лучший ответ:

1

Когда вы нажимаете кнопку, вы замыкаете нижнюю синюю (GND) и нижнюю красную (+5 В) линии. В наименее серьезном случае это приведет к перезагрузке вашего Arduino, но также может повредить кнопку, сжечь провод или конденсатор или вывести Arduino из строя. На плате предусмотрена некоторая защита, позволяющая предотвратить серьезное повреждение или даже травму, но тем не менее вам следует абсолютно избегать замыкания +5 В на GND.

Исправить на самом деле довольно просто: замените короткий синий провод большим резистором, примерно 10 кОм. Тогда кнопка по-прежнему будет читать низкий уровень, когда она не нажата, но читать высокий уровень, когда она нажата. Это называется «вытягиванием вниз». резистор.

,

ОП запускает симуляцию... короткое замыкание, вероятно, не моделируется... ваш ответ применим только к реальному оборудованию, @jsotola

Это следует отметить, но здесь это не сработало, поскольку это всего лишь симуляция., @KillerJosh345