IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Afficheurs 7 segments


Sujet :

Arduino

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2017
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2017
    Messages : 41
    Points : 26
    Points
    26
    Par défaut Afficheurs 7 segments
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    //74HC595
     
    int dataPin = 2;
    int latchPin = 3;
    int clockPin = 4;
     
    //Alimentation anodes
    int dig4 = 8;
    int dig3 = 7;
    int dig2 = 6;
    int dig1 = 5;
     
     
    //Chiffres 
    byte dec_digits[] = {0b00111111,0b00000110,0b01011011,0b01001111,0b01100110,0b01101101,0b01111101,0b00000111,0b01111111,0b01101111};
     
     
    //Variables correspondant à chaque afficheurs
    int var1;
    int var2;
    int var3;
    int var4;
     
     
    void setup() {
     
    Serial.begin(9600);
     
    pinMode(latchPin, OUTPUT);
    pinMode(clockPin, OUTPUT);
    pinMode(dataPin, OUTPUT);
     
    pinMode(dig1, OUTPUT);
    pinMode(dig2, OUTPUT);
    pinMode(dig3, OUTPUT);
    pinMode(dig4, OUTPUT);
    }
     
    void loop() {
     
    {
     
      //Chiffres à afficher
     
     var1 = 4
     var2 = 5;
     var3 = 6;
     var4 = 7;
     
    //Afficheur de droite
    digitalWrite(latchPin, HIGH);
    shiftOut(dataPin, clockPin, dec_digits[var1], MSBFIRST);
    digitalWrite(latchPin, LOW);
     
    digitalWrite(dig1, 1);
    delay(1);
    digitalWrite(dig1, 0);
     
     
    //Dizaine
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, dec_digits[var2]);
    digitalWrite(latchPin, HIGH);
     
    digitalWrite(dig2, 1);
    delay(1);
    digitalWrite(dig2, 0);
     
    //Centaine
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, dec_digits[var3]);
    digitalWrite(latchPin, HIGH);
     
    digitalWrite(dig3, 1);
    delay(1);
    digitalWrite(dig3, 0);
     
    //Millier
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, dec_digits[var4]);
    digitalWrite(latchPin, HIGH);
     
    digitalWrite(dig4, 1);
    delay(1);
    digitalWrite(dig4, 0);
     
    }
    Bonjour à tous,

    Je souhaite afficher un nombre sur un afficheur 7 segments à 4 chiffres. Le souci, c'est qu'avec le code ci-dessus il m'affiche en continue "0"...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    byte dec_digits[] = {0b00111111,0b00000110,0b01011011,0b01001111,0b01100110,0b01101101,0b01111101,0b00000111,0b01111111,0b01101111};
    Si par exemple je conserve entre les crochets "0b00000110" qui correspond à 1 et que j'efface le reste, il va m'afficher "1".

    Si je laisse le tout, il va lire "0b00111111", qui correspond à "0", mais pas le reste.

    Si j'écris "var1 = 4", il ne m'affichera pas le "4". Il conservera le "0".

    Je comprends pas. Savez-vous d'où vient l'erreur dans mon code ?

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 619
    Points : 56 854
    Points
    56 854
    Billets dans le blog
    40
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    digitalWrite(latchPin, HIGH);
    shiftOut(dataPin, clockPin, dec_digits[var1], MSBFIRST);
    digitalWrite(latchPin, LOW);
    Ne serait-ce pas l'inverse ? Mettre LOW pour charger le registre et HIGH pour le déverrouiller :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, dec_digits[var1], MSBFIRST);
    digitalWrite(latchPin, HIGH);

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2017
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2017
    Messages : 41
    Points : 26
    Points
    26
    Par défaut
    Bonsoir,

    Merci pour votre réponse. J'avais déjà essayé d'inverser et ça ne fonctionne pas........ Ça m'affiche un chiffre bizarre

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 619
    Points : 56 854
    Points
    56 854
    Billets dans le blog
    40
    Par défaut
    Apparemment, tes afficheurs sont à anodes communes. Quand un digit est activé (HIGH), il faut mettre la cathode du segment à LOW pour l'allumer.

    Essaie le complément avec l'opérateur ~ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    shiftOut(dataPin, clockPin, ~dec_digits[var1], MSBFIRST);

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2017
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2017
    Messages : 41
    Points : 26
    Points
    26
    Par défaut
    Merci pour ta réponse !J'ai bien essayé d'ajouter l'opérateur mais ça ne fonctionne non plus pas... Je comprends vraiment pas...

  6. #6
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 619
    Points : 56 854
    Points
    56 854
    Billets dans le blog
    40
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    shiftOut(dataPin, clockPin, ~dec_digits[var1], MSBFIRST);
    shiftOut(dataPin, clockPin, bitOrder, value)

    Arf, tu as inversé les deux paramètres bitOrder et Value...

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2017
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2017
    Messages : 41
    Points : 26
    Points
    26
    Par défaut
    C'est bon, tout refonctionne, merci de ton aide !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Horloge numerique afficheur 7 segments
    Par defjames dans le forum Débuter
    Réponses: 17
    Dernier message: 26/01/2014, 13h12
  2. envoi de données vers un afficheur 7 segments
    Par Inaha dans le forum VB.NET
    Réponses: 3
    Dernier message: 10/06/2013, 09h02
  3. [68HC11] Horloge numérique avec afficheur 7 segments
    Par Need you dans le forum Autres architectures
    Réponses: 2
    Dernier message: 08/04/2012, 09h31
  4. afficheur 7 segments
    Par Orguevirtuel dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 10/04/2011, 21h17
  5. [PIC 16F84] Afficheur 7 segments
    Par Vipear dans le forum Autres architectures
    Réponses: 5
    Dernier message: 29/05/2009, 09h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo