Molee, rover pas trop bête

Bonjour à tous,

Ça fait quelques temps que j’ai découvert Arduino et que je m’essaie a la programmation.
J’ai quelque notion, mais je suis loin de l’expérience de beaucoup d’entre vous.

J’ai déjà créé un topic pour discuter de mon projet, mais l’idée était encore très immature.
Je reviens avec quelque chose d’un peu plus définis.

Partant d’un petit châssis a chenille avec 2 moteurs DC, j’ai voulu faire comme beaucoup, un petit rover qui se balade un peu partout en évitant les obstacles (je sais… on reste dans l’originalité :slight_smile: )
pour le moment il suit la logique suivante:

avance en avant a fond
si obstacle a 30 cm → ralentit
si obstacle a 10 cm → stop
tourne a droite pendant un délais entre x et y seconde
si obstacle plus loin que 30 cm → en avant a fond
si luminosité trop faible → allume les phare (celle-ci, c’etait pour le fun)

le robot fonctionne, c’est cool

sauf que…

Je voudrai qu’il puisse une fois devant un obstacle, contrôler a gauche puis a droite afin de choisir la meilleur option (et pas betement aller a droite tout le temps)

J’ai du coup penser a une boucle “for” pour remplir un tableau de 4 variable pendant le quart de tour a gauche (idem a droite)

sauf que problème, la variable distance ne varie jamais dans la boucle.
Une fois rentré dedans, plus rien de bouge.

voici le code actuel:

void loop()
{
  digitalWrite(trig, HIGH); 
  delayMicroseconds(10); 
  digitalWrite(trig, LOW); 
  lecture_echo = pulseIn(echo, HIGH); 
  cm = lecture_echo/58; // cm = valeur a renvoyer au programme pour eviter l'obstacle 
      Serial.print ("cm dans loop ");
      Serial.println(cm);
      
  for(Index = 0; Index < Nbr_Index; Index++)
  { 
    Ecriture_Tab_G[Index] = cm;  // valeur du capteur dans l'Index pointé
    Total = Total + Ecriture_Tab_G[Index];  // ajout de la valeur capteur au total
      Serial.print ("cm dans for ");
      Serial.println(cm);
      Serial.print ("Index ");
      Serial.println(Index);
    delay(t/(Nbr_Index+1)); //attente pour prochain echantillon de valeur
  }
}

et le resultat:

cm dans loop 0
cm dans for 0
Index 0
14
Index 1
cm dans for 14
Index 2
cm dans for 14
Index 3
cm dans for 14
Index 4
cm dans loop 0
cm dans for 0
Index 0
cm dans loop 2980
cm dans for 2980
Index 0
cm dans for 2980
Index 1
cm dans for 2980
Index 2
cm dans for 2980
Index 3
cm dans for 2980
Index 4
cm dans loop 9

Il semblerait qu’il faille refaire le calcul de distance dans la boucle, mais ca me semble très “sale” comme programmation.
Est-ce le seul moyen?

Quelqu’un aurait une idée?
Ca fait un moment que je me triture les méninges mais je n’ai pas l’impression de chercher au bon endroit :confused:

Merci