Коллеги, помогите с кодом

Борис2905
Offline
Зарегистрирован: 18.11.2018

Я совсем недавно начал заниматься Ардуино, и похоже не понял где-то самой логики оператора свитч. Данный код должен выводить (Введите температуру) после нажатия A. После при нажатии 1, 2 или 0, выводилось соответственно 1## или 2##. Загвоздка в том, что после нажатия на A и надписи (Введите температуру), программа игнорирует нажатия 1, 2 и 0. Прошу объяснить где накасячил и как исправить. Буду очень благодарен.

 

#include <Keypad.h> // подключаем нашу библиотеку

const byte ROWS = 4; //число строк у нашей клавиатуры
 
const byte COLS = 4; //число столбцов у нашей клавиатуры
 
boolean flagok = false; // Флажок категорий 
 
boolean flagok1 = false; // Флажок сотен температуры
 
int temp = 0;
 
char hexaKeys[ROWS][COLS] = {
 
{'1','4','7','*'}, // здесь мы располагаем названия наших клавиш, как на клавиатуре,для удобства пользования
 
{'2','5','8','0'},
 
{'3','6','9','#'},
 
{'A','B','C','D'}
 
};
 
byte rowPins[ROWS] = {5, 4, 3, 2}; //к каким выводам подключаем управление строками
 
byte colPins[COLS] = {9, 8, 7, 6}; //к каким выводам подключаем управление столбцами
 
//initialize an instance of class NewKeypad
 
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
 
void setup(){
 
Serial.begin(9600);
 
}
 
void loop(){
  
char customKey = customKeypad.getKey();// Нажатие первое, выбор категории "А"
 
switch(customKey){// Свитч первого нажатия
  
  case 'A':
    flagok = true;// Флажок первый
    Serial.println("Введите температуру");
    break;
    
  default:
    flagok = false;// Флажок первый
    break;
 
 
switch(flagok){
  
  case true:
    char customKey1 = customKeypad.getKey();// Нажатие второе, выбор температуры
    switch(customKey1){
 
    case '1':
       flagok1 = true;// Флажок второй
       Serial.println("1##");
       break;
    case '2':
       flagok1 = true;// Флажок второй
       Serial.println("2##");
       break;
    case '0': 
       flagok1 = true;// Флажок второй
       Serial.println("0##");
       break;
    case false:
       flagok1 = false;// Флажок второй 
       break;
    }
  break;
  
}  
} // VOID LOOP
 
 
 
 
 
 
 
bwn
Offline
Зарегистрирован: 25.08.2014

38 и 45 строки не нравятся.

IVAN222
Offline
Зарегистрирован: 19.04.2017

В момент нажатия на кнопку (А) у Вас  flagok = true, а все остально время  flagok = false, значит все остальное в коде ни когда ни сработает.

switch(customKey){// Свитч первого нажатия
  
  case 'A':
    flagok = true;// Флажок первый
    Serial.println("Введите температуру");
    break;
    
  default:
    flagok = false;// Флажок первый
    break;
 
} 

закаментируйте блок default: Тогда заработает и то не корректно, несколько раз придется жать на кнопки 1,2 или 0, пока в монитор порта выскочит информация.

Борис2905
Offline
Зарегистрирован: 18.11.2018

Ох, спасибо помогли,!! Очень вам обязан)))

Борис2905
Offline
Зарегистрирован: 18.11.2018

Большое спасибо за помощь)))) Программа зарабтала, ошибку понял, думаю, что на эти грабли благодаря вам уже не наступлю!! Спасибо вам огромное!!))