как программно реализовать след. алгоритм
- Войдите на сайт для отправки комментариев
Ср, 15/05/2013 - 21:15
Подскажите пожалуйста, как реализовать след. алгоритм:
К uno подключена матричная клавиатура. При долгом нажатии на клавишу 5, попадаем в под меню программы, которое должно либо увеличивать или умешьшать значение переменной при нажатии соответственно клавишь 3 и 4, после установки нужного значения, жмем, к примеру, клавишу А и выходим в основоне тело программы, ну короче как то так.
Пробовал так но это совершенно не работает:
if (customKey == '5'){
do
{
if (customKey == '3')
{
tone(16, 900, 300);
valTemp+= 0.1;
Serial.println("");
Serial.println(valTemp);
}
if (customKey == '4')
{
tone(16, 900, 300);
valTemp-= 0.1;
Serial.println("");
Serial.println(valTemp);
}
}
while (customKey == '6');
}
Почему, при входе в цилк (при нажатии 5) не обрабатываются нажатия клавиш и 3 и 4, т.е. клавиш, зпрограммированных на проверку на нажатие внутри цикла?
if (customKey == '5'){ do { if (customKey == '3') { tone(16, 900, 300); valTemp+= 0.1; Serial.println(""); Serial.println(valTemp); } if (customKey == '4') { tone(16, 900, 300); valTemp-= 0.1; Serial.println(""); Serial.println(valTemp); } } while (customKey != '6'); }Потому что внутри цикла нет обновления переменной customKey
Потому что внутри цикла нет обновления переменной customKey
А как сделать обновления переменной внутри цикла?
customKey = random();
будет на каждом шаге случайное число поллучать)
или customKey = analogRead(0);
с 0-левого пина будет брать значение
как ты читаешь код с клавы?
типа такого сделай
do { if (customKey == '3') { tone(16, 900, 300); valTemp+= 0.1; Serial.println(""); Serial.println(valTemp); } if (customKey == '4') { tone(16, 900, 300); valTemp-= 0.1; Serial.println(""); Serial.println(valTemp); } customKey = getKeyFromKeyboard(); } while (customKey != '6'); }#include <Keypad.h> float valTemp = 50.5; const byte ROWS = 4; //four rows const byte COLS = 3; //four columns //define the cymbols on the buttons of the keypads char hexaKeys[ROWS][COLS] = { { '1','2','3' } , { '4','5','6' } , { '7','8','9' } , { '*','0','#' } }; byte rowPins[ROWS] = {9,8,7,6}; //connect to the row pinouts of the keypad byte colPins[COLS] = {5,4,3}; //connect to the column pinouts of the keypad //initialize an instance of class NewKeypad Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); void setup(void){ Serial.begin(9600); } void loop(){ delay(500); char customKey = customKeypad.getKey(); if (customKey){ Serial.print(customKey); } //***********начало подменю***************** if (customKey == '5'){ tone(16, 900, 300); delay(50); do { if (customKey == '3') { tone(16, 900, 300); valTemp++; ..valTemp+= 0.1; Serial.println(""); Serial.println(valTemp); } delay(50); //if (customKey == '4') { // tone(16, 900, 300); // valTemp--; //valTemp-= 0.1; // Serial.println(""); // Serial.println(valTemp); } delay(50); Serial.println(valTemp); } while (customKey != '6'); } Serial.println("vne cikla"); Serial.println(valTemp); } //***********конец подменю*****************customKey = customKeypad.getKey();
вставь в цикл
перед } while
или после do{
Получилось! Спасибо! Я программер очень плохой, всегда удивляюсь, ну как это можно понять логически самому?:)
берешь бумагу, рисуешь блок схему алгоритма, потом садишься кодить)