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 :

Faire défiler des images sur une matrice de leds


Sujet :

Arduino

  1. #1
    Membre averti
    Homme Profil pro
    ingénieur retraité
    Inscrit en
    Juin 2024
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : ingénieur retraité

    Informations forums :
    Inscription : Juin 2024
    Messages : 50
    Par défaut Faire défiler des images sur une matrice de leds
    Bonjour,
    Je poursuis mes petits essais avec les leds.
    J'avais un module 8x8 monochrome 1088BS dans mes "réserves"...Il faisait partie d'un kit pour expérimenter les applications d'un livre...MAIS le module fourni n'était pas le même que celui décrit dans le bouquin...Donc quelques chipotages pour arriver à comprendre.
    NB j'ai aussi un module 8x8 avec driver jamais utilisé! Ce sera pour après!
    C'était aussi une histoire d'anodes et de cathodes. Problème résolu.
    Voici le sketch qui correspond (après quelques modifs de ma part à celui fourni avec le bouquin).
    Il fonctionne et permet d'afficher l'une des icones (ou lettres mises sous forme de matrice) .
    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
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
     
    // Dot_matrix_ICONS.ino
     
    #define Heart {{0, 1, 0, 0, 0, 1, 0, 0}, \
    {1, 0, 1, 0, 1, 0, 1, 0}, \
    {1, 0, 0, 1, 0, 0, 1, 0}, \
    {0, 1, 0, 0, 0, 1, 0, 0}, \
    {0, 0, 1, 0, 1, 0, 0, 0}, \
    {0, 0, 0, 1, 0, 0, 0, 0}, \
    {0, 0, 0, 0, 0, 0, 0, 0}, \
    {0, 0, 0, 0, 0, 0, 0, 0} \
    }
    #define Arrow {{0, 0, 0, 0, 1, 0, 0, 0}, \
    {0, 0, 0, 0, 0, 1, 0, 0}, \
    {0, 0, 0, 0, 0, 0, 1, 0}, \
    {1, 1, 1, 1, 1, 1, 1, 1}, \
    {1, 1, 1, 1, 1, 1, 1, 1}, \
    {0, 0, 0, 0, 0, 0, 1, 0}, \
    {0, 0, 0, 0, 0, 1, 0, 0}, \
    {0, 0, 0, 0, 1, 0, 0, 0} \
    }
    #define Anchor {{0, 0, 0, 1, 1, 0, 0, 0}, \
    {0, 0, 1, 1, 1, 1, 0, 0}, \
    {0, 0, 0, 1, 1, 0, 0, 0}, \
    {0, 0, 0, 1, 1, 0, 0, 0}, \
    {1, 0, 0, 1, 1, 0, 0, 1}, \
    {1, 0, 0, 1, 1, 0, 0, 1}, \
    {0, 1, 0, 1, 1, 0, 1, 0}, \
    {0, 0, 1, 1, 1, 1, 0, 0} \
    }
    #define Space {{0, 0, 0, 0, 0, 0, 0, 0}, \
    {0, 0, 0, 0, 0, 0, 0, 0}, \
    {0, 0, 0, 0, 0, 0, 0, 0}, \
    {0, 0, 0, 0, 0, 0, 0, 0}, \
    {0, 0, 0, 0, 0, 0, 0, 0}, \
    {0, 0, 0, 0, 0, 0, 0, 0}, \
    {0, 0, 0, 0, 0, 0, 0, 0}, \
    {0, 0, 0, 0, 0, 0, 0, 0} \
    }
    #define J {{1, 1, 1, 1, 1, 0, 0, 0}, \
    {0, 0, 0, 0, 1, 0, 0, 0}, \
    {0, 0, 0, 0, 1, 0, 0, 0}, \
    {0, 0, 0, 0, 1, 0, 0, 0}, \
    {1, 1, 0, 0, 1, 0, 0, 0}, \ 
    {1, 0, 0, 0, 1, 0, 0, 0}, \
    {1, 0, 0, 0, 1, 0, 0, 0}, \
    {0, 1, 1, 1, 0, 0, 0, 0}, \
    }
    #define E {{1, 1, 1, 1, 1, 0, 0, 0}, \
    {1, 0, 0, 0, 0, 0, 0, 0}, \
    {1, 0, 0, 0, 0, 0, 0, 0}, \
    {1, 0, 0, 0, 0, 0, 0, 0}, \
    {1, 1, 1, 0, 0, 0, 0, 0}, \
    {1, 0, 0, 0, 0, 0, 0, 0}, \
    {1, 0, 0, 0, 0, 0, 0, 0}, \
    {1, 1, 1, 1, 1, 0, 0, 0}, \
    }
    //
    byte column = 0;
    byte LEDs[8][8];
    int col[8] = {6, 11, 10, 3, 17, 4, 8, 9};
    int row[8] = {2, 7, 19, 5, 13, 18, 12, 16};
    byte patterns[1][8][8] = { E }; //{ Heart, Arrow, Anchor };
    //
    void setup()
    { for (int i = 2; i <= 19; i++) pinMode(i, OUTPUT);
    for (int i = 1; i <= 8; i++) digitalWrite(col[i - 1], HIGH);
    for (int i = 1; i <= 8; i++) digitalWrite(row[i - 1], HIGH);
    }
    //
    void loop() 
    {
    for (int k=1; k=2;k++)
    {if (k=1); 
    {
    clearArray();  
    setPattern(0);
    updateDisplay();
    }
    }
    }
    //
    void clearArray()
    { for (int i = 0; i < 8; i++)
    { for (int j = 0; j < 8; j++) LEDs[i][j] = 0;
    }
    }
    //
    void setPattern(int pattern)
    { for (int i = 0; i < 8; i++)
    { for (int j = 0; j < 8; j++) LEDs[i][j] = patterns[pattern][j][i];
    }
    }
    //
    void updateDisplay()
    { 
      for(int i = 0; i<8;i++)
      {digitalWrite(col[i], HIGH);
      digitalWrite(row[i], LOW);
      }
    //
    column++;
    if (column ==8) column = 0;
    for (int r = 0; r < 8; r++)
    { if (LEDs[column][r] == 1) digitalWrite(row[r], HIGH);
    else digitalWrite(row[r], LOW);
    }
    digitalWrite(col[column], LOW);        
    }
    Je ne suis pas certain que mon code s'est bien installé!!!! Je ne sais plus comment le mettre bien avec des balises code. Désolé.
    Dans les premières accolades de la ligne:
    byte patterns[1][8][8] = { E }; //{ Heart, Arrow, Anchor };,
    je peux choisir l'icone que je veux voir apparaître sur le module. Et il y reste!
    Ce que je souhaite faire c'est faire défiler plusieurs icones (dans un premier temps: une icone apparait 1 seconde, puis une autre apparait et ainsi de suite (en indiquant d'avance quelles icones doivent se succéder).
    J'ai essayé 36 solutions mais rien ne marche.
    Qui peut me donner une piste de solution?
    Merci d'avance
    Roland

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


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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 120
    Billets dans le blog
    47
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    byte patterns[1][8][8] = { E }; //{ Heart, Arrow, Anchor };
    La réponse est dans le commentaire, non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    byte patterns[3][8][8] = { Heart, Arrow, Anchor };
    Et ensuite, quelque chose dans ce genre...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    clearArray();
    for (int k=0; k<3; k++) {
      setPattern(k);
      updateDisplay();
      delay(1000); // Ne pas oublier le delay(), merci umfred ;)
    }

  3. #3
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 753
    Par défaut
    Hello,

    Une piste, mais ce n'est qu'une idée basique (codé en C)
    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
    88
    89
    90
    91
    #include <stdio.h>
     
    int alphabet[][8][8]={
        // Heart
        {
            {0, 1, 0, 0, 0, 1, 0, 0},
            {1, 0, 1, 0, 1, 0, 1, 0},
            {1, 0, 0, 1, 0, 0, 1, 0},
            {0, 1, 0, 0, 0, 1, 0, 0},
            {0, 0, 1, 0, 1, 0, 0, 0},
            {0, 0, 0, 1, 0, 0, 0, 0},
            {0, 0, 0, 0, 0, 0, 0, 0},
            {0, 0, 0, 0, 0, 0, 0, 0} 
        },
        // Arrow
        {
            {0, 0, 0, 0, 1, 0, 0, 0},
            {0, 0, 0, 0, 0, 1, 0, 0}, 
            {0, 0, 0, 0, 0, 0, 1, 0}, 
            {1, 1, 1, 1, 1, 1, 1, 1}, 
            {1, 1, 1, 1, 1, 1, 1, 1}, 
            {0, 0, 0, 0, 0, 0, 1, 0}, 
            {0, 0, 0, 0, 0, 1, 0, 0}, 
            {0, 0, 0, 0, 1, 0, 0, 0} 
        },
        // Anchor
        {
            {0, 0, 0, 1, 1, 0, 0, 0},
            {0, 0, 1, 1, 1, 1, 0, 0},
            {0, 0, 0, 1, 1, 0, 0, 0},
            {0, 0, 0, 1, 1, 0, 0, 0},
            {1, 0, 0, 1, 1, 0, 0, 1},
            {1, 0, 0, 1, 1, 0, 0, 1},
            {0, 1, 0, 1, 1, 0, 1, 0},
            {0, 0, 1, 1, 1, 1, 0, 0}
        },
        // Space
        {
            {0, 0, 0, 0, 0, 0, 0, 0},
            {0, 0, 0, 0, 0, 0, 0, 0},
            {0, 0, 0, 0, 0, 0, 0, 0},
            {0, 0, 0, 0, 0, 0, 0, 0},
            {0, 0, 0, 0, 0, 0, 0, 0},
            {0, 0, 0, 0, 0, 0, 0, 0},
            {0, 0, 0, 0, 0, 0, 0, 0},
            {0, 0, 0, 0, 0, 0, 0, 0}
        },
        // J
        {
            {1, 1, 1, 1, 1, 0, 0, 0},
            {0, 0, 0, 0, 1, 0, 0, 0},
            {0, 0, 0, 0, 1, 0, 0, 0},
            {0, 0, 0, 0, 1, 0, 0, 0},
            {1, 1, 0, 0, 1, 0, 0, 0},
            {1, 0, 0, 0, 1, 0, 0, 0},
            {1, 0, 0, 0, 1, 0, 0, 0},
            {0, 1, 1, 1, 0, 0, 0, 0}
        },
        // E
        {
            {1, 1, 1, 1, 1, 0, 0, 0},
            {1, 0, 0, 0, 0, 0, 0, 0},
            {1, 0, 0, 0, 0, 0, 0, 0},
            {1, 0, 0, 0, 0, 0, 0, 0},
            {1, 1, 1, 0, 0, 0, 0, 0},
            {1, 0, 0, 0, 0, 0, 0, 0},
            {1, 0, 0, 0, 0, 0, 0, 0},
            {1, 1, 1, 1, 1, 0, 0, 0}
        }
    };
     
    enum my_alphabet {HEART, ARROW, ANCHOR, SPACE, J, E};
     
    void DisplayPattern(int pattern [8][8]) {
        for(int i=0; i<8; ++i) {
            for(int j=0; j<8; ++j)
                printf("%d ", pattern[i][j]);    // Serial.print
            puts("");                                  // Serial.printnl
        }
    }
     
     
    int main(void) {
        int chars_to_be_displayed[]={J, ANCHOR, ARROW, SPACE, E};
     
        for(unsigned int i=0; i<sizeof(chars_to_be_displayed)/sizeof(chars_to_be_displayed[0]); ++i) {
            int offset=chars_to_be_displayed[i];
            DisplayPattern(alphabet[offset]);
            puts("");                                  // Serial.printnl
        }
    }
    Edit: code (présentation)

  4. #4
    Membre averti
    Homme Profil pro
    ingénieur retraité
    Inscrit en
    Juin 2024
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : ingénieur retraité

    Informations forums :
    Inscription : Juin 2024
    Messages : 50
    Par défaut
    Bonsoir,
    Voici le code mis à jour comme proposé:
    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
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    // Dot_matrix_ICONS.ino
     
    #define Heart {{0, 1, 0, 0, 0, 1, 0, 0}, \
    {1, 0, 1, 0, 1, 0, 1, 0}, \
    {1, 0, 0, 1, 0, 0, 1, 0}, \
    {0, 1, 0, 0, 0, 1, 0, 0}, \
    {0, 0, 1, 0, 1, 0, 0, 0}, \
    {0, 0, 0, 1, 0, 0, 0, 0}, \
    {0, 0, 0, 0, 0, 0, 0, 0}, \
    {0, 0, 0, 0, 0, 0, 0, 0} \
    }
    #define Arrow {{0, 0, 0, 0, 1, 0, 0, 0}, \
    {0, 0, 0, 0, 0, 1, 0, 0}, \
    {0, 0, 0, 0, 0, 0, 1, 0}, \
    {1, 1, 1, 1, 1, 1, 1, 1}, \
    {1, 1, 1, 1, 1, 1, 1, 1}, \
    {0, 0, 0, 0, 0, 0, 1, 0}, \
    {0, 0, 0, 0, 0, 1, 0, 0}, \
    {0, 0, 0, 0, 1, 0, 0, 0} \
    }
    #define Anchor {{0, 0, 0, 1, 1, 0, 0, 0}, \
    {0, 0, 1, 1, 1, 1, 0, 0}, \
    {0, 0, 0, 1, 1, 0, 0, 0}, \
    {0, 0, 0, 1, 1, 0, 0, 0}, \
    {1, 0, 0, 1, 1, 0, 0, 1}, \
    {1, 0, 0, 1, 1, 0, 0, 1}, \
    {0, 1, 0, 1, 1, 0, 1, 0}, \
    {0, 0, 1, 1, 1, 1, 0, 0} \
    }
    #define Space {{0, 0, 0, 0, 0, 0, 0, 0}, \
    {0, 0, 0, 0, 0, 0, 0, 0}, \
    {0, 0, 0, 0, 0, 0, 0, 0}, \
    {0, 0, 0, 0, 0, 0, 0, 0}, \
    {0, 0, 0, 0, 0, 0, 0, 0}, \
    {0, 0, 0, 0, 0, 0, 0, 0}, \
    {0, 0, 0, 0, 0, 0, 0, 0}, \
    {0, 0, 0, 0, 0, 0, 0, 0} \
    }
    #define J {{1, 1, 1, 1, 1, 0, 0, 0}, \
    {0, 0, 0, 0, 1, 0, 0, 0}, \
    {0, 0, 0, 0, 1, 0, 0, 0}, \
    {0, 0, 0, 0, 1, 0, 0, 0}, \
    {1, 1, 0, 0, 1, 0, 0, 0}, \ 
    {1, 0, 0, 0, 1, 0, 0, 0}, \
    {1, 0, 0, 0, 1, 0, 0, 0}, \
    {0, 1, 1, 1, 0, 0, 0, 0}, \
    }
    #define E {{1, 1, 1, 1, 1, 0, 0, 0}, \
    {1, 0, 0, 0, 0, 0, 0, 0}, \
    {1, 0, 0, 0, 0, 0, 0, 0}, \
    {1, 0, 0, 0, 0, 0, 0, 0}, \
    {1, 1, 1, 0, 0, 0, 0, 0}, \
    {1, 0, 0, 0, 0, 0, 0, 0}, \
    {1, 0, 0, 0, 0, 0, 0, 0}, \
    {1, 1, 1, 1, 1, 0, 0, 0}, \
    }
    //
    byte column = 0;
    byte LEDs[8][8];
    int col[8] = {6, 11, 10, 3, 17, 4, 8, 9};
    int row[8] = {2, 7, 19, 5, 13, 18, 12, 16};
    //byte patterns[1][8][8] = { E }; //{ Heart, Arrow, Anchor };
    byte patterns[3][8][8] = { Heart, Arrow,Arrow};
    void setup()
    { for (int i = 2; i <= 19; i++) pinMode(i, OUTPUT);
    for (int i = 1; i <= 8; i++) digitalWrite(col[i - 1], HIGH);
    for (int i = 1; i <= 8; i++) digitalWrite(row[i - 1], HIGH);
    }
    //
    void loop() 
    {
    for (int k=1; k=2;k++)
    {if (k=1); 
    {
    clearArray();
    for (k=0; k<3;k++); 
    setPattern(k);
    updateDisplay();
    }
    }
    }
    //
    void clearArray()
    { for (int i = 0; i < 8; i++)
    { for (int j = 0; j < 8; j++) LEDs[i][j] = 0;
    }
    }
    //
    void setPattern(int pattern)
    { for (int i = 0; i < 8; i++)
    { for (int j = 0; j < 8; j++) LEDs[i][j] = patterns[pattern][j][i];
    }
    }
    //
    void updateDisplay()
    { 
      for(int i = 0; i<8;i++)
      {digitalWrite(col[i], HIGH);
      digitalWrite(row[i], LOW);
      }
    //
    column++;
    if (column ==8) column = 0;
    for (int r = 0; r < 8; r++)
    { if (LEDs[column][r] == 1) digitalWrite(row[r], HIGH);
    else digitalWrite(row[r], LOW);
    }
    digitalWrite(col[column], LOW);        
    }
    Il n'y a pas d'erreur de compilation mais rien n'apparait sur le module 8x8!!!
    Une idée?
    Merci pour votre aide.
    Roland

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 503
    Par défaut
    il doit manquer un delay après le updateDisplay, histoire d'avoir le temps de voir l'affichage

  6. #6
    Membre averti
    Homme Profil pro
    ingénieur retraité
    Inscrit en
    Juin 2024
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : ingénieur retraité

    Informations forums :
    Inscription : Juin 2024
    Messages : 50
    Par défaut
    Bonsoir,
    Une piste, mais ce n'est qu'une idée basique
    Merci pour votre réponse, je vais étudier votre programme.
    Il y a pas mal de choses dont je dois chercher la signification ou l'usage.
    Je vous reviens.
    Roland

  7. #7
    Membre averti
    Homme Profil pro
    ingénieur retraité
    Inscrit en
    Juin 2024
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : ingénieur retraité

    Informations forums :
    Inscription : Juin 2024
    Messages : 50
    Par défaut
    Re bonsoir,
    il doit manquer un delay après le updateDisplay, histoire d'avoir le temps de voir l'affichage
    Mainteant une ou l'autre led s'allume (parfois faiblement) d'une manière disparate...
    J'ai fait varier le delay cela change le temps d'affichage de ces leds disparate...
    Je pense qu'effectivement, il y a là une idée à creuser mais il n'y a sans doute pas que ce problème...
    Merci pour votre réponse.
    Roland

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


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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 120
    Billets dans le blog
    47
    Par défaut
    Citation Envoyé par nicrolfi Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ...
    for (int k=1; k=2;k++)
    {if (k=1); 
    {
    clearArray();
    for (k=0; k<3;k++); 
    setPattern(k);
    updateDisplay();
    }
    }
    ...
    Ce n'est pas vraiment ce que j'ai écrit...

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


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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 120
    Billets dans le blog
    47
    Par défaut
    Mmhhh... y aurait-il aussi un multiplexage à gérer ? C'est sans doute plus compliqué que prévu, je reviendrais plus tard...

    Edit : évidemment qu'il y a le multiplexage à gérer, le code ne marchera pas tel quel....

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


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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 120
    Billets dans le blog
    47
    Par défaut
    à tester...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // ...
    const unsigned long interval = 1000;
    //...
     
    for (int k=0; k<3; k++) {
      clearArray();
      setPattern(k);
     
      unsigned long start = millis();
      while ((millis() - start) <= interval) {
        updateDisplay();
        delay(1);
      }
    }

  11. #11
    Membre averti
    Homme Profil pro
    ingénieur retraité
    Inscrit en
    Juin 2024
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : ingénieur retraité

    Informations forums :
    Inscription : Juin 2024
    Messages : 50
    Par défaut
    Le point:
    J'ai corrigé...
    Cela marche en partie:
    Le coeur s'écrit sur le module mais ensuite, plus rien: c'est comme si il n'y avait qu'un motif à afficher.
    Le delay ne fait que ralentir l'écriture du coeur...donc on ne voit qu'une colonne à la fois. en supprimant ce delay, le coeur s'affiche normalement sans clignotement.
    Le delay n'est pas mis au bon endroit?
    Ah oui, j'ai du indiquer int k; en tête du programme, sinon message à la compilation: k n'a pas été défini dans ce scope.
    Encore merci pour vos cogitations et suggestions. Ca avance!!!
    A+
    Roland

  12. #12
    Membre averti
    Homme Profil pro
    ingénieur retraité
    Inscrit en
    Juin 2024
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : ingénieur retraité

    Informations forums :
    Inscription : Juin 2024
    Messages : 50
    Par défaut
    à tester...
    Cela ne change pas grand chose...de plus il faut remplacer 1000 par 1 pour que le coeur ne clignote plus!
    Quand on met 1 à la place de k dans
    setPattern(k);
    c'est l'Arrow qui s'affiche...

    C'est comme si la boucle for k s'arrêtait à k=0

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


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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 120
    Billets dans le blog
    47
    Par défaut
    Peux- tu poster la nouvelle version complète du programme ?

  14. #14
    Membre averti
    Homme Profil pro
    ingénieur retraité
    Inscrit en
    Juin 2024
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : ingénieur retraité

    Informations forums :
    Inscription : Juin 2024
    Messages : 50
    Par défaut
    Bonsoir,
    Merci pour votre patience avec moi!
    Voici:
    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
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    // Dot_matrix_ICONS.ino
     
    #define Heart {{0, 1, 0, 0, 0, 1, 0, 0}, \
    {1, 0, 1, 0, 1, 0, 1, 0}, \
    {1, 0, 0, 1, 0, 0, 1, 0}, \
    {0, 1, 0, 0, 0, 1, 0, 0}, \
    {0, 0, 1, 0, 1, 0, 0, 0}, \
    {0, 0, 0, 1, 0, 0, 0, 0}, \
    {0, 0, 0, 0, 0, 0, 0, 0}, \
    {0, 0, 0, 0, 0, 0, 0, 0} \
    }
    #define Arrow {{0, 0, 0, 0, 1, 0, 0, 0}, \
    {0, 0, 0, 0, 0, 1, 0, 0}, \
    {0, 0, 0, 0, 0, 0, 1, 0}, \
    {1, 1, 1, 1, 1, 1, 1, 1}, \
    {1, 1, 1, 1, 1, 1, 1, 1}, \
    {0, 0, 0, 0, 0, 0, 1, 0}, \
    {0, 0, 0, 0, 0, 1, 0, 0}, \
    {0, 0, 0, 0, 1, 0, 0, 0} \
    }
    #define Anchor {{0, 0, 0, 1, 1, 0, 0, 0}, \
    {0, 0, 1, 1, 1, 1, 0, 0}, \
    {0, 0, 0, 1, 1, 0, 0, 0}, \
    {0, 0, 0, 1, 1, 0, 0, 0}, \
    {1, 0, 0, 1, 1, 0, 0, 1}, \
    {1, 0, 0, 1, 1, 0, 0, 1}, \
    {0, 1, 0, 1, 1, 0, 1, 0}, \
    {0, 0, 1, 1, 1, 1, 0, 0} \
    }
    #define Space {{0, 0, 0, 0, 0, 0, 0, 0}, \
    {0, 0, 0, 0, 0, 0, 0, 0}, \
    {0, 0, 0, 0, 0, 0, 0, 0}, \
    {0, 0, 0, 0, 0, 0, 0, 0}, \
    {0, 0, 0, 0, 0, 0, 0, 0}, \
    {0, 0, 0, 0, 0, 0, 0, 0}, \
    {0, 0, 0, 0, 0, 0, 0, 0}, \
    {0, 0, 0, 0, 0, 0, 0, 0} \
    }
    #define J {{1, 1, 1, 1, 1, 0, 0, 0}, \
    {0, 0, 0, 0, 1, 0, 0, 0}, \
    {0, 0, 0, 0, 1, 0, 0, 0}, \
    {0, 0, 0, 0, 1, 0, 0, 0}, \
    {1, 1, 0, 0, 1, 0, 0, 0}, \ 
    {1, 0, 0, 0, 1, 0, 0, 0}, \
    {1, 0, 0, 0, 1, 0, 0, 0}, \
    {0, 1, 1, 1, 0, 0, 0, 0}, \
    }
    #define E {{1, 1, 1, 1, 1, 0, 0, 0}, \
    {1, 0, 0, 0, 0, 0, 0, 0}, \
    {1, 0, 0, 0, 0, 0, 0, 0}, \
    {1, 0, 0, 0, 0, 0, 0, 0}, \
    {1, 1, 1, 0, 0, 0, 0, 0}, \
    {1, 0, 0, 0, 0, 0, 0, 0}, \
    {1, 0, 0, 0, 0, 0, 0, 0}, \
    {1, 1, 1, 1, 1, 0, 0, 0}, \
    }
    //
    int k=0;
    const unsigned long interval =1;
    byte column = 0;
    byte LEDs[8][8];
    int col[8] = {6, 11, 10, 3, 17, 4, 8, 9};
    int row[8] = {2, 7, 19, 5, 13, 18, 12, 16};
    //byte patterns[1][8][8] = { E }; //{ Heart, Arrow, Anchor };
    byte patterns[3][8][8] = { Heart, Arrow,Anchor};
    void setup()
    { for (int i = 2; i <= 19; i++) pinMode(i, OUTPUT);
    for (int i = 1; i <= 8; i++) digitalWrite(col[i - 1], HIGH);
    for (int i = 1; i <= 8; i++) digitalWrite(row[i - 1], HIGH);
    }
    //
    void loop() 
    {
     
    //clearArray();
    for (int k=0; k<3;k++);{
     
     
     
     
     
    clearArray();
     
    setPattern(k);
     
    unsigned long start = millis();
    while ((millis() - start) <= interval);
    {
    updateDisplay();
    delay(1);
     
    }
    }
    }
     
     
     
    //
    void clearArray()
    { for (int i = 0; i < 8; i++)
    { for (int j = 0; j < 8; j++) LEDs[i][j] = 0;
    }
    }
    //
    void setPattern(int pattern)
    //int pattern = k;///////////////
    { for (int i = 0; i < 8; i++)
    { for (int j = 0; j < 8; j++) LEDs[i][j] = patterns[ pattern][j][i];
    }
    }
    //
    void updateDisplay()
    { 
      for(int i = 0; i<8;i++)
      {digitalWrite(col[i], HIGH);
      digitalWrite(row[i], LOW);
     
      }
    //
    column++;
    if (column ==8) column = 0;
    for (int r = 0; r < 8; r++)
    { if (LEDs[column][r] == 1) digitalWrite(row[r], HIGH);
    else digitalWrite(row[r], LOW);
    }
    digitalWrite(col[column], LOW); 
     
    }
    J'ai testé avant de poster: toujours rien d'autre que le coeur...
    A+
    Roland

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


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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 120
    Billets dans le blog
    47
    Par défaut
    ligne 59, c'est bien 1000 qu'il faut mettre (pour 1000 ms = 1seconde) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const unsigned long interval =1000;
    ligne 76, il y a un point-virgule en trop :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (int k=0; k<3;k++) {

    Et si tu es dans l'EDI Arduino, un CTRL + T pour formater le code ne fera pas de mal...

  16. #16
    Membre averti
    Homme Profil pro
    ingénieur retraité
    Inscrit en
    Juin 2024
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : ingénieur retraité

    Informations forums :
    Inscription : Juin 2024
    Messages : 50
    Par défaut
    Bon samedi,
    Merci pour cette réponse.
    J'ai supprimé la {.
    Cette vidéo avec 1000 à la ligne 59.

    Des leds s'allument un peu n'importe comment (apparemment).
    Cette video donne le résultat avec 1 en ligne 59

    Là, il semble bien que les 3 motifs sont allumés en même temps!mais en clignotant!
    Sans doute encore un problème de timing. J'ai cherché mais pas trouvé de solution...
    Encore un coup de main serait bienvenu.
    PS: comment faite vous pour numéroter les lignes du sketch?
    Merci d'avance.
    Roland

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


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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 120
    Billets dans le blog
    47
    Par défaut
    J'ai manqué un point-virgule en trop en fin de ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ((millis() - start) <= interval)
    while ((millis() - start) <= interval) { ... } ou while ((millis() - start) <= interval); { ... }, ce n'est pas la même chose ! Le point-virgule fatal...

  18. #18
    Membre averti
    Homme Profil pro
    ingénieur retraité
    Inscrit en
    Juin 2024
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : ingénieur retraité

    Informations forums :
    Inscription : Juin 2024
    Messages : 50
    Par défaut
    Grand grand merci et bravo!
    Cela marche...
    Je vais essayer de comprendre le code en détail et relire un peu la théorie de syntaxe...
    Je reviens tantôt...
    Roland
    PS: comment numéroter les lignes du code dans l'ide d'arduino?

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


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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 120
    Billets dans le blog
    47
    Par défaut
    Citation Envoyé par nicrolfi Voir le message
    Comment numéroter les lignes du code dans l'ide d'arduino?
    Je n'ai pas l'ide sous la main, c'est dans le menu 'Préférences', non ?


    Il ne faut pas comprendre seulement le code, mais aussi comment sont câblées les leds de la matrice :
    Nom : 1088bs.png
Affichages : 131
Taille : 545,5 Ko

    La question est comment piloter individuellement 64 leds avec seulement 16 sorties de l'Arduino. Réponse : tu ne peux pas, il faudrait 64 sorties de l'Arduino pour ça. Il faut donc ruser...

    Par contre, tu peux piloter individuellement chaque led sur une même colonne. On met la colonne en question à LOW, et la ligne de la led sur cette colonne à HIGH ou LOW pour l'allumer/éteindre.
    Et tu fais tourner les colonnes très rapidement (le delay(1) pour 1milliseconde) pour que la persistance rétinienne joue son rôle pour abuser notre cerveau

  20. #20
    Membre averti
    Homme Profil pro
    ingénieur retraité
    Inscrit en
    Juin 2024
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : ingénieur retraité

    Informations forums :
    Inscription : Juin 2024
    Messages : 50
    Par défaut
    Bonjour, merci pour vos conseils...
    Pour le brochage du module, j'avais bien compris, j'ai d'ailleurs du modifier le code fourni avec mon bouquin.
    Voici:
    Nom : 446af1f57834e18ee3e016edf5a161ec0c70d1ab.png
Affichages : 129
Taille : 359,4 Ko
    Le module que je possède est un 1088BS. Donc colonnes = cathodes, comme votre schéma.

    Pour la persistance rétinienne, j'avais aussi compris le principe.

    Pour le code, je pars souvent d'un sketch fourni par un bouquin ou trouvé sur internet, puis je le modifie...
    Je tâtonne encore pour le placement de {}, de ; et avec quelques instructions plus rarement utilisées dans les sketchs simples.

    J'ai plus d'expérience avec le basic et visual basic (sur excel).

    J'ai aussi trouvé un code pour faire défiler les icones successivement. C'est un code avec une bibliothèque, de sorte qu'il n'y a quasi rien à faire...
    Je ne sais pas encore si je vais me lancer à essayer de le faire sans cette bibliothèque (pour le fun pur!!!).

    J'ai encore aussi un module 1088AS monté sur un Max7219 (jamais utilisé)... A expérimenter ultérieurement.
    Encore merci et à bientôt...en essayant de ne pas abuser de votre disponibilité.
    Roland

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Faire défiler des images sur une page web
    Par Josda dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 02/03/2021, 23h22
  2. Faire défiler des images sur une page web
    Par Massigne dans le forum ASP.NET
    Réponses: 1
    Dernier message: 08/10/2020, 19h42
  3. faire défiler des images sur une ligne
    Par ploufleouf74 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/09/2010, 18h54
  4. Aligner des images sur une même ligne
    Par cdevl32 dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 08/10/2007, 03h13
  5. Afficher des images sur une grille
    Par Coussati dans le forum Composants VCL
    Réponses: 3
    Dernier message: 27/10/2005, 09h27

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