Bonjour,
La fonction ci-dessous fait un défilement du texte vers la bas. En appuyant sur un bouton (ici B), le défilement doit s'arrêter et une fonction a( ) démarre:
Je n'ai trouvé d'autre alternative que de placer un "if (digitalRead(buttonBpin) == LOW) { a();}" après chaque ligne pour que ça fonctionne. Il y a des ratés, car parfois il faut appuyer 2 fois, voire garder brièvement le bouton appuyé. Et le code n'est pas élégant.
Il y a-t-il une autre façon de faire?
Merci
C'est vrai qu'elle est bizarre cette fonction, on a l'impression qu'on ne peut pas sortir du while. La condition de sortie serait y>8 mais à l'intérieur tu mets y = 0 s'il vaut 9.
Donc la condition de sortie n'est jamais réalisée.
Il y a une sonde T° attachée à l'Arduino (DHT11): avec temp = dht.readTemperature(); la température est mise à jour à chaque loop.
le delay (50) c'est la vitesse de défilement, je comprends que l'idéal est de n'avoir aucun delay pour que les boutons deviennent réactifs.
Mais s'il n'y a pas de delay, le défilement est tellement rapide, qu'il ne sert à rien.
@lesept
tu as raison, je vais corriger. Le défilement fonctionne quand même parce que le 9 n'est jamais atteint mais le 8 oui, ce qui provoque la sortie du loop.
mais y n'est jamais remis à 0.
Je vais essayer ta proposition :
attachInterrupt(digitalPinToInterrupt(buttonBpin), a, LOW);
Si l'interruption ne fonctionne pas, l'autre solution est de mesurer le temps et de ne faire des mesures de température que toutes les cinquante millisecondes avec millis. On peut alors se passer du delay et scanner le bouton plus souvent.
Avez vous besoin de lire la température si souvent ? Un appel à dht.readTemperature() prend au moins 250ms... ça rend la lecture des boutons très peu ergonomique
Merci beaucoup pour vos précieux conseils.
Je vais essayer de séparer les actions, par exemple l'appel température est réalisé dans une fonction X et l'affichage du résultat dans une autre fonction Y, avec l'appel boutons. Au lieu d'avoir tout sous une même fonction.
J'ai pas encore eu le temps d'essayer attachInterrup, ça a l'air intéressant.
Il faut lire la température à un rythme raisonnable par rapport à la vitesse d’évolution de la température. Si c’est juste dans une pièce de la maison, lire toutes les 10 ou 15 minutes sera sans doute suffisant, pas la peine de lire toutes les 500ms...