Bonjour,
je suis perdu comment je pouvais savoir que je devais utiliser .
void setWater(uint8_t mlValue) {
}
La fonction setWater est sensé faire tourner la pompe, mais n'a pas d'info à renvoyer. Du coup, le type de retour est void.
Ensuite, on demande de passer en argument la quantitié d'eau, du coup, il faut un argument, qu'on vas appeller mlValue (tu aurais pu choisir un autre nom, voir même un nom qui correspond à une une autre unité (par exemple ces centilitres)).
On a donc quelque chose de la forme
void setWater(TYPE mlValue) { }
Reste à choisir le type. Là il n'y a pas une unique bonne solution, plusieurs conviennent, le tout est de savoir pourquoi on en choisi une en particulier :
- si tu penses avoir besoin d'être plus précis que le ml, alors une option peut d'être utiliser "float". Ici, on n'est pas au ml près, encore moins à une fraction de ml (surtout que je pense pas que ton capteur est aussi précis). Du coup, ici je ne conseillerais pas cette option
- dans le cas contraire, tu pars sur une variable de type entier (int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, ...)
Le volume d'eau ne peux pas être négatif, du coup ça ne sert à rien de prendre un type signé (ie les intX_t). Du coup, le choix logique est un uintX_t.
Reste à savoir quel est le volume maximum que tu veux pouvoir traiter : un uintX_t peut contenir des entiers de 0 à 2^X-1.
Du coup, un uint8_t peut contenir des valeurs de 0 à 255 (ml); un uint16_t de 0 à 65535 (ml), soit jusqu'à 65 litre; un uint32_t correspond à plus de 4000 m³ d'eau.
Et là, c'est à toi de choisir, selon une application. Plus que 65 litres me parait complètement inutile (le but est d'arroser un Bonsai, pas tout une rizière), du coup uint32_t (et supérieurs) sont à exclure.
Du coup, il ne restes que deux choix raisonnables : uint8_t et uint16_t. Là, je dirais que les deux sont valables, à toi de voir si tu envisage de mettre plus que 255 ml ou pas.
Du coup, en tant que "prof", je t'aurais mis tout les points si tu avais utilisé doit uint8_t, soit uint16_t.
Pour l'utilisation de water_read, l'idée est de toujours réutiliser les fonctions existantes plutôt que de re-écrire un code équivalent : pourquoi re-écrire le calcul du volume d'eau quand tu as une fonction qui le fait déjà?