Salut la famille j'espère que vous allez bien en tout cas !
j'suis débutant avec Arduino
j'ai un soucis ici sur mon projet j'suis bloqué depuis un temps je vous en prie de vouloir m'aider en tout cas
mon soucis est d'introduire 3 valeurs différentes grâce à un pavé matriciel 4*4 pour les stocker dans un tableau ou trois variables que je veux utiliser plus tard dans mon programme mais j'essaie et je ne parviens pas
#include <Keypad.h>
const byte ROWS = 4; // Nombre de rangées du pavé numérique
const byte COLS = 4; // Nombre de colonnes du pavé numérique
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte pin_rows[ROWS] = {9, 8, 7, 6}; // Broches connectées aux rangées
byte pin_cols[COLS] = {5, 4, 3, 2}; // Broches connectées aux colonnes
Keypad keypad = Keypad(makeKeymap(keys), pin_rows, pin_cols, ROWS, COLS);
int motorPin = 10; // Broche de commande du moteur
int minutes = 0; // Durée de fonctionnement du moteur en minutes
void setup() {
Serial.begin(9600);
pinMode(motorPin, OUTPUT);
}
void loop()
{
// Variables pour stocker les valeurs entrées par l'utilisateur
int value1 = 0;
int value2 = 0;
int value3 = 0;
// Demander à l'utilisateur d'entrer la première valeur
Serial.println("Entrez la premiere valeur :");
value1 = getValueFromKeypad();
if( value1 != 0)
{
// Demander à l'utilisateur d'entrer la deuxième valeur
Serial.println("Entrez la deuxieme valeur :");
value2 = getValueFromKeypad();
if( value2 != 0)
{
// Demander à l'utilisateur d'entrer la troisième valeur
Serial.println("Entrez la troisieme valeur :");
value3 = getValueFromKeypad();
}
}
// Afficher les valeurs entrées par l'utilisateur
Serial.print("Valeur 1 : ");
Serial.println(value1);
Serial.print("Valeur 2 : ");
Serial.println(value2);
Serial.print("Valeur 3 : ");
Serial.println(value3);
delay(1000); // Attendre un peu avant de recommencer
}
int getValueFromKeypad() {
char key;
int value = 0;
// Attendre que des données soient disponibles sur le clavier matriciel
while (!keypad.getState()) {
// Attendre que des données soient disponibles sur le clavier matriciel
}
key = keypad.getKey();
if (keypad.getState()) {
Serial.print("Touche appuyée : ");
Serial.println(key);
}
if (key >= '0' && key <= '9') {
value = key - '0';
} else {
value = -1; // Valeur par défaut si la touche n'est pas un chiffre
}
return value;
}
#include <Keypad.h>
const byte ROWS = 4; //4 rangées
const byte COLS = 3; //3 colonnes
char keys[ROWS][COLS] = { //les symboles, déclarés par leur code ASCII dans le tableau à 2 dimension
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
byte rowPins[ROWS] = { 8, 7, 6, 5 };
byte colPins[COLS] = {4, 3, 2};
Keypad membraneKeypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS); //On initialise une instance de la classe Keypad
const byte tailleMessageMax = 50;
char message[tailleMessageMax + 1]; // +1 car on doit avoir un caractère de fin de chaîne en C, le '\0'
const char marqueurDeFin = '#';
boolean ecouter() {
static byte indexMessage = 0; // static pour se souvenir de cette variable entre 2 appels consécutifs. initialisée qu'une seule fois.
boolean messageEnCours = true;
char c = membraneKeypad.getKey();
if (c != NO_KEY) {
if (c == marqueurDeFin) {
message[indexMessage] = '\0'; // on termine la c-string
indexMessage = 0; // on se remet au début pour la prochaine fois
messageEnCours = false;
} else if (indexMessage <= tailleMessageMax - 1) message[indexMessage++] = (char) c; // on stocke le caractère et on passe à la case suivante
}
return messageEnCours;
}
void setup() {
Serial.begin(115200);
Serial.println("Entrez un chiffre et validez avec #");
}
void loop() {
if (! ecouter()) {
Serial.print("Reçu :"); Serial.println(message);
}
// ici on peut faire autre chose
}
ensuite pour saisir plusieurs entrées, une petite machine à état peut vous aider (cf mon tuto éventuellement)
Non ce n'est pas ce que je veux
mon soucis est d'introduire trois valeurs différentes que je dois stocker dans trois variables différentes donc
une valeur pour la quantité d'eau;
la deuxième pour la durée de cuisson et
la troisième pour la durée de fonctionnement du malaxeur
si vous lisez le tuto sur les machines à états, vous verrez que l'on passe d'état en état quand des conditions sont remplies
ici quand les 3 valeurs sont saisies, l'état devient GO, c'est là que votre code peut s'exécuter. ici j'ai juste imprimé les 3 valeurs puis je suis retourné à l'état DEBUT qui redemande 3 valeurs
case GO:
Serial.print("Les ");
Serial.print(nombreDAcquisitions);
Serial.print(" nombres sont :");
for (unsigned long v : nombres) {
Serial.print(v);
Serial.print(' ');
}
Serial.println("\n------------------\n\n\n");
etat = DEBUT; // on recommence
break;
Oui tu peux, mais pourquoi t'embêter à faire ça puisque nombres[0] contient la valeur de la quantité d'eau.
le seul intérêt pourrait être d'avoir un nom de variable plus explicite, mais dans ce cas autant faire un traitement particulier à la ligne 67, ou l'élément du tableau est assigné avec la valeur saisie