Опять прошу помощи, коллеги, не проходите мимо!!!
- Войдите на сайт для отправки комментариев
Пнд, 26/11/2018 - 22:20
Уже обращался за помощью, кратко опишу проблему: у меня есть 4х4 клавиатура, есть переменная температутры, при нажатии на А должен включаться режим набора температуры. Это я решил реализовать через switch. Но возникла проблема, при нажатии 190(у других комбинаций принцип работы тот же, сделал 2 для пробы) все нормально, а при нажатии 180 происходит магия!!! Код из "190" исполняется и в "180". Начал совсем недавно, может не понимаю логики самого switch? Код ниже, прошу помогите!
#include <Keypad.h> // подключаем нашу библиотеку
const byte ROWS = 4; //число строк у нашей клавиатуры
const byte COLS = 4; //число столбцов у нашей клавиатуры
boolean flagok = false; // Флажок категорий
boolean flagok1 = false; // Флажок сотен температуры
boolean flagok2 = false; // Флажок десятков температуры
boolean flagok3 = false; // Фиговый флажок
int Flagok = 0; // Флажок цифр сотен
int Flagok1 = 0; // Флажок цифр десятков
int Flag = 1;
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;
}
switch (flagok) {
case true:
char customKey1 = customKeypad.getKey();// Нажатие второе, выбор температуры
switch (customKey1) {
case '1':
flagok1 = true;// Флажок второй
Flagok = 1;
Serial.println("1##");
temp = temp + 100;
break;
case '2':
flagok1 = true;// Флажок второй
Flagok = 2;
Serial.println("2##");
temp = temp + 200;
break;
case '0':
flagok1 = true;// Флажок второй
Flagok = 0;
Serial.println("0##");
temp = temp + 0;
break;
}
break;
}
switch(flagok1){
case true:
char customKey2 = customKeypad.getKey();// Нажатие третье, выбор температуры
switch(Flagok){
case 1:
switch (customKey2) {
case '8':
flagok2 = true;
Flagok1 = 18;
Serial.println("18#");
temp = temp + 80;
break;
case '9':
flagok2 = true;
Flagok1 = 19;
Serial.println("19#");
temp = temp + 90;
break;
}
break;
}
break;
}
switch(flagok2){
case true:
char customKey3 = customKeypad.getKey();// Нажатие четвертое, выбор температуры
switch(Flagok1){
case 18:
switch (customKey3) {
case '0':
flagok3 = true;
Serial.println("180");
Serial.println("Ваша температура:");
Serial.println(temp);
break;
}
case 19:
switch (customKey3) {
case '0':
flagok3 = true;
Serial.println("190");
Serial.println("Ваша температура:");
temp = temp + 0;
Serial.println(temp);
break;
}
}
break;
}
} // VOID LOOP
вставь задержку в несколько секунд между 133 и 134 строками
лучше на 136 и 148 брейки добавить, а то в кейсах 18 и 19 чего то не хватает ;)