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 :

BP et jeu de LED


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    Par défaut BP et jeu de LED
    Bonjour,

    Je reviens vers vous avec un code un peu particulier. A l'aide de plusieurs boutons poussoirs je rends fixe un jeu de LED qui clignotent.

    J'appuie sur un bouton poussoir, la LED associée en face devient fixe et celle à côté se met à clignoter. J'appuie sur le BP en face de celle qui s'est mise à clignoter, elle devient fixe et sa voisine se met à clignoter aussi et ainsi de suite jusqu'à ce que toutes soient fixes (non clignotantes).

    Tout fonctionne mais la fréquence de clignotement ne correspond pas à l'intervalle allumé/éteint de 100 ms que je demande au système. Elles clignotent toutes les secondes. Le code me semble super lourd.

    Existe-t-il une façon de l'alléger ?

    Merci

    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
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    #include <Wire.h>
    #include "Adafruit_MCP23017.h"
     
    Adafruit_MCP23017 mcp;
    Adafruit_MCP23017 mcp1;
    Adafruit_MCP23017 mcp2;
     
    int compteur = 0; 
    int compteur1 = 0;
    int compteur2 = 0; 
    int compteur3 = 0; 
    int compteur4 = 0;
    int compteur5 = 0; 
    int compteur6 = 0; 
     
     
    int point = 0; 
     
    bool clignotementV = true; 
    const unsigned long Intervaldeclignotement = 100; 
    unsigned long Millisactuel; 
    unsigned long Millisprecedent;
     
     
    bool clignotementV1 = true; 
    const unsigned long Intervaldeclignotement1 = 100; 
    unsigned long Millisactuel1; 
    unsigned long Millisprecedent1;
     
    bool clignotementV2 = true; 
    const unsigned long Intervaldeclignotement2 = 100; 
    unsigned long Millisactuel2; 
    unsigned long Millisprecedent2;
     
     
    bool clignotementB = true; 
    const unsigned long Intervaldeclignotement3 = 100; 
    unsigned long Millisactuel3; 
    unsigned long Millisprecedent3;
     
     
    bool clignotementB1 = true; 
    const unsigned long Intervaldeclignotement4 = 100; 
    unsigned long Millisactuel4; 
    unsigned long Millisprecedent4;
     
    bool clignotementB2 = true; 
    const unsigned long Intervaldeclignotement5 = 100; 
    unsigned long Millisactuel5; 
    unsigned long Millisprecedent5;
     
    bool clignotementVE = true; 
    const unsigned long Intervaldeclignotement6 = 100; 
    unsigned long Millisactuel6; 
    unsigned long Millisprecedent6;
     
     
    bool clignotementVE1 = true; 
    const unsigned long Intervaldeclignotement7 = 100; 
    unsigned long Millisactuel7; 
    unsigned long Millisprecedent7;
     
    bool clignotementVE2 = true; 
    const unsigned long Intervaldeclignotement8 = 100; 
    unsigned long Millisactuel8; 
    unsigned long Millisprecedent8;
     
     
     
     
    void setup() {
     
    Serial.begin(9600);
     
    mcp.begin();
    mcp1.begin(1);
    mcp2.begin(4);
     
    mcp.pinMode(0, OUTPUT);
    mcp.pinMode(1, OUTPUT);
    mcp.pinMode(2, OUTPUT);
    mcp.pinMode(3, OUTPUT);
    mcp.pinMode(4, OUTPUT);
    mcp.pinMode(5, OUTPUT);
    mcp.pinMode(6, OUTPUT);
    mcp.pinMode(7, OUTPUT);
    mcp.pinMode(8, OUTPUT);
    mcp.pinMode(9, OUTPUT);
    mcp.pinMode(10,OUTPUT);
    mcp.pinMode(11,OUTPUT);
    mcp.pinMode(12,OUTPUT);
    mcp.pinMode(13,OUTPUT);
    mcp.pinMode(14,OUTPUT);
     
    mcp.digitalWrite(0, LOW);
    mcp.digitalWrite(1, LOW);
    mcp.digitalWrite(2, LOW);
    mcp.digitalWrite(3, LOW);
    mcp.digitalWrite(4, LOW);
    mcp.digitalWrite(5, LOW);
    mcp.digitalWrite(6, LOW);
    mcp.digitalWrite(7, LOW);
    mcp.digitalWrite(8, LOW);
    mcp.digitalWrite(9, LOW);
    mcp.digitalWrite(10,LOW);
    mcp.digitalWrite(11,LOW);
    mcp.digitalWrite(12,HIGH);
    mcp.digitalWrite(13,HIGH);
    mcp.digitalWrite(14,HIGH);
     
    mcp1.pinMode(0,OUTPUT);
    mcp1.pinMode(1,OUTPUT);
    mcp1.pinMode(2,OUTPUT);
    mcp1.pinMode(3,OUTPUT);
    mcp1.pinMode(4,OUTPUT);
    mcp1.pinMode(5,OUTPUT);
    mcp1.pinMode(6,OUTPUT);
    mcp1.pinMode(7,OUTPUT);
     
    mcp1.digitalWrite(0, HIGH);
    mcp1.digitalWrite(1, LOW);
    mcp1.digitalWrite(2, LOW);
    mcp1.digitalWrite(3, LOW);
    mcp1.digitalWrite(4, LOW);
    mcp1.digitalWrite(5, LOW);
    mcp1.digitalWrite(6, LOW);
     
    mcp1.pinMode(7,INPUT);
    mcp1.pinMode(8,INPUT);
    mcp1.pinMode(9,INPUT);
    mcp1.pinMode(10,INPUT);
    mcp1.pinMode(11,INPUT);
    mcp1.pinMode(12,INPUT);
    mcp1.pinMode(13,INPUT);
    mcp1.pinMode(14,INPUT);
    mcp1.pinMode(15,INPUT);
     
    mcp1.pullUp(7, HIGH);
    mcp1.pullUp(8, HIGH);
    mcp1.pullUp(9, HIGH);
    mcp1.pullUp(10, HIGH);
    mcp1.pullUp(11, HIGH);
    mcp1.pullUp(12, HIGH);
    mcp1.pullUp(13, HIGH);
    mcp1.pullUp(14, HIGH);
    mcp1.pullUp(15, HIGH);
     
    mcp2.pinMode(0,INPUT);
    mcp2.pinMode(1,INPUT);
     
    mcp2.pullUp(0, HIGH);
    mcp2.pullUp(1, HIGH);
     
     
    }
     
    void loop() {
     
    if (point == 1){
      mcp.digitalWrite(3, HIGH);
    }
     
    if (point >= 2){
      mcp.digitalWrite(4, HIGH);
    }
     
    if (point >= 3){
      mcp.digitalWrite(5, HIGH);
    }
     
     
     
    //LED 1
     
     if (clignotementV) {
      Millisactuel = millis();
      if ((unsigned long)(Millisactuel - Millisprecedent) >= Intervaldeclignotement) {
       mcp.digitalWrite(9, !mcp.digitalRead(9));
       Millisprecedent = Millisactuel; 
      }
     
     } else {
      mcp.digitalWrite(9, HIGH);
     }
     
     int lecturebouton = mcp1.digitalRead(7);
     delay(50); 
     
     if (lecturebouton==LOW){
      clignotementV=false;
        compteur++;
      delay(50);
       }
     
    //LED 2
     
     if (clignotementV1) {
      Millisactuel1 = millis();
       if (((unsigned long)(Millisactuel1 - Millisprecedent1) >= Intervaldeclignotement1) && (compteur==1)) {
       mcp.digitalWrite(10, !mcp.digitalRead(10)); 
       Millisprecedent1 = Millisactuel1; 
      }
     } else {
      mcp.digitalWrite(10, HIGH);
        }
     
     int lecturebouton1 = mcp1.digitalRead(8);
     delay(50); 
     
     if ((lecturebouton1==LOW) && (compteur ==1)){
      clignotementV1=false;
    compteur1++;
       }
     
    //LED 3
     
      if (clignotementV2) {
      Millisactuel2 = millis();
       if (((unsigned long)(Millisactuel2 - Millisprecedent2) >= Intervaldeclignotement2) && (compteur1==1)) {
       mcp.digitalWrite(11, !mcp.digitalRead(11)); 
       Millisprecedent2 = Millisactuel2; 
      }
     }
     else {
      mcp.digitalWrite(11, HIGH);
       }
     int lecturebouton2 = mcp1.digitalRead(9);
     delay(50); 
     
     if ((lecturebouton2==LOW)&& (compteur1==1)) {
      clignotementV2=false;
      point++;
       }
     
    //LED 4
     
     if (clignotementB) {
      Millisactuel3 = millis();
      if ((unsigned long)(Millisactuel3 - Millisprecedent3) >= Intervaldeclignotement3) {
       mcp1.digitalWrite(1, !mcp1.digitalRead(1));
       Millisprecedent3 = Millisactuel3; 
      }
     
     } else {
      mcp1.digitalWrite(1, HIGH);
     }
     
     int lecturebouton3 = mcp1.digitalRead(11);
     delay(50); 
     
     if (lecturebouton3==LOW){
      clignotementB=false;
        compteur2++;
      delay(50);
       }
     
    //LED 5
     
    if (clignotementB1) {
      Millisactuel4 = millis();
       if (((unsigned long)(Millisactuel4 - Millisprecedent4) >= Intervaldeclignotement4) && (compteur2==1)) {
       mcp1.digitalWrite(2, !mcp1.digitalRead(2)); 
       Millisprecedent4 = Millisactuel4; 
      }
     } else {
      mcp1.digitalWrite(2, HIGH);
        }
     
     int lecturebouton4 = mcp1.digitalRead(12);
     delay(50); 
     
     if ((lecturebouton4==LOW) && (compteur2==1)){
      clignotementB1=false;
    compteur3++;
       }
     
    //LED 6
     
    if (clignotementB2) {
      Millisactuel5 = millis();
       if (((unsigned long)(Millisactuel5 - Millisprecedent5) >= Intervaldeclignotement5) && (compteur3==1)) {
       mcp1.digitalWrite(3, !mcp1.digitalRead(3)); 
       Millisprecedent5 = Millisactuel5; 
      }
     } else {
      mcp1.digitalWrite(3, HIGH);
        }
     
     int lecturebouton5 = mcp1.digitalRead(13);
     delay(50); 
     
     if ((lecturebouton5==LOW) && (compteur3==1)){
      clignotementB2=false;
      point++;
       }
     
    //LED 7
     
     if (clignotementVE) {
      Millisactuel6 = millis();
      if ((unsigned long)(Millisactuel6 - Millisprecedent6) >= Intervaldeclignotement6) {
       mcp1.digitalWrite(4, !mcp1.digitalRead(4));
       Millisprecedent6 = Millisactuel6; 
      }
     
     } else {
      mcp1.digitalWrite(4, HIGH);
     }
     
     int lecturebouton6 = mcp1.digitalRead(14);
     delay(50); 
     
     if (lecturebouton6==LOW){
      clignotementVE=false;
        compteur4++;
      delay(50);
       }
     
    //LED 8
     
    if (clignotementVE1) {
      Millisactuel7 = millis();
       if (((unsigned long)(Millisactuel7 - Millisprecedent7) >= Intervaldeclignotement7) && (compteur4==1)) {
       mcp1.digitalWrite(5, !mcp1.digitalRead(5)); 
       Millisprecedent7 = Millisactuel7; 
      }
     } else {
      mcp1.digitalWrite(5, HIGH);
        }
     
     int lecturebouton7 = mcp1.digitalRead(15);
     delay(50); 
     
     if ((lecturebouton7==LOW) && (compteur4==1)){
      clignotementVE1=false;
    compteur5++;
       }
     
    //LED 9
     
    if (clignotementVE2) {
      Millisactuel6 = millis();
       if (((unsigned long)(Millisactuel6- Millisprecedent6) >= Intervaldeclignotement6) && (compteur5==1)) {
       mcp1.digitalWrite(6, !mcp1.digitalRead(6)); 
       Millisprecedent6 = Millisactuel6; 
      }
     } else {
      mcp1.digitalWrite(6, HIGH);
        }
     
     int lecturebouton8 = mcp2.digitalRead(0);
     delay(50); 
     
     if ((lecturebouton8==LOW) && (compteur5==1)){
      clignotementVE2=false;
      point++;
       }
     
    }
    Les cercles verts pleins sont les LED qui sont déjà en train de clignoter. Les ampoules à croix vertes sont celles en attentes. Celles à croix rouge correspondent à "point" dans mon code.

    Nom : leds.jpg
Affichages : 151
Taille : 159,9 Ko

  2. #2
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 817
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 817
    Par défaut
    Salut,

    Pour ta fréquence de clignotement de une seconde, tu as une dizaine de delay(50) dans ton loop, soit 500 ms de temporisation. Tu allumes, 500 ms, tu éteins, 500 ms.... Du coup, une seconde de fréquence.

    Pour la simplification, je ne suis pas assez rentré dans ton code. Essayé de factoriser ce qui peut l'être (il y a des parties qui se ressemblent beaucoup)...
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  3. #3
    Membre averti
    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
    Par défaut
    Merci plegat pour ta réponse. Je vais enlever ces delay et voir ce que ça donne... Quant aux codes qui se répète, ils correspondent chacun à une LED. Je peux pas les compiler tout en un. Du moins je pense pas....

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int compteur = 0; 
    int compteur1 = 0;
    int compteur2 = 0; 
    int compteur3 = 0; 
    int compteur4 = 0;
    int compteur5 = 0; 
    int compteur6 = 0;
    Oh ! Un tableau d'entiers !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #define LED_COUNT    7
    int compteurs[LED_COUNT];
    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
    bool clignotementV = true; 
    const unsigned long Intervaldeclignotement = 100; 
    unsigned long Millisactuel; 
    unsigned long Millisprecedent;
     
     
    bool clignotementV1 = true; 
    const unsigned long Intervaldeclignotement1 = 100; 
    unsigned long Millisactuel1; 
    unsigned long Millisprecedent1;
     
    bool clignotementV2 = true; 
    const unsigned long Intervaldeclignotement2 = 100; 
    unsigned long Millisactuel2; 
    unsigned long Millisprecedent2;
     
     
    bool clignotementB = true; 
    const unsigned long Intervaldeclignotement3 = 100; 
    unsigned long Millisactuel3; 
    unsigned long Millisprecedent3;
     
     
    bool clignotementB1 = true; 
    const unsigned long Intervaldeclignotement4 = 100; 
    unsigned long Millisactuel4; 
    unsigned long Millisprecedent4;
     
    bool clignotementB2 = true; 
    const unsigned long Intervaldeclignotement5 = 100; 
    unsigned long Millisactuel5; 
    unsigned long Millisprecedent5;
     
    bool clignotementVE = true; 
    const unsigned long Intervaldeclignotement6 = 100; 
    unsigned long Millisactuel6; 
    unsigned long Millisprecedent6;
     
     
    bool clignotementVE1 = true; 
    const unsigned long Intervaldeclignotement7 = 100; 
    unsigned long Millisactuel7; 
    unsigned long Millisprecedent7;
     
    bool clignotementVE2 = true; 
    const unsigned long Intervaldeclignotement8 = 100; 
    unsigned long Millisactuel8; 
    unsigned long Millisprecedent8;
    Oh ! Un tableau de structures !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    struct Control {
      bool clignotement;
      const unsigned long interval;
      unsigned long millis_actuel;
      unsigned long millis_precedent;
    };
     
    Control controls[10];
    Il y a de grandes chances que le code se simplifie, c'est à essayer

    A l'aide de plusieurs boutons poussoirs je rends fixe un jeu de LED qui clignotent.

    J'appuie sur un bouton poussoir, la LED associée en face devient fixe et celle à côté se met à clignoter. J'appuie sur le BP en face de celle qui s'est mise à clignoter, elle devient fixe et sa voisine se met à clignoter aussi et ainsi de suite jusqu'à ce que toutes soient fixes (non clignotantes).
    Il y a quelque chose qui me turlupine... Si tu appuies sur un bouton, la LED correspondante devient fixe et la suivante se met à clignoter. Mais alors comment à un moment pourraient-elles toutes être fixes ? Car quand tu vas appuyer sur le dernier bouton, la première va se mettre à clignoter ou c'est la fin du cycle ? Au début, elles sont dans quel état ? Si on appuie sur un bouton sur lequel on a déjà appuyé, il se passe quoi ?

  5. #5
    Membre averti
    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
    Par défaut
    Merci Bktero de ta réponse!!!

    Je vais appliquer tes modifs du code dès ce soir (je ne suis pas chez moi). Pour te répondre:

    Les LED apparaissent toutes fixes à l'issu de tous mes appuis et devoient rester fixe même si je ré-appuie sur l'un des BP. Si j'appuie sur le dernier BP, elles restent dans cet état. Il n'y a pas d'ordre dans les appuis.

    En fait, pour être plus précis, je me fais les griffes sur le plateau d'un vieux flipper. J'ai relié les LED à un Arduino (pour résumer). Chaque BP correspondent à une cible qui se trouve devant une LED. Quand elle clignote elle indique l'endroit où la bille doit venir frapper. Une fois fixe, la bille doit frapper ailleurs, là où ça clignote.

    Par contre, j'ai défini chaque LED par un nom (clignotementV1 par exemple). Dans ton code suivant le nom disparait:


    struct Control { bool clignotement; const unsigned long interval; unsigned long millis_actuel; unsigned long millis_precedent; }; Control controls[10];

    Dois-je le copier/coller avec un nom différent à chaque fois ?

    Merci encore.

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Par contre, j'ai défini chaque LED par un nom (clignotementV1 par exemple). Dans ton code suivant le nom disparait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    struct Control { bool clignotement; const unsigned long interval; unsigned long millis_actuel; unsigned long millis_precedent; }; Control controls[10];
    Dois-je le copier/coller avec un nom différent à chaque fois ?
    Non, bien sûr que non ! Il faut créer des ID pour accéder aux éléments du tableau. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Control controls[10];
     
    constexpr std::size_t LED_VERTE = 0;
    constexpr std::size_t LED_ROUGE = 1;
    constexpr std::size_t LED_BLEUE = 2;
     
    controls[LED_VERTE].clignotement = false;
    controls[LED_ROUGE].millis_actuel = 51;
    controls[LED_BLEUE].millis_precedent = 89;
    Donc si on résume ton problème :
    - il y a N LED
    - au démarrage, toutes les LED clignotent
    - chaque LED a un bouton poussoir associé
    - si on appuie sur un bouton, la LED associée arrête de clignoter et reste allumée
    - un second appui sur un bouton n'a pas d'effet particulier
    - il n'y a pas d'ordre à respecter, chaque bouton peut être appuyé à n'importe quel moment

    Tu devrais avoir un code comme ceci :
    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
    constexpr unsigned int LED_COUNT = 10;
     
    using LedID = int;
    using ButtonID = int;
     
    struct ControlBlock {
    	ControlBlock(LedID led, ButtonID button) :
    			led(led),
    			button(button),
    			blinking(false) {}
     
    	const LedID led;
    	const ButtonID button;
    	bool blinking;
    };
     
    ButtonID getPressedButton();
     
    void turnOffLed(LedID id);
     
    int main() {
    	ControlBlock controlBlocks[LED_COUNT];
     
    	bool allSteady = false;
     
    	while (not allSteady) {
    		auto button = getPressedButton();
     
    		// Chercher le control block correspondant
    		for (auto& block : controlBlocks) {
    			if (block.button == button) {
    				// Trouvé !
    				block.blinking = false;
    				turnOffLed(block.led);
    				break; // on arrete la boucle
    			}
    		}
     
    		// Regarder si toutes les LED sont fixes
    		allSteady = ??;
    	}
     
           // C'est bon, tout le moment est éteint !
    }

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/09/2011, 22h11
  2. Quel style de DirectX pour un jeu 2D ?
    Par delire8 dans le forum DirectX
    Réponses: 34
    Dernier message: 31/07/2003, 00h47
  3. [socket][tcp] jeu en reseau
    Par souris_sonic dans le forum Développement
    Réponses: 2
    Dernier message: 30/05/2003, 07h31
  4. [C réseau débutant] jeu
    Par Heimdall dans le forum Développement
    Réponses: 6
    Dernier message: 22/05/2003, 13h58
  5. Une déclaration pour la survie du jeu vidéo en France
    Par Freakazoid dans le forum DirectX
    Réponses: 1
    Dernier message: 30/10/2002, 14h31

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