Salut !
Quelques petits rappels de syntaxe :
- Dans la logique Arduino, deux fonctions sont appelées : setup(), au début et une seule fois, dont le but est d'initialiser les variables de ton problème (config pin entrée/sortie, valeur de variables déclarées, BAUD rate pour la communication série, etc.), et loop(), qui est répété jusqu'à extinction ou reset.
- Une variable doit être déclarée en fonction de la portée voulue : si elle n'est utilisée que dans une fonction, elle doit être déclarée dans la fonction (donc entre les accolades de la fonction). Sinon, elle doit être globale (donc en dehors de toute paire d'accolade), et elle sera accessible depuis n'importe quel bloc de code (il faut dans ce cas être archi-rigoureux pour éviter les problèmes).
- il n'est pas possible de déclarer ou d'implémenter une fonction à l'intérieur d'une autre. L'implémentation de la fonction peut se faire avant le code qui l'appelle (dans ce cas, elle est connue tout de suite), ou après le code en question. Sa déclaration doit être faite avant tout appel pour que le compilateur connaisse la fonction quand elle est appelée.
- La déclaration consiste à écrire le prototype de la fonction :
float fonctionCompterAleatoirement(float valeurInitiale);
- l'implémentation consiste à décrire les mécanismes internes de la fonction :
float fonctionCompterAleatoirement(float valeurInitiale)
{ // on ouvre le bloc correspondant à la fonction
float increment = rand() % 3 - 1;
valeurInitiale += increment;
return valeurInitiale;
}
// OU
float fonctionCompterAleatoirement(float valeurInitiale)
{
float increment = rand() % 3 - 1;
return valeurInitiale + increment;
}
- Enfin, on peut appeler la fonction quand on en a besoin :
void loop()
{
float valeurMesuree = analogRead(1);
float resultat = fonctionCompterAleatoirement(valeurMesuree);
Serial.println(resultat);
}
Dans loop, tu n'as que le droit de faire des appels à la fonction. Pas besoin de réécrire le code, le compilateur saura quoi mettre tant que la fonction est correctement déclarée et implémentée.
En dehors de ces rappels de syntaxe, il faut être clair sur la logique de ton programme : tu veux lire des capteurs et calculer une commande motrice pour te recentrer. L'exemple donné par Mike est intéressant : chacune des fonctions correspond à une de ces deux actions. L'une des fonctions utilise un return et pas l'autre, mais c'est un choix d'implémentation (comme celui de séparer lecture et calcul en deux fonctions).
la cela me semble vraiment compliqué Du coups je ne comprends pas du tout cette partie en fait.
On se situe bien dans le void Loop ?
Du coups à quoi sert computeInput ? Car si je comprend bien on le déclare avec int8_t et après je ne le retrouve pas 