Всегда выполняется ELSE. Помогите нубу

VivaLaGhetto
Offline
Зарегистрирован: 08.10.2019

Нашел на форуме только одну похожую ветку, но так и не нашел в ней ответа на вопрос, поэтому попробую задать тут.

Вот купил я значит ардуину, открыл уроки и как 100% нуб сразу нашел себе проблему, с которой пришлось идти на форум. В Гугле, честное пионерское, провел не менее часа. 

Итак, операторы IF-ELSE и SWITCH-DEFAULT всегда выполняют операцию else/default при диалоге с монитором порта:

byte val;

void setup() {
Serial.begin(9600);
}
void loop() {
if(Serial.available() > 0){
  val = Serial.parseInt();
  if (val == 1) {
    Serial.println("odin");
    }
  else {
    Serial.println("miss");
    }  
  }
}

То есть, при любом вводе, получаю в ответ либо "miss" либо "odin" и затем "miss".
Здесь на форуме нашел ветку, где челу посоветовали заменить в окне COM-порта "NL(Новая строка)" на "Нет конца строки" и все заработало как надо. Почему заработало - не совсем понял.

Теперь, я подключаю в следующем уроке кнопку ко второму порту и светодиод к 13-му, соответственно, диод должен загореться по нажатию на кнопку. Но у меня снова возникает та же проблема с If-Else — светодиод горит всегда, вне зависимости от нажатия кнопки. (схему пересобирал 2 раза, резисторы перепроверил, что еще сделать ума не приложу). Вот код, скопированный из учебного видео (писал и сам, меняя варианты else if местами):  

 
//Обозначаем пины

const int LED1=9;
const int BUTTON1=2;

void setup() {

// Инициализация
 
pinMode (LED1,OUTPUT);
pinMode (BUTTON1,INPUT);

}

void loop() {

// Цикличное выполнение программы.

  if (digitalRead(BUTTON1)== LOW) // если читается на входе (BUTTON) - ноль (LOW).
     {
    digitalWrite(LED1, LOW); // То на выходе (LED) -  ноль (LOW).
     }
  else      //если иначе (то есть на входе (BUTTON) логическая единица (HIGH) ).
     {
    digitalWrite(LED1,HIGH); // То на выходе (LED) - логическая единица (HIGH).
     }
}

 

 
sadman41
Offline
Зарегистрирован: 19.10.2016

В строке #3 какой пин указан вместо 13-го?

Схема подключения какая?

VivaLaGhetto
Offline
Зарегистрирован: 08.10.2019

sadman41 пишет:

В строке #3 какой пин указан вместо 13-го?

Схема подключения какая?

Это тут ошибся, 9й пин, сейчас сфоткаю схему

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

VivaLaGhetto пишет:
и светодиод к 13-му, соответственно

//Обозначаем пины

const int LED1=9;

это как, или как всегда, ой это я пробовал и забыл...

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

1. Служебные символы по нажатию Enter

2. Дребезг контактов

VivaLaGhetto
Offline
Зарегистрирован: 08.10.2019
b707
Offline
Зарегистрирован: 26.05.2017

VivaLaGhetto пишет:

Но у меня снова возникает та же проблема с If-Else — светодиод горит всегда, вне зависимости от нажатия кнопки.

Судя по коду. у вас светодиод должен гореть при НЕнажатой кнопке. А при нажатой - гаснуть.

Если же светик вовсе на кнопку не реагирует - проверяйте схему в третий раз, в коде ошибок не вижу

b707
Offline
Зарегистрирован: 26.05.2017

ну да, глянул фото - дело в схеме, по картинке похоже у вас светодиод подключен между VCC и GND без всякого управления от контроллера. И без резистора - он не сгорел еще?

VivaLaGhetto
Offline
Зарегистрирован: 08.10.2019

b707 пишет:

VivaLaGhetto пишет:

Но у меня снова возникает та же проблема с If-Else — светодиод горит всегда, вне зависимости от нажатия кнопки.

Судя по коду. у вас светодиод должен гореть при НЕнажатой кнопке. А при нажатой - гаснуть.

Если же светик вовсе на кнопку не реагирует - проверяйте схему в третий раз, в коде ошибок не вижу

Значит я совсем туплю, я этот коду понимаю как:
Если от кнопки получаем 0,
То отправляем на свет 0,
else отправляем на свет 1.

Нет?
 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

b707 пишет:

ну да, глянул фото - дело в схеме, по картинке похоже у вас светодиод подключен между VCC и GND без всякого управления от контроллера. И без резистора - он не сгорел еще?

со светиком все правильно, хотя сначала тоже показалось, а вот кнопка (вывод 2) жестко на + висит.

 

 

negavoid
Offline
Зарегистрирован: 09.07.2016

Светодиод нормально, а вот двойка закорочена с плюсом, вот он и горит постоянно.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

VivaLaGhetto
Offline
Зарегистрирован: 08.10.2019

negavoid пишет:

Светодиод нормально, а вот двойка закорочена с плюсом, вот он и горит постоянно.

можно как для первоклассника? белый провод с оранжевым на выходе с кнопки?

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

кнопка не верно подключена на картинке - белый переставить к резистору

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

белый вверх к резистору!

VivaLaGhetto
Offline
Зарегистрирован: 08.10.2019

Спасибо, умные люди, кажись допетрил, надо перенести контакт второго пина на тот выход с кнопки, который через резистор на землю? Щас попробую

b707
Offline
Зарегистрирован: 26.05.2017

VivaLaGhetto пишет:

Значит я совсем туплю, я этот коду понимаю как:
Если от кнопки получаем 0,
То отправляем на свет 0,
else отправляем на свет 1.

Нет?
 

это зависит от подключения кнопки. У вас кнопка подключена так, что у нее нажатое состояние = LOW, а ненажатое = HIGH. поэтому логика обратная

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

b707 пишет:

VivaLaGhetto пишет:

Значит я совсем туплю, я этот коду понимаю как:
Если от кнопки получаем 0,
То отправляем на свет 0,
else отправляем на свет 1.

Нет?
 

это зависит от подключения кнопки. У вас кнопка подключена так, что у нее нажатое состояние = LOW, а ненажатое = HIGH. поэтому логика обратная

если он провод перенесет, как посоветовали, будет все с точностью до наоборот:)

VivaLaGhetto
Offline
Зарегистрирован: 08.10.2019

Все получилось. Разобрал, пересобрал не по памяти, а стараясь вникать в логику процесса, все отлично, всем спасибо