как программно реализовать след. алгоритм

demon969
Offline
Зарегистрирован: 24.04.2012

Подскажите пожалуйста, как реализовать след. алгоритм:

К 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');
}

 

demon969
Offline
Зарегистрирован: 24.04.2012

Почему, при входе в цилк (при нажатии 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');
}

 

Geronimo
Offline
Зарегистрирован: 06.05.2013

Потому что внутри цикла нет обновления переменной customKey

demon969
Offline
Зарегистрирован: 24.04.2012

Geronimo пишет:

Потому что внутри цикла нет обновления переменной customKey

А как сделать обновления переменной внутри цикла?

Geronimo
Offline
Зарегистрирован: 06.05.2013

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');

}

 

demon969
Offline
Зарегистрирован: 24.04.2012
#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);
}
//***********конец подменю*****************

 

Geronimo
Offline
Зарегистрирован: 06.05.2013

customKey = customKeypad.getKey();

вставь в цикл

перед } while

или после do{

demon969
Offline
Зарегистрирован: 24.04.2012

Получилось! Спасибо! Я программер очень плохой, всегда удивляюсь, ну как это можно понять логически самому?:)

Geronimo
Offline
Зарегистрирован: 06.05.2013

берешь бумагу, рисуешь блок схему алгоритма, потом садишься кодить)