задвоение выполнения операторов else и default.

DmitryArduino
Offline
Зарегистрирован: 26.03.2019

Добрый день!

Впервые имею дело с платформой Arduino и программированием. Прошу помочь новичку.

Есть вот такой вот код:

int val;
/* Lesson 3. Условный оператор if и оператор выбора switch */
 
 
void setup() {
  Serial.begin(9600);
 
}
 
void loop() { 
    if (Serial.available()) {
      val = Serial.parseInt();
         /* Serial.println (val); */
      switch (val) {
     case 1: Serial.println ("Вы ввели 1");
     break;
     case 2: Serial.println ("Вы ввели 2");
     default: Serial.println ("Мимо!");
     
     break;
     
      }
    }
  }
   

пи выполнении любой операции, задуманной программой, к результатам добавляется надпись "Мимо!". Если я выбираю число, отличное от 1 или 2, то Мимо!" выводится на экран ( через монитор порта) также дважды.

если строчку с командой default убить, то пробема исчезает. 

При использовании вместо switch операторов if и else ситуация аналогичная. Если else усть в коде в самом конце ( вместо default), то результат задвоен. Если else убрать в конце. то программа резульаты не задваивает.

 

Пробовал две платы:

1. Arduino Mega, которую распаковал из коробки и прошил пару дней назад самой свежей прошивкой 1.8.9. 

2. Arduino Nano - взял у друга вчера и залил на неё этот же код.

Результаты работы вышеуказанного кода на обеих платах одинаковые. 

На компе операционная система windows 7.

В интернете при беглом поиске ответ не нашёл. Прошу спецов подсказать новичку.

 

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

Ну и я помогу http://arduino.ru/Reference/SwitchCase

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

DmitryArduino - сообщение "Мимо" после чисел выводится потому. что вы набираете на клавиатуре число и нажимаете Enter. Этот "Enter" тоже отправляется в Ардуино - а поскольку он не равен ни 1 ни 2 - то выводится Мимо

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

А ещё, во втором case пропущен break.

DmitryArduino
Offline
Зарегистрирован: 26.03.2019

Спасибо, сейчас попробую!

DmitryArduino
Offline
Зарегистрирован: 26.03.2019

 

Спасибо, сейчас попробую!

DmitryArduino
Offline
Зарегистрирован: 26.03.2019

KindMan пишет:
Ну и я помогу http://arduino.ru/Reference/SwitchCase

 

Спасибо, сейчас попробую!

DmitryArduino
Offline
Зарегистрирован: 26.03.2019

b707 пишет:

DmitryArduino - сообщение "Мимо" после чисел выводится потому. что вы набираете на клавиатуре число и нажимаете Enter. Этот "Enter" тоже отправляется в Ардуино - а поскольку он не равен ни 1 ни 2 - то выводится Мимо

 

побежал подключать плату)))

 

DmitryArduino
Offline
Зарегистрирован: 26.03.2019

asam пишет:
А ещё, во втором case пропущен break.

 

Спасибо!

DmitryArduino
Offline
Зарегистрирован: 26.03.2019

b707 пишет:

DmitryArduino - сообщение "Мимо" после чисел выводится потому. что вы набираете на клавиатуре число и нажимаете Enter. Этот "Enter" тоже отправляется в Ардуино - а поскольку он не равен ни 1 ни 2 - то выводится Мимо

 

не скработало. нажал "отправить" на мониторе порта. также задвоилось, как и при нажатии Enter.

DmitryArduino
Offline
Зарегистрирован: 26.03.2019

asam пишет:
А ещё, во втором case пропущен break.

 

Исправил и всё равно задвоенный результат:

Вы ввели 1
Мимо!
 

 

вот сам код теперь:

 

int val;
/* Lesson 3. Условный оператор if и оператор выбора switch */
 
 
void setup() {
  Serial.begin(9600);
 
}
 
void loop() { 
    if (Serial.available()) {
      val = Serial.parseInt();
         /* Serial.println (val); */
      switch (val) {
     case 1: Serial.println ("Вы ввели 1");
     break;
     case 2: Serial.println ("Вы ввели 2");
     break;
     default: Serial.println ("Мимо!");
     
     
     
      }
    }
  }
   
DmitryArduino
Offline
Зарегистрирован: 26.03.2019

 

Спасибо, отличная штука!  Откуда скачать, чтобы без вирусов, порекомендуете?

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Раскомментируй строку после parseInt и тебе станет все понятно.

DmitryArduino
Offline
Зарегистрирован: 26.03.2019

asam пишет:

Раскомментируй строку после parseInt и тебе станет все понятно.

 

Готово. Вот результат:

1
Вы ввели 1
0
Мимо!
 
 
DmitryArduino
Offline
Зарегистрирован: 26.03.2019

 

Разобрался, это форума кусок. Сразу не увидел эту встроенную форму. 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

DmitryArduino пишет:

asam пишет:

Раскомментируй строку после parseInt и тебе станет все понятно.

 

Готово. Вот результат:

1
Вы ввели 1
0
Мимо!
 
 

Чтобы стало понятно, нужно кроме "Мимо!" выводить на печать еще и значение, прилетевшее в порт.

DmitryArduino
Offline
Зарегистрирован: 26.03.2019

andriano пишет:

DmitryArduino пишет:

asam пишет:

Раскомментируй строку после parseInt и тебе станет все понятно.

 

Готово. Вот результат:

1
Вы ввели 1
0
Мимо!
 
 

Чтобы стало понятно, нужно кроме "Мимо!" выводить на печать еще и значение, прилетевшее в порт.

Не понял всё равно. На всякий случай, привёл код в соответствие с обучающим видео. И всё равно не работает. Вот видос.  5-ая минута 19-ая секунда. https://www.youtube.com/watch?v=hnKImcN3jYE&index=6&list=PLgAbBhxTglwmVx...

 

int val;
/* Lesson 3. Условный оператор if и оператор выбора switch */


void setup() {
  Serial.begin(9600);
 
}

void loop() { 
    if (Serial.available()) {
     val = Serial.parseInt(); 
   switch (val) {
      case 1: Serial.println ("Вы ввели 1");
         break;
      case 2: Serial.println ("Вы ввели 2");
         break;
      case 3: Serial.println ("Вы ввели 3");
         break;
       default: Serial.println ("Мимо!");
     
     
     
      }
    }
  }
   

 

DmitryArduino
Offline
Зарегистрирован: 26.03.2019

DmitryArduino пишет:

asam пишет:

Раскомментируй строку после parseInt и тебе станет все понятно.

 

Готово. Вот результат:

1
Вы ввели 1
0
Мимо!
 
немного поправил код. Всё равно не работает.
 
int val;
/* Lesson 3. Условный оператор if и оператор выбора switch */


void setup() {
  Serial.begin(9600);
 
}

void loop() { 
    if (Serial.available()) {
     val = Serial.parseInt(); 
   switch (val) {
      case 1: Serial.println ("Вы ввели 1");
         break;
      case 2: Serial.println ("Вы ввели 2");
         break;
      case 3: Serial.println ("Вы ввели 3");
         break;
       default: Serial.println ("Мимо!");
     
     
     
      }
    }
  }
   

 

 

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

Откройте Сериал монитор. В правом нижнем углу "Newline" видите? Замените на "No line ending". Вводите числа.

DmitryArduino
Offline
Зарегистрирован: 26.03.2019

sadman41 пишет:

Откройте Сериал монитор. В правом нижнем углу "Newline" видите? Замените на "No line ending". Вводите числа.

 

Урря!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

Заработало!  Спасибо, огромное! ))) Сколько бы я ещё мудохался)

DmitryArduino
Offline
Зарегистрирован: 26.03.2019

Всем спасибо, тема закрыта.

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

ставлю на то, что в итоге ты ничего не понял

SLKH
Offline
Зарегистрирован: 17.08.2015

b707 пишет:

ставлю на то, что в итоге ты ничего не понял

тавлю на то же поле.

по меньшей мере аксиому "слона надо есть по кусочкам".