Bonjour,
Je souhaite créer une petite machine qui demanderai un calcul et où l'utilisateur doit taper la réponse et cela ajouterai des points à l'utilisateur seulement je rencontre plusieurs problèmes depuis quelques semaines.
Mon problème est que le code n'attend pas la bonne réponse et donc affiche non stop de nouveau calcul et met tout le temps faux...
Voici ce que j'obtiens dans la console :
Voici des photos de ce que j'obtiens et de l'installation :
Voici le code commenté que j'utilise :
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include <stdlib.h>
#include <time.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // Set the LCD I2C address
const byte ROWS = 4; // Four rows
const byte COLS = 4; // Three columns
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {9,8, 7, 6}; // Connect to the row pinouts of the keypad
byte colPins[COLS] = {5,4, 3, 2}; // Connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
int scrollPosition = 0;
int riddleIndex;
String userInput = "";
//Initialisation des constantes pour stocker les nombres aléatoires de la multiplication.
int fact1 = 0;
int fact2 = 0;
int answer = "";
int score = 0;
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
randomSeed(analogRead(0));
}
void loop() {
// Génère un nombre entre 0 (inclus) et 11 (exclus), donc entre 0 et 10
int fact1 = random(0, 11);
delay(5);
int fact2 = random(0, 11);
//Calcul la réponse que l'utilisateur doit rentrer à la fin pour avoir la bonne réponse.
int respond = fact1*fact2;
//Crée l'affichage de la question avec les nombres aléatoires dans le moniteur pour checker le fonctionnement des variables.
Serial.print(fact1);
Serial.print("x");
Serial.print(fact2);
Serial.println("= ?");
// Afficher la question sur l'écran LCD
lcd.setCursor(0, 0);
lcd.print(fact1);
lcd.print("x");
lcd.print(fact2);
lcd.print("= ?");
char key = keypad.getKey();
//Attends que l'utilisateur rentre les 1,2 ou 3 chiffres et vérifie à chaque fois si ce que l'utilisateur à rentrer est la bonne réponse. Ils concatènent les nombres pour vérifier les chiffres.
if (key){
Serial.print(key);
lcd.print(key);
respond += key;
//Les serial print sont là pour checker les valeurs qui sont encodées et comment elles sont calculées.
Serial.println(key);
Serial.print("+");
Serial.print(respond);
}
//Si la réponse est juste, alors on affiche correct et on ajoute 1 points.
if(respond == answer){
lcd.print("Correct!");
Serial.print("Correct!");
score+=1;
// On affiche le score pour l'utilisateur.
lcd.print("Ton score est de :");
lcd.print(score);
}else{
//Si c'est faux on le dit et on affiche la bonne réponse mais aucun point est gagné !
lcd.print("Faux la bonne réponse était :");
lcd.print(respond);
// On affiche le score pour l'utilisateur.
lcd.print("Ton score est de :");
lcd.print(score);
}}
Merci beaucoup d'avance !
Grégoire



