Salve a tutti volevo presentarmi a questo forum di arduino per riuscire a trovare una soluzione ad un problema software.
Sono un neofita che ha appena iniziato la programmazione su questa piattaforma e ho riscontrato un problema con la programmazione di una scheda Arduino uno ed una tastiera a membrana keypad 4x4.
Il codice che quoterò qui sotto in pratica doveva far sì che quando il numero confermato sulla keypad premendo il tasto # risultasse inferiore a 4000 o superiore a 20 andava ad incrementare una variabile che avevo realizzato (Variabile int KeyFlag) quando tale variabile era uguale a 1 il codice doveva disabilitare la lettura da tastiera ed andare ad eseguire dei comandi assegnati nel ciclo if KeyFlag==1 (e fin qua ci siamo) ma una volta entrato nella sezione if KeyFlag==1 non sono stato più in grado di resettare la variabile KeyFlag a 0 per tornare a leggere i valori dalla Keypad quando volevo.
In questo esempio se sulla keypad viene scritto 55 e poi viene confermato con cancelletto # la variabile KeyFlag viene effettivamente portata a valore 1 in quanto il numero 55 è compreso fra 20 e 4000 come stabilito e il progrmma entra nello stato if KeyFlag==1 qui ho inserito l'accesione del led della schedina come debug per fare eseguire un comando ad arduino.
Il led si accende il problema è che rimarrà accesso per sempre in quanto non importa cosa faccio o cosa metto nel codice perché il programma si ferma lì e non ne vuole sapere di uscire dal if KeyFlag==1. Quello che chiedevo era se fosse possibile andare avanti indietro nella programmazione arduino per attivare "a chiamata" dei programmi che potevo attivare tramite variabili e resettarli a mio piacimento oppure è una cosa non fattibile? rimango in attesa di una vostra gentile risposta.
#include <Keypad.h>
const int ROW_NUM = 4; //four rows
const int COLUMN_NUM = 4; //four columns
char keys[ROW_NUM][COLUMN_NUM] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte pin_rows[ROW_NUM] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad
byte pin_column[COLUMN_NUM] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM );
String inputString;
long inputInt;
int Value;
int KeyFlag = 0;
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
inputString.reserve(10); // maximum number of digit for a number is 10, change if needed
}
void loop() {
Serial.println(KeyFlag);
if (inputInt > 4000 || inputInt < 20)
{
inputInt = 0;
KeyFlag = 0;
}
else
{
KeyFlag = 1;
}
if (KeyFlag == 0) {
char key = keypad.getKey();
if (key)
{
Serial.println(key);
if (key >= '0' && key <= '9')
{ // only act on numeric keys
inputString += key; // append new character to input string
}
else if (key == '#')
{
if (inputString.length() > 0)
{
inputInt = inputString.toInt(); // YOU GOT AN INTEGER NUMBER
inputString = ""; // clear input
}
}
else if (key == '*')
{
inputString = ""; // clear input
}
}
}
if (KeyFlag == 1)
{
digitalWrite(13, HIGH);
KeyFlag = 0;
}
}