Comment entrer 3 notes au clavier et en faire la moyenne

Bonjour.
C'est une question qui peut paraitre bête mais je trouve pas la solution..ou alors je suis b...

Je déclare un tableau avec 3 cases

puis je tape ma première note
je retranche 48(code ascii)
je la stocke dans la première case

je tape la deuxième
je retranche 48(code ascii)
je la stocke dans la deuxième case

je tape la troisième
je retranche 48(code ascii)
je la stocke dans la troisième case

je récupère les données du tableau, les ajoute et divise le résultats par 3
j'affiche le résultat sur le moniteur série

OUI MAIS : comment mettre mon programme en attente le temps que je stocke la première note
Merci

/*Programme permettant de saisir au clavier les 6 notes et d'en faire la moyenne*/
/*Mon Algorithme: 
je déclare un tableau de 3 cases
J'initialise le moniteur série

      si le moniteur série est disponible 
      j'écris un nombre entier et je retranche 48 puis je le stocke dans la premiere case du tableua
            J'attends 0.5 seconde

     et je fais  la même chose 2 fois en changeant de case du tableau
     Je recupère ces notes que je stocke dans totalNote
Je divise totalNote par 3 et je stocke le résultat dans la variable moyenne
J’affiche sur le moniteur série la moyenne

     
Fin de mon Algorithme*/
int tableauNote[3];
void setup() {
  Serial.begin(9600);
Serial.println("Saisir la note 1:");
}

void loop() {
  
 if (Serial.available()){
    tableauNote[0]= Serial.read()-48;
   
    Serial.print("ma note est:");
  Serial.println(tableauNote[0]);
  Serial.println("Saisir la note 2:");
  delay (1000);
 }
  
   if (Serial.available()){
    tableauNote[1]= Serial.read()-48;
   
    Serial.print("ma note est:");
  Serial.println(tableauNote[1]);
  Serial.println("Saisir la note 3:");
  delay (1000);
  }
 if (Serial.available()){
    tableauNote[1]= Serial.read()-48;
   
    Serial.print("ma note est:");
  Serial.println(tableauNote[2]);
  ;
  delay (1000);
  }
   
  int totalNote = tableauNote[0]+tableauNote[1]+tableauNote[2];
int moyenne = totalNote/3;
Serial.println("la moyenne est :  ");
Serial.println(moyenne);
}

Tu trouveras des explications sur l'entrée de données par la console série dans le tuto de J-M-L, qui comporte aussi des liens pour en savoir plus.

Tu peux partir de ses exemples de code. Si ta note est supérieure à 10, tu peux la construire de manière itérative à chaque lecture : si tu veux entrer le nombre 123

  • première touche '1' : tu initialises la note à cette valeur : note = 1
  • deuxième touche '2' : tu fais note = note*10+2, la note devient 12
  • troisième touche '3 : même chose note = note*10+3 et tu obtiens bien 123.

Merci. je veux juste renter des notes de 0 à 9 pour simplifier. Je vais regarder les liens que tu m'as donné

Mon vieux prof de maths disait toujours "qui peut le plus peut le moins", tu peut prévoir le moment où tu voudras des nombres supérieurs...

Salut

Il suffit d'écrire :

while (Serial.available() == 0);{

Ceci pour chaque saisie.

Ensuite il existe une fonction toute prête :

 int i = Serial.parseInt();

Ensuite si tu as configuré ton moniteur série pour qu'il envoie un "retour chariot" ou "nouvelle ligne", il faut lire ce caractère.

ICI, on attend un caractère "nouvelle ligne" :

  while (Serial.readBytes(&c, 1) != 0) {
    if (c == '\n') {
      break;
    }
  }

Une petite fonction complète :

int read(void)
{
  char c;
  while (!Serial.available());
  int i = Serial.parseInt();
  while (Serial.readBytes(&c, 1) != 0) {
    // attendre "nouvelle ligne"
    if (c == '\n') {                                          // ou '\r' au choix
      break;
    }
  }
  return i;
}

void loop()
{
// ...
  Serial.println("Saisir la note 1:");
  tableauNote[0] = read();
  Serial.print("ma note est:");
  Serial.println(tableauNote[0]);
// ...
// et ainsi de suite

}

J'utilise readBytes() parce que cette fonction exploite un timeout, ce qui n'est pas le cas de read().

@+