2017-05-12 3 views
0

J'ai un petit affichage LED à 7 segments et je me demandais si je pouvais l'obtenir pour me montrer le dernier chiffre de la minute. J'ai téléchargé la bibliothèque de temps pour Arduino et j'ai essayé plusieurs méthodes, avec le cas de commutateur et si autrement si, mais tous donnent le même résultat, l'affichage LED montre seulement 0 ... Pourriez-vous identifier ce que j'ai mal fait?Vous n'arrivez pas à trouver le bon moment avec arduino?

#include <Time.h> 
#include <TimeLib.h> 

int led1=2; 
int led2=3; 
int led3=4; 
int led4=5; 
int led5=6; 
int led6=7; 
int led7=8; 
int led8=9; 

void setup() { 

    pinMode(led1,OUTPUT); 
    pinMode(led2,OUTPUT); 
    pinMode(led3,OUTPUT); 
    pinMode(led4,OUTPUT); 
    pinMode(led5,OUTPUT); 
    pinMode(led6,OUTPUT); 
    pinMode(led7,OUTPUT); 
    pinMode(led8,OUTPUT); 

} 

void loop(){ 
    time_t t=minute(); 
    int digit1=t%10; 


    if(digit1==1){ 
    digitalWrite(led5, HIGH); 
    digitalWrite(led3, HIGH); 
    }else if(digit1==2) 

    { 
    digitalWrite(led6, HIGH); 
    digitalWrite(led5, HIGH); 
    digitalWrite(led4, HIGH); 
    digitalWrite(led1, HIGH); 
    digitalWrite(led2, HIGH); 
    } else if(digit1==3) 

    { 
    digitalWrite(led4, HIGH); 
    digitalWrite(led6, HIGH); 
    digitalWrite(led5, HIGH); 
    digitalWrite(led3, HIGH); 
    digitalWrite(led2, HIGH); 
    }else if(digit1==4) 

    { 
    digitalWrite(led4, HIGH); 
    digitalWrite(led7, HIGH); 
    digitalWrite(led5, HIGH); 
    digitalWrite(led3, HIGH); 
    }else if(digit1==5) 

    { 
    digitalWrite(led6, HIGH); 
    digitalWrite(led7, HIGH); 
    digitalWrite(led4, HIGH); 
    digitalWrite(led3, HIGH); 
    digitalWrite(led2, HIGH); 
    }else if(digit1==6) 

    { 
    digitalWrite(led6, HIGH); 
    digitalWrite(led7, HIGH); 
    digitalWrite(led4, HIGH); 
    digitalWrite(led1, HIGH); 
    digitalWrite(led2, HIGH); 
    digitalWrite(led3, HIGH); 
    }else if(digit1==7) 

    { 
    digitalWrite(led5, HIGH); 
    digitalWrite(led6, HIGH); 
    digitalWrite(led3, HIGH); 
    }else if(digit1==8) 

    { 
    digitalWrite(led1, HIGH); 
    digitalWrite(led2, HIGH); 
    digitalWrite(led3, HIGH); 
    digitalWrite(led4, HIGH); 
    digitalWrite(led5, HIGH); 
    digitalWrite(led6, HIGH); 
    digitalWrite(led7, HIGH); 
    }else if(digit1==9) 

    { 
    digitalWrite(led2, HIGH); 
    digitalWrite(led3, HIGH); 
    digitalWrite(led4, HIGH); 
    digitalWrite(led5, HIGH); 
    digitalWrite(led6, HIGH); 
    digitalWrite(led7, HIGH); 
    }else if(digit1==0) 

    { 
    digitalWrite(led1, HIGH); 
    digitalWrite(led2, HIGH); 
    digitalWrite(led3, HIGH); 
    digitalWrite(led5, HIGH); 
    digitalWrite(led6, HIGH); 
    digitalWrite(led7, HIGH); 
    } 





}  

Répondre

0

Vous n'avez pas ajouté de conditions basses, donc lorsque la broche est haute, elle reste élevée. Aussi, j'ai vérifié et je pense que votre câblage n'est pas correct. Je poste le code complet ci-dessous et les connexions en conséquence.

CONNECTIONS FOR 7 SEG

#include <Time.h> 
#include <TimeLib.h> 

int a = 2; 
int b = 3; 
int c = 4; 
int d = 5; 
int e = 6; 
int f = 7; 
int g = 8; 
int dp = 9; 

void setup() { 
    pinMode(led1,OUTPUT); 
    pinMode(led2,OUTPUT); 
    pinMode(led3,OUTPUT); 
    pinMode(led4,OUTPUT); 
    pinMode(led5,OUTPUT); 
    pinMode(led6,OUTPUT); 
    pinMode(led7,OUTPUT); 
    pinMode(led8,OUTPUT); 
} 

void loop(){ 
    time_t t=minute(); 
    int digit1=t%10; 


    if(digit1==0) { 
     digitalWrite(a, HIGH); 
     digitalWrite(b, HIGH); 
     digitalWrite(c, HIGH); 
     digitalWrite(d, HIGH); 
     digitalWrite(e, HIGH); 
     digitalWrite(f, HIGH); 
     digitalWrite(g, LOW); 
     digitalWrite(dp, LOW); 
    } 

    else if(digit1==1) { 
     digitalWrite(a, LOW); 
     digitalWrite(b, HIGH); 
     digitalWrite(c, HIGH); 
     digitalWrite(d, LOW); 
     digitalWrite(e, LOW); 
     digitalWrite(f, LOW); 
     digitalWrite(g, LOW); 
     digitalWrite(dp, LOW); 
    } 

    else if(digit1==2) { 
     digitalWrite(a, HIGH); 
     digitalWrite(b, HIGH); 
     digitalWrite(c, LOW); 
     digitalWrite(d, HIGH); 
     digitalWrite(e, HIGH); 
     digitalWrite(f, LOW); 
     digitalWrite(g, HIGH); 
     digitalWrite(dp, LOW); 
    } 

    else if(digit1==3) { 
     digitalWrite(a, HIGH); 
     digitalWrite(b, HIGH); 
     digitalWrite(c, HIGH); 
     digitalWrite(d, HIGH); 
     digitalWrite(e, LOW); 
     digitalWrite(f, LOW); 
     digitalWrite(g, HIGH); 
     digitalWrite(dp, LOW); 
    } 

    else if(digit1==4) { 
     digitalWrite(a, LOW); 
     digitalWrite(b, HIGH); 
     digitalWrite(c, HIGH); 
     digitalWrite(d, LOW); 
     digitalWrite(e, LOW); 
     digitalWrite(f, HIGH); 
     digitalWrite(g, HIGH); 
     digitalWrite(dp, LOW); 
    } 

    else if(digit1==5) { 
     digitalWrite(a, HIGH); 
     digitalWrite(b, LOW); 
     digitalWrite(c, HIGH); 
     digitalWrite(d, HIGH); 
     digitalWrite(e, LOW); 
     digitalWrite(f, HIGH); 
     digitalWrite(g, HIGH); 
     digitalWrite(dp, LOW); 
    } 

    else if(digit1==6) { 
     digitalWrite(a, LOW); 
     digitalWrite(b, LOW); 
     digitalWrite(c, HIGH); 
     digitalWrite(d, HIGH); 
     digitalWrite(e, HIGH); 
     digitalWrite(f, HIGH); 
     digitalWrite(g, HIGH); 
     digitalWrite(dp, LOW); 
    } 

    else if(digit1==7) { 
     digitalWrite(a, HIGH); 
     digitalWrite(b, HIGH); 
     digitalWrite(c, HIGH); 
     digitalWrite(d, LOW); 
     digitalWrite(e, LOW); 
     digitalWrite(f, LOW); 
     digitalWrite(g, LOW); 
     digitalWrite(dp, LOW); 
    } 

    else if(digit1==8) { 
     digitalWrite(a, HIGH); 
     digitalWrite(b, HIGH); 
     digitalWrite(c, HIGH); 
     digitalWrite(d, HIGH); 
     digitalWrite(e, HIGH); 
     digitalWrite(f, HIGH); 
     digitalWrite(g, HIGH); 
     digitalWrite(dp, LOW); 
    } 

    else if(digit1==9) { 
     digitalWrite(a, HIGH); 
     digitalWrite(b, HIGH); 
     digitalWrite(c, HIGH); 
     digitalWrite(d, HIGH); 
     digitalWrite(e, LOW); 
     digitalWrite(f, HIGH); 
     digitalWrite(g, HIGH); 
     digitalWrite(dp, LOW); 
    } 
} 
+0

J'ai essayé votre méthode pour rebrancher et tirer les LED respectives bas mais en vain. Le problème est la valeur que 't' est assignée. J'ai commenté le cas de commutation/si d'autre part si partie et essayé d'imprimer la valeur sur le moniteur série, qui est toujours 0 tout le temps. Je vais également ajouter une photo du moniteur série. –

+0

oui, l'affichage est commun cathode, l'affichage est en fait un affichage à 4 chiffres, avec une cathode pour chaque chiffre, puis une anode pour chaque segment conduit (http://raspi.tv/wp-content/uploads/2015/ 11/7seg-pinout-annotated_1500.jpg). Mais le problème n'est pas avec l'affichage, est avec la variable de temps t, et ce qu'il renvoie ... –

+0

Im obtenir la sortie correcte avec le programme ci-dessus. Pour voir le changement, vous devez attendre une minute, puis vous verrez le changement de 0 à 1. J'ai essayé d'utiliser 'time_t t = second();' et j'ai obtenu une sortie toutes les secondes. –

1

Vous n'écrivez jamais l'une des broches pour aller bas. Lorsque la minute suivante arrive, les voyants appropriés s'allument probablement, mais les anciens ne s'éteignent pas, donc vous ne voyez aucun changement.

Pour éviter d'éteindre et d'allumer tous les voyants à chaque cycle, je stocke le dernier chiffre connu et, à chaque itération de boucle, je vois si le chiffre a changé. Si c'est le cas, éteignez toutes les lumières et ensuite exécutez le code que vous avez posté ici.

+0

J'ai essayé votre méthode, mais en vain. Le problème est la valeur que 't' est assignée. J'ai commenté le cas de commutation/si d'autre part si partie et essayé d'imprimer la valeur sur le moniteur série, qui est toujours 0 tout le temps. Je vais également ajouter une photo du moniteur série. –