Go Down

Topic: n = int(millis()/1000)%10; // les secondes ... et après (Read 870 times) previous topic - next topic

emmett_brown

Bonsoir, j'ai fait un programme sur une UNO pour lire la température d'un DS18B20 et l'afficher à l'envers (digit non implémenté pour afficher  40 °C par exemple dans lOuest, très utile(pas de segment F sur le premier digit)) sur un afficheur de vieux radio réveil de déchetterie.

Au bout de  je ne sais combien de temps, le "  n = int(millis()/1000)%10; " n'a pu l'air de fonctionner puisque je suis obliger déteindre le système et de le rallumer pour qu'il cherche périodiquement la température, sinon il reste bloqué..au bout de 10 ou 12 heures, peut_être le modulo ne marche plus après ou je comprends pas !

fifi82

slt millis() repasse à 0 tout les 50 jours environs soit 4,294,967 secondes

mais si tu utilise le modulo tu ne t'en occupe pas, mais dans ton calcul c'est juste le int qui te bloque

essai plutôt  n =millis()/1000%10;

aussi dans ton programme juste après le loop{ stock la valeur de millis() dans un mot :
unsigned long temps=millis();
// suite du code
n =temps/1000%10;

et utilise "temps" pour faire tes calculs, c'est plus rapide de faire des calcul avec des mots qu'avec des appels de fonctions surtout si tu à plusieurs calculs utilisant millis() dans le code

kamill

Bonjour,

millis() retourne un unsigned long. La conversion usigned -> signed est souvent problématique.
Déclare n comme unsigned int, et pas de cast de millis() en int
n=(millis()/1000)%10;

emmett_brown

Ok, merci les gars (je présume), par contre je ne conseille pas de le faire puisqu'avec le balayage des segments de l'afficheur, la luminosité de celui-ci est telle que l'on ne le voit bien que dans la nuit, et puis c'est bien trop de boulot de soudure.
Mais je post quand même le schéma et la photo du thermo-higro-mètre

Go Up