haifger:
Salut,je n'ai pas tout regardé en détail, mais cette ligne n'est pas logique :
val3 = analogRead(val);Si j'ai bien compris, à la fin de la fonction
luminosite()(qui est appelée juste avant cette ligne), la valeur de la luminosité ambiante est contenue dans la variable globaleval.
val est une variable locale à luminosite().
void luminosite(void)
{
int i;
uint16_t val=0; <----------
Donc les 2 variables sont distinctes.
Si on suit la logique dans laquelle ce programme est écrit, il faudrait supprimer la ligne que j'ai indiqué ci-dessus.
Si on voulait coder proprement il vaudrait mieux supprimer la variable globale et faire retourner la mesure à la fonction luminosité() mais on en est pas encore à ce niveau là.
Il y a toujours une erreur de type de variable sur cette ligne:
dat= (500 * val2) / 1024;
Il me semble que cela avait déjà été évoqué dans un autre post.
val2 peut retourner une valeur comprise entre 0 et 1023 donc le produit par 500 dépasse largement la capacité d'un int.
Donc:
dat=(int)( (500L * (long)val2) / 1024);