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 :

Changement de code suite à changement de LCD


Sujet :

Arduino

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2003
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 67
    Points : 38
    Points
    38
    Par défaut Changement de code suite à changement de LCD
    Bonjour j'ai suivi un tutoriel mais le code est fait pour un shield LCD classique or moi j'ai un LiquidCrystal_I2C.h et j'ai bien installé la bibliothèque j'ai aussi fait le programme test de Gotronic et ça fonctionne.
    Mais je n'arrive pas à modifier le code pour l'adapter à ce LCD. Quelu'un pourrait-il m'aider? Voici le lien du code d'origine https://paperclipoam.s3.amazonaws.co...20/Alarme8.ino

    Merci pour votre aide

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


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 620
    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 620
    Points : 56 857
    Points
    56 857
    Billets dans le blog
    40
    Par défaut
    Bonsoir,

    La syntaxe avec la version I2C est normalement prévue pour être proche du LiquidCrystal classique.
    On peut t'aider mais il faudrait poster tes tentatives avec LiquidCrystal_I2C avec les symptômes du dysfonctionnement...

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2003
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 67
    Points : 38
    Points
    38
    Par défaut pour passer un message en test "gotronic" sur LiquidCrystal_I2C on utilise que deux bornes
    Prenons déjà comme exemple le message en test "gotronic" sur LiquidCrystal_I2C on utilise que deux bornes dont voici le code ci-dessous plus 2 bornes d'alimentation
    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
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    //----- Adressage matériel -----
    // En cas de non fonctionnement, mettez la ligne 8 en
    // commentaire et retirez le commentaire à la ligne 9.
    LiquidCrystal_I2C lcd(0x27, 20, 4);
    //LiquidCrystal_I2C lcd(0x3F,20,4);
    void setup()
    {
    lcd.init(); // initialisation de l'afficheur
    }
    void loop()
    {
    lcd.backlight();
    // Envoi du message
    lcd.setCursor(0, 0);
    lcd.print(" Go Tronic");
    lcd.setCursor(0,1);
    lcd.print(" ");
    lcd.setCursor(0, 2);
    lcd.print(" I2C Serial");
    lcd.setCursor(0, 3);
    lcd.print(" LCD");
    }
    Alors que pour l'afficheur LCD classique on utilise 6 fils?? quel fil garder de l'afficheur classique pour les deux fils LiquidCrystal_I2C?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // Connexion du LCD sur les broches de la carte Arduino :
    // Connecter broche RS du LCD sur la broche 9
    // Connecter broche E du LCD sur la broche 8
    // Connecter broche D4 du LCD sur la broche 7
    // Connecter broche D5 du LCD sur la broche 6
    // Connecter broche D6 du LCD sur la broche 5
    // Connecter broche D7 du LCD sur la broche 4

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


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 620
    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 620
    Points : 56 857
    Points
    56 857
    Billets dans le blog
    40
    Par défaut
    Citation Envoyé par didiersee Voir le message
    quel fil garder de l'afficheur classique pour les deux fils LiquidCrystal_I2C?
    Aucun, c'est aussi le but de l'I2C que de réduire le nombre de fils. Tu vires les 6 fils, l'I2C n'a besoin que de deux fils SDA et SCL à connecter sur SDA et SCL de l'Arduino (Connecteurs A4 et A5, voir https://f-leb.developpez.com/tutoriels/arduino/bus-i2c/)

  5. #5
    Nouveau membre du Club
    Inscrit en
    Décembre 2003
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 67
    Points : 38
    Points
    38
    Par défaut merci pour votre réponse rapide mais le code devient?
    Merci pour votre réponse rapide mais le code devient?
    Voici le code d'origine ci-dessous et je dois l'adapter à l'IC2C le code en rouge sont les endroits ou je dois et ou j'ai modifié mais ce n'est pas suffisant.
    Merci pour votre aide.


    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
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    // ////////////////////  PRESENTATION DU PROGRAMME ////////////////////
    
    // -------- Que fait ce programme ? ---------
     /* Ce programme montre comment saisir au clavier matriciel une valeur numérique et l'afficher sur l'afficheur LCD. Ce programme pourra servir de base pour des applications utilisant des claviers et afficheurs LCD.  */
    
    
    // Utilise un afficheur LCD alphanumérique en mode 4 bits
    // Utilise un clavier matriciel 12 touches (3 colonnes x 4 lignes)  
    
    // -------- Circuit à réaliser ---------
    
    // Connexion du LCD sur les broches de la carte Arduino :
    // Connecter broche RS du LCD sur la broche 9
    // Connecter broche E du LCD sur la broche 8
    // Connecter broche D4 du LCD sur la broche 7
    // Connecter broche D5 du LCD sur la broche 6
    // Connecter broche D6 du LCD sur la broche 5
    // Connecter broche D7 du LCD sur la broche 4
    
    // Connexion  du clavier matriciel 16 touches (4 colonnes x 4 lignes) sur la carte Arduino
    // Connecter broche de colonne C1 du clavier 4x4 sur la broche 12
    // Connecter broche de colonne C2 du clavier 4x4 sur la broche 11
    // Connecter broche de colonne C3 du clavier 4x4 sur la broche 10
    
    
    // Connecter broche de ligne L1 du clavier 4x4 sur la broche 14
    // Connecter broche de ligne L2 du clavier 4x4 sur la broche 15
    // Connecter broche de ligne L3 du clavier 4x4 sur la broche 16
    // Connecter broche de ligne L4 du clavier 4x4 sur la broche 17
    
    // /////////////////////////////// 1. Entête déclarative ///////////////////////
    // A ce niveau sont déclarées les librairies incluses, les constantes, les variables, les objets utiles...
    
    // --- Déclaration des constantes ---
    
    // --- Inclusion des librairies ---
    
    #include <LiquidCrystal_I2C.h> // Inclusion de la librairie pour afficheur LCD
    #include <Wire.h>
    #include <RTClib.h>
    #include <Keypad.h> // inclusion de la librairie pour clavier matriciel
    
    
    // --- Déclaration des constantes utiles ---
    
    //--- Constantes utilisées avec le clavier matriciel 4x4
    const byte LIGNES = 4; // 4 lignes
    const byte COLONNES = 3; // 3 colonnes
    
    // --- Déclaration des constantes des broches E/S numériques ---
    
    
    const int C3=10; // Constante pour la broche 10
    const int C2=11; // Constante pour la broche 11
    const int C1=12; // Constante pour la broche 12
    const int RS=9; // Constante pour la broche 9
    const int E=8; // Constante pour la broche 8
    const int D4=7; // Constante pour la broche 7
    const int D5=6; // Constante pour la broche 6
    const int D6=5; // Constante pour la broche 5
    const int D7=4; // Constante pour la broche 4
    const int L4=17; // Constante pour la broche 17
    const int L3=16; // Constante pour la broche 16
    const int L2=15; // Constante pour la broche 15
    const int L1=14; // Constante pour la broche 14
    
    // --- Déclaration des constantes des broches analogiques ---
    
    
    // --- Déclaration des variables globales ---
    
    //--- Définition des touches
    char touches[LIGNES][COLONNES] = { // tableau de char à 2 dimensions
      {'1','2','3'},
      {'4','5','6'},
      {'7','8','9'},
      {'*','0','#'}
    };
    
    // tableaux de lignes et colonnes
    byte BrochesLignes[LIGNES] = {L1, L2, L3, L4}; //connexions utilisées pour les broches de lignes du clavier
    byte BrochesColonnes[COLONNES] = {C1, C2, C3}; //connexions utilisées pour les broches de colonnes du clavier
    
    char touche; // variable de stockage valeur touche appuyée
    
    unsigned int code; // variable pour code saisi
    unsigned int secret=1111; // variable pour code saisi
    unsigned int tempo=15; // variable pour code saisi
    unsigned int temp1;
    int intrus1;
    int intrus2;
    int capteur1=2;
    int capteur2=3;
    int buzzer=13;
    int k;
    
    // --- Déclaration des objets utiles pour les fonctionnalités utilisées ---
    
    //------------ Création d'un objet afficheur LCD alphanumérique ----
    LiquidCrystal lcd(RS, E, D4, D5, D6, D7);// initialisation LCD en mode 4 bits
    
    // création d'un objet keypad = initialisation clavier
    Keypad clavier = Keypad( makeKeymap(touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );
    // les broches de lignes sont automatiquement configurées en ENTREE avec pullup interne activé
    // les broches de colonnes sont automatiquement configurées en SORTIE
    
    RTC_DS1307 RTC;
    
    // ////////////////////////// 2. FONCTION SETUP = Code d'initialisation //////////////////////////
    // La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme
    
    void setup()   { // debut de la fonction setup()
    
    // --- ici instructions à exécuter 1 seule fois au démarrage du programme ---
    
    // ------- Initialisation fonctionnalités utilisées -------  
    
    // Initialisation de l'afficheur LCD
    Wire.begin();
    RTC.begin();
    lcd.begin(16,2); // Initialise le LCD avec 20 colonnes x 4 lignes
    delay(10); // pause rapide pour laisser temps initialisation
    lcd.clear(); // efface LCD
    delay(10);
    lcd.blink(); // active clignotement
    pinMode(capteur1, INPUT);
    pinMode(capteur2, INPUT);
    pinMode(buzzer, OUTPUT);
    
    // ------- Broches en sorties numériques -------  
    
    // ------- Broches en entrées numériques -------  
    
    // ------- Activation si besoin du rappel au + (pullup) des broches en entrées numériques -------  
    
    // ------- Initialisation des variables utilisées -------  
    
    } // fin de la fonction setup()
    // ********************************************************************************
    
    ////////////////////////////////// 3. FONCTION LOOP = Boucle sans fin = coeur du programme //////////////////
    // la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension
    
    void loop(){ // debut de la fonction loop()
    
    
    // --- ici instructions à exécuter par le programme principal ---
    
    // ------ Code exemple lecture touche clavier matriciel --------
      
      digitalWrite(buzzer,LOW);
      lcd.clear();
      horloge();
      lcd.setCursor(0, 1); 
      lcd.blink();
      lcd.print("Saisir touche:"); // affiche variable
      code=SAISIE_uINT(); // appel de la fonction pour saisie valeur - # stoppe saisie
      
      switch (code)
      {
      case(0):     // Si aucune touche, il faut remettre l'horloge à l'heure
      lcd.clear();
      horloge();
      lcd.setCursor(0, 1); 
      lcd.print("Saisir touche:"); 
      lcd.blink();
      break;
      
      case(1):
        temp1=tempo;
        while (temp1!=0)
          {
          lcd.clear();
          horloge();
          lcd.setCursor(0, 1); 
          lcd.print("Zone 1 active:"); // affiche variable
          lcd.print(temp1);
          lcd.noBlink();
          delay(1000);
          temp1=temp1-1;
          }
        do
          {
          lcd.clear();
          horloge();
          lcd.setCursor(0, 1); 
          lcd.print("Zone 1 active");
          delay(100);
          intrus1=digitalRead(capteur1);
          }
        while (intrus1==0);
        delay(1000);
        lcd.clear();
        lcd.print("Desactiver zone");
        lcd.setCursor(0, 1);
        lcd.blink();
        code=SAISIE_uINT();
        if (code!=secret)
           {
            digitalWrite(buzzer,HIGH);
            lcd.clear();
            horloge();
            lcd.setCursor(0, 1);
            lcd.print("Intrusion zone 1");
            delay(120000);
            digitalWrite(buzzer,LOW);
    ici1:    code=SAISIE_uINT();
            if (code==secret)
            {
            break;
            }
            else goto ici1;
           }
          break;
      
      case(2):
          do
          {
          lcd.clear();
          horloge();
          lcd.setCursor(0, 1); 
          lcd.print("Zone 2 active");
          delay(100);
          lcd.noBlink();
          intrus2=digitalRead(capteur2);
          }
          while (intrus2==0);
        lcd.clear();
        digitalWrite(buzzer,HIGH);
        lcd.clear();
        horloge();
        lcd.setCursor(0, 1);
        lcd.print("Intrusion zone 2");
        delay(120000);
        digitalWrite(buzzer,LOW);
    ici2:    code=SAISIE_uINT();
            if (code==secret)
            {
            break;
            }
            else goto ici2;
            
      break;
      
      case(3):
       temp1=tempo;
        while (temp1!=0)
          {
          lcd.clear();
          horloge();
          lcd.setCursor(0, 1); 
          lcd.print("Zones actives:"); // affiche variable
          lcd.print(temp1);
          lcd.noBlink();
          delay(1000);
          temp1=temp1-1;
          }
        do
          {
          lcd.clear();
          horloge();
          lcd.setCursor(0, 1); 
          lcd.print("Zones actives");
          delay(100);
          intrus1=digitalRead(capteur1);
          intrus2=digitalRead(capteur2);
          }
        while ((intrus1==0)&&(intrus2==0));
        delay(1000);
            if (intrus1==1)
            {
            lcd.clear();
            lcd.print("Desactiver zones");
            lcd.setCursor(0, 1);
            lcd.blink();
            code=SAISIE_uINT();
              if (code!=secret)
              {
              digitalWrite(buzzer,HIGH);
              lcd.clear();
              horloge();
              lcd.setCursor(0, 1);
              lcd.print("Intrusion zone 1");
              delay(120000);
              digitalWrite(buzzer,LOW);
    ici3:    code=SAISIE_uINT();
                 if (code==secret)
                 {
                  break;
                 }
                 else goto ici3;
               }
             }
             else
             {
             lcd.clear();
             digitalWrite(buzzer,HIGH);
             lcd.clear();
             horloge();
             lcd.setCursor(0, 1);
             lcd.print("Intrusion zone 2");
             delay(120000);
             digitalWrite(buzzer,LOW);
    ici4:    code=SAISIE_uINT();
              if (code==secret)
              {
              break;
              }
              else goto ici4;
              }
          break;
      
      case(8):
      lcd.clear();
      lcd.print("Temporisation"); // affiche variable
      lcd.setCursor(0,1);
      lcd.print("(1..99 s):");
      lcd.blink();
      code=SAISIE_uINT();
      tempo=code;
      break;
      
      case(9):
      lcd.clear();
      horloge();
      lcd.setCursor(0, 1); 
      lcd.print("Code secret:"); // affiche variable
      lcd.blink();
      code=SAISIE_uINT();
      if (code==secret)
        {
         lcd.clear();
         lcd.print("Nouveau code:"); // affiche variable
         lcd.setCursor(0, 1); 
         lcd.blink();
         code=SAISIE_uINT();
         secret=code;
        }
      else
      {
      lcd.clear(); 
      lcd.print("Code errone:"); // affiche variable
      lcd.noBlink();
      delay(5000);
      }
      
      break;
      
      default:
      lcd.clear();
      horloge();
      lcd.setCursor(0,1);
      lcd.print("Touche inactive"); // affiche variable
      lcd.noBlink();
      delay(1500); // pause entre 2 saisies
      }
      
    
    
    } // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin
    // ********************************************************************************
    
    
    // ////////////////////////// FONCTIONS DE GESTION DES INTERRUPTIONS ////////////////////
    
    
    // ////////////////////////// AUTRES FONCTIONS DU PROGRAMME ////////////////////
    
    unsigned int SAISIE_uINT (){ // fonction qui renvoie une valeur unsignedint (16bits)
    
    //---- variables locales utilisées dans la fonction
    unsigned char saisie_int[8]={0,0,0,0,0,0,0,0}; // crée un tableau de variables char pour saisir valeur
    unsigned char compt_touche_int; // variable de comptage du nombre de touches saisies
    unsigned long nombre_saisi_int; // variable de calcul du nombre saisi
    unsigned char touche_int; // variable locale pour valeur touche appuyée de 0 à 15
    unsigned int temp;
    unsigned int no_key;
    unsigned int debut;
    //---- initialisation des variables utilisées ----
    compt_touche_int=0; // aucune touche saisie au démarrage
    nombre_saisi_int=0; // initialise la variable
    
    //------ gestion appui touche sur clavier
     debut=millis();
     while (compt_touche_int<5){ // tant que pas appuis maxi = 5 pour int (valeur maxi=65535)
    
           touche_int= clavier.getKey(); // lecture de la touche appuyée
            if (touche_int== NO_KEY)  // si clavier inutilisé pendant 10 secondes, on sort de la fonction
            {
              no_key=millis();
              temp=no_key-debut;
              if (temp>10000) break;
            }
           if (touche_int!= NO_KEY){ // si une touche a été frappée -- gestion de la touche appuyée
    
    
               if (touche_int=='#') break; // sort du while si appui sur #
    
               for (byte i=0;i<LIGNES;i++) {
                 for (byte j=0; j<COLONNES;j++){
    
                   if (touche_int==touches[i][j]) touche_int=touches[i][j]-48; // extrait valeur numérique à partir ASCII
                 }
               }
               saisie_int[compt_touche_int]=touche_int; //enregistre le caractère dans tableau code_saisi
               lcd.print(char(saisie_int[compt_touche_int]+48)); // affiche valeur à emplacement actuel sur LCD
    
               compt_touche_int=compt_touche_int+1; // on incrémente la variable compt qui mémorise le nombre de caractères saisis
    
               //delay ()
    
               touche_int=255; // remet à 255 la variable touche... pour éviter prise en compte même appui à plusieurs reprises
    
             } //---- fin gestion appui clavier
    
    }// fin du While = fin de la lecture du clavier
    
    //--------- calcul valeur saisie en fonction du nombre de chiffres saisis ---------
    if (compt_touche_int==0)nombre_saisi_int=0;   // si aucun chiffre saisi
    if (compt_touche_int==1)nombre_saisi_int=saisie_int[0];   // si 1 seul chiffre saisi
    if (compt_touche_int==2)nombre_saisi_int=(saisie_int[0]*10)+(saisie_int[1]*1);   // si 2 chiffres saisi
    if (compt_touche_int==3)nombre_saisi_int=(saisie_int[0]*100)+(saisie_int[1]*10)+(saisie_int[2]*1);   // si 3 chiffres saisi
    if (compt_touche_int==4)nombre_saisi_int=(saisie_int[0]*1000)+(saisie_int[1]*100)+(saisie_int[2]*10)+(saisie_int[3]*1);   // si 4 chiffres saisi
    if (compt_touche_int==5)nombre_saisi_int=(saisie_int[0]*10000)+(saisie_int[1]*1000)+(saisie_int[2]*100)+(saisie_int[3]*10)+(saisie_int[4]*1);   // si 5 chiffres saisi
    
    //------ à réaliser en sortie de lecture du clavier ----
    
    
    compt_touche_int=0; // réinitialise le nombre de touche saisies
    
    //----- renvoi de la valeur saisie ----
    
    return (nombre_saisi_int); // renvoie la valeur - sortie de la fonction
    
    }
    
    void horloge()
    {
    DateTime now = RTC.now();
    lcd.setCursor(0, 0);
    if (now.day()<10)
    {
     lcd.print("0");
    }
    lcd.print(now.day());
    lcd.print("/");
    if (now.month()<10)
    {
     lcd.print("0");
    }
    lcd.print(now.month());
    lcd.print("/");
    lcd.print(now.year());
    lcd.print(" ");
    if (now.hour()<10)
    {
     lcd.print("0");
    }
    lcd.print(now.hour());
    lcd.print(":");
    if (now.minute() < 10) 
    {
    lcd.print("0");
    }
    lcd.print(now.minute());
    }
    // ////////////////////////// Fin du programme ////////////////////

  6. #6
    Nouveau membre du Club
    Inscrit en
    Décembre 2003
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 67
    Points : 38
    Points
    38
    Par défaut LCD I2C suite
    Normalement le LCD I2C doit se connecter aux bornes A4 et A4 du module arduino uno mais dans mon montage je dois aussi connecter un module horloge en temps réel sur ces bornes. Comment combiner les deux faut-il passer à arduino MEGA?

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


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 620
    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 620
    Points : 56 857
    Points
    56 857
    Billets dans le blog
    40
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    const int RS=9; // Constante pour la broche 9
    const int E=8; // Constante pour la broche 8
    const int D4=7; // Constante pour la broche 7
    const int D5=6; // Constante pour la broche 6
    const int D6=5; // Constante pour la broche 5
    const int D7=4; // Constante pour la broche 4
     
    //------------ Création d'un objet afficheur LCD alphanumérique ----
    LiquidCrystal lcd(RS, E, D4, D5, D6, D7);// initialisation LCD en mode 4 bits
    devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //----- Adressage matériel -----
    // En cas de non fonctionnement, mettez la ligne 8 en
    // commentaire et retirez le commentaire à la ligne 9.
    LiquidCrystal_I2C lcd(0x27, 20, 4);
    //LiquidCrystal_I2C lcd(0x3F,20,4);
    Dans le setup(),
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lcd.begin(16,2); // Initialise le LCD avec 20 colonnes x 4 lignes
    devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lcd.init(); // initialisation de l'afficheur
    Pour le reste, la syntaxe doit être la même : lcd.print(), lcd.clear(), etc.


    Normalement le LCD I2C doit se connecter aux bornes A4 et A4 du module arduino uno mais dans mon montage je dois aussi connecter un module horloge en temps réel sur ces bornes. Comment combiner les deux faut-il passer à arduino MEGA?
    C'est un fonctionnement en bus, tous les périphériques partagent la même ligne SDA et SCL.
    Nom : 10000000000002BF000000D113DCFB57.jpg
Affichages : 1065
Taille : 25,7 Ko
    L'arduino est maître (master 1 par exemple), le LCD et le RTC sont esclaves (slave1 et slave2 par exemple)

  8. #8
    Nouveau membre du Club
    Inscrit en
    Décembre 2003
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 67
    Points : 38
    Points
    38
    Par défaut Merci beaucoup je vais essayer vos modifications mais ce sera tard ce soir
    Merci beaucoup je vais essayer vos modifications mais ce sera tard ce soir. Je vous informerai du bon fonctionnement mais je comprends mieux maintenant le système de bus. Un peu comme dans les voitures actuelles c'est évidemment une fameuse économie de fils pour le raccordement et en plus le système bus économise le nombre d'entrées/sorties ce qui évitera pour d'autres applications de conserver un UNO sans être obligé de passer au MEGA.
    Encore merci.
    Cordialement

  9. #9
    Nouveau membre du Club
    Inscrit en
    Décembre 2003
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 67
    Points : 38
    Points
    38
    Par défaut suite modification du code ça ne fonctionne pas et pourtant pas d'erreur de code
    Bonjour le code est-ci-dessous il fonctionne sans erreur mais après transfert sur la carte arduino ça ne fonctionne pas?? Pourtant tout est bien raccordé ?? le LCD s'allume mais n'affiche rien.
    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
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    // ////////////////////  PRESENTATION DU PROGRAMME ////////////////////
     
    // -------- Que fait ce programme ? ---------
     /* Ce programme montre comment saisir au clavier matriciel une valeur numérique et l'afficher sur l'afficheur LCD. Ce programme pourra servir de base pour des applications utilisant des claviers et afficheurs LCD.  */
     
    // --- Fonctionnalités utilisées ---
     
    // Utilise un afficheur LCD alphanumérique en mode 4 bits
    // Utilise un clavier matriciel 12 touches (3 colonnes x 4 lignes)  
     
    // -------- Circuit à réaliser ---------
     
    // Connexion du LCD sur les broches de la carte Arduino :
    // Connecter broche RS du LCD sur la broche 9
    // Connecter broche E du LCD sur la broche 8
    // Connecter broche D4 du LCD sur la broche 7
    // Connecter broche D5 du LCD sur la broche 6
    // Connecter broche D6 du LCD sur la broche 5
    // Connecter broche D7 du LCD sur la broche 4
     
    // Connexion  du clavier matriciel 16 touches (4 colonnes x 4 lignes) sur la carte Arduino
    // Connecter broche de colonne C1 du clavier 4x4 sur la broche 12
    // Connecter broche de colonne C2 du clavier 4x4 sur la broche 11
    // Connecter broche de colonne C3 du clavier 4x4 sur la broche 10
     
     
    // Connecter broche de ligne L1 du clavier 4x4 sur la broche 14
    // Connecter broche de ligne L2 du clavier 4x4 sur la broche 15
    // Connecter broche de ligne L3 du clavier 4x4 sur la broche 16
    // Connecter broche de ligne L4 du clavier 4x4 sur la broche 17
     
    // /////////////////////////////// 1. Entête déclarative ///////////////////////
    // A ce niveau sont déclarées les librairies incluses, les constantes, les variables, les objets utiles...
     
    // --- Déclaration des constantes ---
     
    // --- Inclusion des librairies ---
     
    #include <LiquidCrystal_I2C.h> // Inclusion de la librairie pour afficheur LCD
    #include <Wire.h>
    #include <RTClib.h>
    #include <Keypad.h> // inclusion de la librairie pour clavier matriciel
     
    // Avant utilisation, il faut installer manuellement cette librairie
    // dans le dossier <Libraries> du dossier Arduino
    // infos : <a href="http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.Main.LibrairieKeypad" target="_blank">http://www.mon-club-elec.fr/pmwiki_r...ibrairieKeypad</a>
     
    // --- Déclaration des constantes utiles ---
     
    //--- Constantes utilisées avec le clavier matriciel 4x4
    const byte LIGNES = 4; // 4 lignes
    const byte COLONNES = 3; // 3 colonnes
     
    // --- Déclaration des constantes des broches E/S numériques ---
     
     
    const int C3=10; // Constante pour la broche 10
    const int C2=11; // Constante pour la broche 11
    const int C1=12; // Constante pour la broche 12
    const int RS=9; // Constante pour la broche 9
    const int E=8; // Constante pour la broche 8
    const int D4=7; // Constante pour la broche 7
    const int D5=6; // Constante pour la broche 6
    const int D6=5; // Constante pour la broche 5
    const int D7=4; // Constante pour la broche 4
    const int L4=17; // Constante pour la broche 17
    const int L3=16; // Constante pour la broche 16
    const int L2=15; // Constante pour la broche 15
    const int L1=14; // Constante pour la broche 14
     
    // --- Déclaration des constantes des broches analogiques ---
     
     
    // --- Déclaration des variables globales ---
     
    //--- Définition des touches
    char touches[LIGNES][COLONNES] = { // tableau de char à 2 dimensions
      {'1','2','3'},
      {'4','5','6'},
      {'7','8','9'},
      {'*','0','#'}
    };
     
    // tableaux de lignes et colonnes
    byte BrochesLignes[LIGNES] = {L1, L2, L3, L4}; //connexions utilisées pour les broches de lignes du clavier
    byte BrochesColonnes[COLONNES] = {C1, C2, C3}; //connexions utilisées pour les broches de colonnes du clavier
     
    char touche; // variable de stockage valeur touche appuyée
     
    unsigned int code; // variable pour code saisi
    unsigned int secret=1111; // variable pour code saisi
    unsigned int tempo=15; // variable pour code saisi
    unsigned int temp1;
    int intrus1;
    int intrus2;
    int capteur1=2;
    int capteur2=3;
    int buzzer=13;
    int k;
     
    // --- Déclaration des objets utiles pour les fonctionnalités utilisées ---
     
    //------------ Création d'un objet afficheur LCD alphanumérique ----
    LiquidCrystal_I2C lcd(0x27, 20, 4);// initialisation LCD en mode 4 bits
     
    // création d'un objet keypad = initialisation clavier
    Keypad clavier = Keypad( makeKeymap(touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );
    // les broches de lignes sont automatiquement configurées en ENTREE avec pullup interne activé
    // les broches de colonnes sont automatiquement configurées en SORTIE
     
    RTC_DS1307 RTC;
     
    // ////////////////////////// 2. FONCTION SETUP = Code d'initialisation //////////////////////////
    // La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme
     
    void setup()   { // debut de la fonction setup()
     
    // --- ici instructions à exécuter 1 seule fois au démarrage du programme ---
     
    // ------- Initialisation fonctionnalités utilisées -------  
     
    // Initialisation de l'afficheur LCD
    Wire.begin();
    RTC.begin();
    lcd.init(); // initialisation de l'afficheur
    delay(10); // pause rapide pour laisser temps initialisation
    lcd.clear(); // efface LCD
    delay(10);
    lcd.blink(); // active clignotement
    pinMode(capteur1, INPUT);
    pinMode(capteur2, INPUT);
    pinMode(buzzer, OUTPUT);
     
    // ------- Broches en sorties numériques -------  
     
    // ------- Broches en entrées numériques -------  
     
    // ------- Activation si besoin du rappel au + (pullup) des broches en entrées numériques -------  
     
    // ------- Initialisation des variables utilisées -------  
     
    } // fin de la fonction setup()
    // ********************************************************************************
     
    ////////////////////////////////// 3. FONCTION LOOP = Boucle sans fin = coeur du programme //////////////////
    // la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension
     
    void loop(){ // debut de la fonction loop()
     
     
    // --- ici instructions à exécuter par le programme principal ---
     
    // ------ Code exemple lecture touche clavier matriciel --------
     
      digitalWrite(buzzer,LOW);
      lcd.clear();
      horloge();
      lcd.setCursor(0, 1); 
      lcd.blink();
      lcd.print("Saisir touche:"); // affiche variable
      code=SAISIE_uINT(); // appel de la fonction pour saisie valeur - # stoppe saisie
     
      switch (code)
      {
      case(0):     // Si aucune touche, il faut remettre l'horloge à l'heure
      lcd.clear();
      horloge();
      lcd.setCursor(0, 1); 
      lcd.print("Saisir touche:"); 
      lcd.blink();
      break;
     
      case(1):
        temp1=tempo;
        while (temp1!=0)
          {
          lcd.clear();
          horloge();
          lcd.setCursor(0, 1); 
          lcd.print("Zone 1 active:"); // affiche variable
          lcd.print(temp1);
          lcd.noBlink();
          delay(1000);
          temp1=temp1-1;
          }
        do
          {
          lcd.clear();
          horloge();
          lcd.setCursor(0, 1); 
          lcd.print("Zone 1 active");
          delay(100);
          intrus1=digitalRead(capteur1);
          }
        while (intrus1==0);
        delay(1000);
        lcd.clear();
        lcd.print("Desactiver zone");
        lcd.setCursor(0, 1);
        lcd.blink();
        code=SAISIE_uINT();
        if (code!=secret)
           {
            digitalWrite(buzzer,HIGH);
            lcd.clear();
            horloge();
            lcd.setCursor(0, 1);
            lcd.print("Intrusion zone 1");
            delay(120000);
            digitalWrite(buzzer,LOW);
    ici1:    code=SAISIE_uINT();
            if (code==secret)
            {
            break;
            }
            else goto ici1;
           }
          break;
     
      case(2):
          do
          {
          lcd.clear();
          horloge();
          lcd.setCursor(0, 1); 
          lcd.print("Zone 2 active");
          delay(100);
          lcd.noBlink();
          intrus2=digitalRead(capteur2);
          }
          while (intrus2==0);
        lcd.clear();
        digitalWrite(buzzer,HIGH);
        lcd.clear();
        horloge();
        lcd.setCursor(0, 1);
        lcd.print("Intrusion zone 2");
        delay(120000);
        digitalWrite(buzzer,LOW);
    ici2:    code=SAISIE_uINT();
            if (code==secret)
            {
            break;
            }
            else goto ici2;
     
      break;
     
      case(3):
       temp1=tempo;
        while (temp1!=0)
          {
          lcd.clear();
          horloge();
          lcd.setCursor(0, 1); 
          lcd.print("Zones actives:"); // affiche variable
          lcd.print(temp1);
          lcd.noBlink();
          delay(1000);
          temp1=temp1-1;
          }
        do
          {
          lcd.clear();
          horloge();
          lcd.setCursor(0, 1); 
          lcd.print("Zones actives");
          delay(100);
          intrus1=digitalRead(capteur1);
          intrus2=digitalRead(capteur2);
          }
        while ((intrus1==0)&&(intrus2==0));
        delay(1000);
            if (intrus1==1)
            {
            lcd.clear();
            lcd.print("Desactiver zones");
            lcd.setCursor(0, 1);
            lcd.blink();
            code=SAISIE_uINT();
              if (code!=secret)
              {
              digitalWrite(buzzer,HIGH);
              lcd.clear();
              horloge();
              lcd.setCursor(0, 1);
              lcd.print("Intrusion zone 1");
              delay(120000);
              digitalWrite(buzzer,LOW);
    ici3:    code=SAISIE_uINT();
                 if (code==secret)
                 {
                  break;
                 }
                 else goto ici3;
               }
             }
             else
             {
             lcd.clear();
             digitalWrite(buzzer,HIGH);
             lcd.clear();
             horloge();
             lcd.setCursor(0, 1);
             lcd.print("Intrusion zone 2");
             delay(120000);
             digitalWrite(buzzer,LOW);
    ici4:    code=SAISIE_uINT();
              if (code==secret)
              {
              break;
              }
              else goto ici4;
              }
          break;
     
      case(8):
      lcd.clear();
      lcd.print("Temporisation"); // affiche variable
      lcd.setCursor(0,1);
      lcd.print("(1..99 s):");
      lcd.blink();
      code=SAISIE_uINT();
      tempo=code;
      break;
     
      case(9):
      lcd.clear();
      horloge();
      lcd.setCursor(0, 1); 
      lcd.print("Code secret:"); // affiche variable
      lcd.blink();
      code=SAISIE_uINT();
      if (code==secret)
        {
         lcd.clear();
         lcd.print("Nouveau code:"); // affiche variable
         lcd.setCursor(0, 1); 
         lcd.blink();
         code=SAISIE_uINT();
         secret=code;
        }
      else
      {
      lcd.clear(); 
      lcd.print("Code errone:"); // affiche variable
      lcd.noBlink();
      delay(5000);
      }
     
      break;
     
      default:
      lcd.clear();
      horloge();
      lcd.setCursor(0,1);
      lcd.print("Touche inactive"); // affiche variable
      lcd.noBlink();
      delay(1500); // pause entre 2 saisies
      }
     
     
     
    } // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin
    // ********************************************************************************
     
     
    // ////////////////////////// FONCTIONS DE GESTION DES INTERRUPTIONS ////////////////////
     
     
    // ////////////////////////// AUTRES FONCTIONS DU PROGRAMME ////////////////////
     
    unsigned int SAISIE_uINT (){ // fonction qui renvoie une valeur unsignedint (16bits)
     
    //---- variables locales utilisées dans la fonction
    unsigned char saisie_int[8]={0,0,0,0,0,0,0,0}; // crée un tableau de variables char pour saisir valeur
    unsigned char compt_touche_int; // variable de comptage du nombre de touches saisies
    unsigned long nombre_saisi_int; // variable de calcul du nombre saisi
    unsigned char touche_int; // variable locale pour valeur touche appuyée de 0 à 15
    unsigned int temp;
    unsigned int no_key;
    unsigned int debut;
    //---- initialisation des variables utilisées ----
    compt_touche_int=0; // aucune touche saisie au démarrage
    nombre_saisi_int=0; // initialise la variable
     
    //------ gestion appui touche sur clavier
     debut=millis();
     while (compt_touche_int<5){ // tant que pas appuis maxi = 5 pour int (valeur maxi=65535)
     
           touche_int= clavier.getKey(); // lecture de la touche appuyée
            if (touche_int== NO_KEY)  // si clavier inutilisé pendant 10 secondes, on sort de la fonction
            {
              no_key=millis();
              temp=no_key-debut;
              if (temp>10000) break;
            }
           if (touche_int!= NO_KEY){ // si une touche a été frappée -- gestion de la touche appuyée
     
     
               if (touche_int=='#') break; // sort du while si appui sur #
     
               for (byte i=0;i<LIGNES;i++) {
                 for (byte j=0; j<COLONNES;j++){
     
                   if (touche_int==touches[i][j]) touche_int=touches[i][j]-48; // extrait valeur numérique à partir ASCII
                 }
               }
               saisie_int[compt_touche_int]=touche_int; //enregistre le caractère dans tableau code_saisi
               lcd.print(char(saisie_int[compt_touche_int]+48)); // affiche valeur à emplacement actuel sur LCD
     
               compt_touche_int=compt_touche_int+1; // on incrémente la variable compt qui mémorise le nombre de caractères saisis
     
               //delay ()
     
               touche_int=255; // remet à 255 la variable touche... pour éviter prise en compte même appui à plusieurs reprises
     
             } //---- fin gestion appui clavier
     
    }// fin du While = fin de la lecture du clavier
     
    //--------- calcul valeur saisie en fonction du nombre de chiffres saisis ---------
    if (compt_touche_int==0)nombre_saisi_int=0;   // si aucun chiffre saisi
    if (compt_touche_int==1)nombre_saisi_int=saisie_int[0];   // si 1 seul chiffre saisi
    if (compt_touche_int==2)nombre_saisi_int=(saisie_int[0]*10)+(saisie_int[1]*1);   // si 2 chiffres saisi
    if (compt_touche_int==3)nombre_saisi_int=(saisie_int[0]*100)+(saisie_int[1]*10)+(saisie_int[2]*1);   // si 3 chiffres saisi
    if (compt_touche_int==4)nombre_saisi_int=(saisie_int[0]*1000)+(saisie_int[1]*100)+(saisie_int[2]*10)+(saisie_int[3]*1);   // si 4 chiffres saisi
    if (compt_touche_int==5)nombre_saisi_int=(saisie_int[0]*10000)+(saisie_int[1]*1000)+(saisie_int[2]*100)+(saisie_int[3]*10)+(saisie_int[4]*1);   // si 5 chiffres saisi
     
    //------ à réaliser en sortie de lecture du clavier ----
     
     
    compt_touche_int=0; // réinitialise le nombre de touche saisies
     
    //----- renvoi de la valeur saisie ----
     
    return (nombre_saisi_int); // renvoie la valeur - sortie de la fonction
     
    }
     
    void horloge()
    {
    DateTime now = RTC.now();
    lcd.setCursor(0, 0);
    if (now.day()<10)
    {
     lcd.print("0");
    }
    lcd.print(now.day());
    lcd.print("/");
    if (now.month()<10)
    {
     lcd.print("0");
    }
    lcd.print(now.month());
    lcd.print("/");
    lcd.print(now.year());
    lcd.print(" ");
    if (now.hour()<10)
    {
     lcd.print("0");
    }
    lcd.print(now.hour());
    lcd.print(":");
    if (now.minute() < 10) 
    {
    lcd.print("0");
    }
    lcd.print(now.minute());
    }
    // ////////////////////////// Fin du programme ////////////////////

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


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 620
    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 620
    Points : 56 857
    Points
    56 857
    Billets dans le blog
    40
    Par défaut
    Bonsoir,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LiquidCrystal_I2C lcd(0x27, 20, 4);// initialisation LCD en mode 4 bits
    20 est le nombre de caractères par ligne, et 4 le nombre de lignes du LCD. C'est bien le cas avec ton LCD ?

  11. #11
    Nouveau membre du Club
    Inscrit en
    Décembre 2003
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 67
    Points : 38
    Points
    38
    Par défaut code alarme suite
    Premièrement et grosse erreur de ma part ce n'est pas une carte UNO normal mais une Leonardo donc j'ai déjà une borne SDA et SCL, c'est corrigé. Mais lors du transfert du sketch vers la carte Leonardo j'ai le message d'erreur suivant:

    avrdude: butterfly_recv(): programmer is not responding
    Found programmer: Id = "þ"; type = ¸
    Software Version = h.
    avrdude: error: buffered memory access not supported. Maybe it isn't
    a butterfly/AVR109 but a AVR910 device?
    avrdude: initialization failed, rc=-1
    Double check connections and try again, or use -F to override
    this check.


    Et non vous avez raison, je constate que c'est un deux lignes l'afficheur LCD, j'ai modifié la ligne de code de l'alarme pour un LCD deux lignes "LiquidCrystal_I2C lcd(0x27, 20, 2)" et le reste du code est correct puisque tous mes " lcd.setCursor (0, 1)" sont sur la première ligne (date et heure) et entrer le code sur la seconde ligne.

    Maintenant sur la première ligne j'ai une date et l'heure mais la date indique 01/01/2000 et l'heure reste à 00:00 (pas d'évolution) et sur la seconde ligne j'ai les messages du code correctement mais quand j'entre le code "1111" j'ai la réponse "touche inactive" en plus je n'ai pas de rétroéclairage du LCD

    Au niveau du clavier j'ai corrigé aussi pcq je ne dispose que d'un clavier 4x4 et pas d'un 4x3 donc je pensais qu'en ne raccordant pas la dernière colonne ça fonctionnerait mais non donc c'est corrigé aussi et ça fonctionne.
    Mais le dernier problème qui fait que rien ne fonctionne c'est à cause du module horloge (je vous place le code ci-dessous) pcq je n'arrive pas à l'adapter. Je n'ai pas un RTC 1307 normal mais bien un Tiny RTC IC2 savez-vous regarder pour le modifier pcq après de nombreuses recherches le code est tout à fait différent du RTC normal et je ne vois pas où placer le code de départ et ensuite l'appel au timer Merci pour votre aide. Cordialement
    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
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
     
    // ////////////////////  PRESENTATION DU PROGRAMME ////////////////////
     
    // -------- Que fait ce programme ? ---------
     /* Ce programme montre comment saisir au clavier matriciel une valeur numerique et l'afficher sur l'afficheur LCD. Ce programme pourra servir de base pour des applications utilisant des claviers et afficheurs LCD.  */
     
    // --- Fonctionnalites utilisees ---
     
    // Utilise un afficheur LCD alphanumerique en mode 4 bits
    // Utilise un clavier matriciel 16 touches (4 colonnes x 4 lignes)  
     
    // -------- Circuit à realiser ---------
     
    // Connexion du LCD sur les broches de la carte Arduino :
    // Connecter broche +VDD du LCD à +5v carte arduino
    // Connecter broche GND du LCD sur la broche GND carte arduino
    // Connecter broche SDA du LCD sur la broche SDA carte arduino leonardo
    // Connecter broche SCL du LCD sur la broche SCL carte arduino  leonardo
     
    // Connexion  du clavier matriciel 16 touches (4 colonnes x 4 lignes) sur la carte Arduino
    // Connecter broche de colonne C1 du clavier 4x4 sur la broche 12
    // Connecter broche de colonne C2 du clavier 4x4 sur la broche 11
    // Connecter broche de colonne C3 du clavier 4x4 sur la broche 10
    // Connecter broche de colonne C4 du clavier 4x4 sur la broche 9
     
    // Connecter broche de ligne L1 du clavier 4x4 sur la broche 14
    // Connecter broche de ligne L2 du clavier 4x4 sur la broche 15
    // Connecter broche de ligne L3 du clavier 4x4 sur la broche 16
    // Connecter broche de ligne L4 du clavier 4x4 sur la broche 17
     
    // /////////////////////////////// 1. Entête declarative ///////////////////////
    // A ce niveau sont declarees les librairies incluses, les constantes, les variables, les objets utiles...
     
    // --- Declaration des constantes ---
     
    // --- Inclusion des librairies ---
     
    #include <LiquidCrystal_I2C.h> // Inclusion de la librairie pour afficheur LCD
    #include <Wire.h>
    #include <RTClib.h>
    #include <Keypad.h> // inclusion de la librairie pour clavier matriciel
     
     
    //---------début code pour RTC I2C 1307---------------------
    /*#define DS1307_I2C_ADDRESS 0x68 suppose code initialisation
    Wire.beginTransmission(DS1307_I2C_ADDRESS); 
      Wire.send(0x08);                             // pour lire prmière memory byte
      Wire.endTransmission();                     
      Wire.requestFrom(DS1307_I2C_ADDRESS, 1);     // lit seulement one byte
      temp_byte     = Wire.read(); */
     //---------FIN code pour RTC I2C 1307--------------------- 
     
     
    // --- Declaration des constantes utiles ---
     
    //--- Constantes utilisees avec le clavier matriciel 4x4
    const byte LIGNES = 4; // 4 lignes
    const byte COLONNES = 4; // 4 colonnes
     
    // --- Declaration des constantes des broches E/S numeriques ---
     
    const int C4=9; // Constante pour la broche 9
    const int C3=10; // Constante pour la broche 10
    const int C2=11; // Constante pour la broche 11
    const int C1=12; // Constante pour la broche 12
     
    const int D4=7; // Constante pour la broche 7
    const int D5=6; // Constante pour la broche 6
    const int D6=5; // Constante pour la broche 5
    const int D7=4; // Constante pour la broche 4
    const int L4=17; // Constante pour la broche 17
    const int L3=16; // Constante pour la broche 16
    const int L2=15; // Constante pour la broche 15
    const int L1=14; // Constante pour la broche 14
     
    // --- Declaration des constantes des broches analogiques ---
     
     
    // --- Declaration des variables globales ---
     
    //--- Definition des touches
    char touches[LIGNES][COLONNES] = { // tableau de char à 2 dimensions
      {'1','2','3','A'},
      {'4','5','6','B'},
      {'7','8','9','C'},
      {'*','0','#','D'}
    };
     
    // tableaux de lignes et colonnes
    byte BrochesLignes[LIGNES] = {L1, L2, L3, L4}; //connexions utilisees pour les broches de lignes du clavier
    byte BrochesColonnes[COLONNES] = {C1, C2, C3, C4}; //connexions utilisees pour les broches de colonnes du clavier
     
    char touche; // variable de stockage valeur touche appuyee
     
    unsigned int code; // variable pour code saisi
    unsigned int secret=1111; // variable pour code saisi
    unsigned int tempo=15; // variable pour code saisi
    unsigned int temp1;
    int intrus1;
    int intrus2;
    int capteur1=2;
    int capteur2=3;
    int buzzer=13;
    int k;
     
    // --- Declaration des objets utiles pour les fonctionnalites utilisees ---
     
    //------------ Creation d'un objet afficheur LCD alphanumerique ----
    LiquidCrystal_I2C lcd(0x27, 20, 2);// initialisation LCD en mode 4 bits
     
    // creation d'un objet keypad = initialisation clavier
    Keypad clavier = Keypad( makeKeymap(touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );
    // les broches de lignes sont automatiquement configurees en ENTREE avec pullup interne active
    // les broches de colonnes sont automatiquement configurees en SORTIE
     
    RTC_DS1307 RTC;
     
    // ////////////////////////// 2. FONCTION SETUP = Code d'initialisation //////////////////////////
    // La fonction setup() est executee en premier et 1 seule fois, au demarrage du programme
     
    void setup()   { // debut de la fonction setup()
     
    // --- ici instructions à executer 1 seule fois au demarrage du programme ---
     
    // ------- Initialisation fonctionnalites utilisees -------  
     
    // Initialisation de l'afficheur LCD
    Wire.begin();
    RTC.begin();
    lcd.init(); // initialisation de l'afficheur
    delay(10); // pause rapide pour laisser temps initialisation
    lcd.clear(); // efface LCD
    delay(10);
    lcd.blink(); // active clignotement
    pinMode(capteur1, INPUT);
    pinMode(capteur2, INPUT);
    pinMode(buzzer, OUTPUT);
     
    // ------- Broches en sorties numeriques -------  
     
    // ------- Broches en entrees numeriques -------  
     
    // ------- Activation si besoin du rappel au + (pullup) des broches en entrees numeriques -------  
     
    // ------- Initialisation des variables utilisees -------  
     
    } // fin de la fonction setup()
    // ********************************************************************************
     
    ////////////////////////////////// 3. FONCTION LOOP = Boucle sans fin = coeur du programme //////////////////
    // la fonction loop() s'execute sans fin en boucle aussi longtemps que l'Arduino est sous tension
     
    void loop(){ // debut de la fonction loop()
     
     
    // --- ici instructions à executer par le programme principal ---
     
    // ------ Code exemple lecture touche clavier matriciel --------
     
      digitalWrite(buzzer,LOW);
      lcd.clear();
      horloge();
      lcd.setCursor(0, 1); 
      // lcd.blink();
      lcd.print("Code secret:"); // affiche variable
      code=SAISIE_uINT(); // appel de la fonction pour saisie valeur - # stoppe saisie
     
      switch (code)
      {
      case(0):     // Si aucune touche, il faut remettre l'horloge à l'heure
      lcd.clear();
      horloge();
      lcd.setCursor(0, 1); 
      lcd.print("Code secret:"); 
      //lcd.blink();
      break;
     
      case(1):
        temp1=tempo;
        while (temp1!=0)
          {
          lcd.clear();
          horloge();
          lcd.setCursor(0, 1); 
          lcd.print("Zone 1 active:"); // affiche variable
          lcd.print(temp1);
          lcd.noBlink();
          delay(1000);
          temp1=temp1-1;
          }
        do
          {
          lcd.clear();
          horloge();
          lcd.setCursor(0, 1); 
          lcd.print("Zone 1 active");
          delay(100);
          intrus1=digitalRead(capteur1);
          }
        while (intrus1==0);
        delay(1000);
        lcd.clear();
        lcd.print("Desactiver zone");
        lcd.setCursor(0, 1);
        //lcd.blink();
        code=SAISIE_uINT();
        if (code!=secret)
           {
            digitalWrite(buzzer,HIGH);
            lcd.clear();
            horloge();
            lcd.setCursor(0, 1);
            lcd.print("Intrusion zone 1");
            delay(120000);
            digitalWrite(buzzer,LOW);
    ici1:    code=SAISIE_uINT();
            if (code==secret)
            {
            break;
            }
            else goto ici1;
           }
          break;
     
      case(2):
          do
          {
          lcd.clear();
          horloge();
          lcd.setCursor(0, 1); 
          lcd.print("Zone 2 active");
          delay(100);
          //lcd.noBlink();
          intrus2=digitalRead(capteur2);
          }
          while (intrus2==0);
        lcd.clear();
        digitalWrite(buzzer,HIGH);
        lcd.clear();
        horloge();
        lcd.setCursor(0, 1);
        lcd.print("Intrusion zone 2");
        delay(120000);
        digitalWrite(buzzer,LOW);
    ici2:    code=SAISIE_uINT();
            if (code==secret)
            {
            break;
            }
            else goto ici2;
     
      break;
     
      case(3):
       temp1=tempo;
        while (temp1!=0)
          {
          lcd.clear();
          horloge();
          lcd.setCursor(0, 1); 
          lcd.print("Zones actives:"); // affiche variable
          lcd.print(temp1);
          //lcd.noBlink();
          delay(1000);
          temp1=temp1-1;
          }
        do
          {
          lcd.clear();
          horloge();
          lcd.setCursor(0, 1); 
          lcd.print("Zones actives");
          delay(100);
          intrus1=digitalRead(capteur1);
          intrus2=digitalRead(capteur2);
          }
        while ((intrus1==0)&&(intrus2==0));
        delay(1000);
            if (intrus1==1)
            {
            lcd.clear();
            lcd.print("Desactiver zones");
            lcd.setCursor(0, 1);
            //lcd.blink();
            code=SAISIE_uINT();
              if (code!=secret)
              {
              digitalWrite(buzzer,HIGH);
              lcd.clear();
              horloge();
              lcd.setCursor(0, 1);
              lcd.print("Intrusion zone 1");
              delay(120000);
              digitalWrite(buzzer,LOW);
    ici3:    code=SAISIE_uINT();
                 if (code==secret)
                 {
                  break;
                 }
                 else goto ici3;
               }
             }
             else
             {
             lcd.clear();
             digitalWrite(buzzer,HIGH);
             lcd.clear();
             horloge();
             lcd.setCursor(0, 1);
             lcd.print("Intrusion zone 2");
             delay(120000);
             digitalWrite(buzzer,LOW);
    ici4:    code=SAISIE_uINT();
              if (code==secret)
              {
              break;
              }
              else goto ici4;
              }
          break;
     
      case(8):
      lcd.clear();
      lcd.print("Temporisation"); // affiche variable
      lcd.setCursor(0,1);
      lcd.print("(1..99 s):");
      //lcd.blink();
      code=SAISIE_uINT();
      tempo=code;
      break;
     
      case(9):
      lcd.clear();
      horloge();
      lcd.setCursor(0, 1); 
      lcd.print("Code secret:"); // affiche variable
      //lcd.blink();
      code=SAISIE_uINT();
      if (code==secret)
        {
         lcd.clear();
         lcd.print("Nouveau code:"); // affiche variable
         lcd.setCursor(0, 1); 
         //lcd.blink();
         code=SAISIE_uINT();
         secret=code;
        }
      else
      {
      lcd.clear(); 
      lcd.print("Code errone:"); // affiche variable
      //lcd.noBlink();
      delay(5000);
      }
     
      break;
     
      default:
      lcd.clear();
      horloge();
      lcd.setCursor(0,1);
      lcd.print("Touche inactive"); // affiche variable
      //lcd.noBlink();
      delay(1500); // pause entre 2 saisies
      }
     
     
     
    } // fin de la fonction loop() - le programme recommence au debut de la fonction loop sans fin
    // ********************************************************************************
     
     
    // ////////////////////////// FONCTIONS DE GESTION DES INTERRUPTIONS ////////////////////
     
     
    // ////////////////////////// AUTRES FONCTIONS DU PROGRAMME ////////////////////
     
    unsigned int SAISIE_uINT (){ // fonction qui renvoie une valeur unsignedint (16bits)
     
    //---- variables locales utilisees dans la fonction
    unsigned char saisie_int[8]={0,0,0,0,0,0,0,0}; // cree un tableau de variables char pour saisir valeur
    unsigned char compt_touche_int; // variable de comptage du nombre de touches saisies
    unsigned long nombre_saisi_int; // variable de calcul du nombre saisi
    unsigned char touche_int; // variable locale pour valeur touche appuyee de 0 Ã  15
    unsigned int temp;
    unsigned int no_key;
    unsigned int debut;
    //---- initialisation des variables utilisees ----
    compt_touche_int=0; // aucune touche saisie au demarrage
    nombre_saisi_int=0; // initialise la variable
     
    //------ gestion appui touche sur clavier
     debut=millis();
     while (compt_touche_int<5){ // tant que pas appuis maxi = 5 pour int (valeur maxi=65535)
     
           touche_int= clavier.getKey(); // lecture de la touche appuyee
            if (touche_int== NO_KEY)  // si clavier inutilise pendant 10 secondes, on sort de la fonction
            {
              no_key=millis();
              temp=no_key-debut;
              if (temp>10000) break;
            }
           if (touche_int!= NO_KEY){ // si une touche a ete frappee -- gestion de la touche appuyee
     
     
               if (touche_int=='#') break; // sort du while si appui sur #
     
               for (byte i=0;i<LIGNES;i++) {
                 for (byte j=0; j<COLONNES;j++){
     
                   if (touche_int==touches[i][j]) touche_int=touches[i][j]-48; // extrait valeur numerique à partir ASCII
                 }
               }
               saisie_int[compt_touche_int]=touche_int; //enregistre le caractère dans tableau code_saisi
               lcd.print(char(saisie_int[compt_touche_int]+48)); // affiche valeur à emplacement actuel sur LCD
     
               compt_touche_int=compt_touche_int+1; // on incremente la variable compt qui memorise le nombre de caractères saisis
     
               //delay ()
     
               touche_int=255; // remet à 255 la variable touche... pour eviter prise en compte même appui à plusieurs reprises
     
             } //---- fin gestion appui clavier
     
    }// fin du While = fin de la lecture du clavier
     
    //--------- calcul valeur saisie en fonction du nombre de chiffres saisis ---------
    if (compt_touche_int==0)nombre_saisi_int=0;   // si aucun chiffre saisi
    if (compt_touche_int==1)nombre_saisi_int=saisie_int[0];   // si 1 seul chiffre saisi
    if (compt_touche_int==2)nombre_saisi_int=(saisie_int[0]*10)+(saisie_int[1]*1);   // si 2 chiffres saisi
    if (compt_touche_int==3)nombre_saisi_int=(saisie_int[0]*100)+(saisie_int[1]*10)+(saisie_int[2]*1);   // si 3 chiffres saisi
    if (compt_touche_int==4)nombre_saisi_int=(saisie_int[0]*1000)+(saisie_int[1]*100)+(saisie_int[2]*10)+(saisie_int[3]*1);   // si 4 chiffres saisi
    if (compt_touche_int==5)nombre_saisi_int=(saisie_int[0]*10000)+(saisie_int[1]*1000)+(saisie_int[2]*100)+(saisie_int[3]*10)+(saisie_int[4]*1);   // si 5 chiffres saisi
     
    //------ Ã  realiser en sortie de lecture du clavier ----
     
     
    compt_touche_int=0; // reinitialise le nombre de touche saisies
     
    //----- renvoi de la valeur saisie ----
     
    return (nombre_saisi_int); // renvoie la valeur - sortie de la fonction
     
    }
     
    void horloge()
    {
    DateTime now = RTC.now();
    lcd.setCursor(0, 0);
    if (now.day()<10)
    {
     lcd.print("0");
    }
    lcd.print(now.day());
    lcd.print("/");
    if (now.month()<10)
    {
     lcd.print("0");
    }
    lcd.print(now.month());
    lcd.print("/");
    lcd.print(now.year());
    lcd.print(" ");
    if (now.hour()<10)
    {
     lcd.print("0");
    }
    lcd.print(now.hour());
    lcd.print(":");
    if (now.minute() < 10) 
    {
    lcd.print("0");
    }
    lcd.print(now.minute());
    }
    // ////////////////////////// Fin du programme ////////////////////

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


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 620
    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 620
    Points : 56 857
    Points
    56 857
    Billets dans le blog
    40
    Par défaut
    Et si tu testais les composants séparément pour commencer ? (tu peux même ouvrir une discussion par composant au besoin).

    Un bout de code pour le LCD, un autre pour le RTC avec affichage dans le Moniteur Série, un dernier pour le clavier matriciel aussi en utilisant le Moniteur Série... ça permettrait de résoudre les problèmes un par un, parce que là...

    Apparemment le tiny RTC est à base de puce DS1307.

  13. #13
    Nouveau membre du Club
    Inscrit en
    Décembre 2003
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 67
    Points : 38
    Points
    38
    Par défaut suite code RTC
    Effectivement c'est ce que je cherche un code d'essai rien que pour le Tiny RTC I2C pcq le code test de gotronic pour le LCD fonctionne correctement et le rétro éclairage fonctionne aussi donc la je suis sûr du module LCD I2C il me reste le module Tiny RTC I2C pas moyen de trouver un code d'essai pour simplement afficher l'heure sur mon LCD I2C. Pourriez-vous me fournir un code d'essai pour RTC I2C?

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


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 620
    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 620
    Points : 56 857
    Points
    56 857
    Billets dans le blog
    40
    Par défaut
    C'est la librairie RTCLib d'Adafruit ? Il y a un exemple ici.

  15. #15
    Nouveau membre du Club
    Inscrit en
    Décembre 2003
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 67
    Points : 38
    Points
    38
    Par défaut suite code RTC
    Je me suis rendu compte que tous les problèmes viennent du choix de la carte arduino leonardo dans le logiciel de programmation arduino. J'ai bien une carte Leonardo qui a déjà les bornes SCL et SDA ce qui n'est pas le cas de la carte historique arduino uno où l'on doit raccorder SDA sur A4 et SCL sur A5. Si je raccorde ma carte leonardo comme une UNO (raccordant A4 et A5 SDA/SCL) et que je la déclare comme une UNO dans le logiciel arduino je n'ai plus de message d'erreur??? Une ide peut-être?? pcq si je pouvais la déclarer comme leonardo je récupère 2 bornes.

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


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 620
    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 620
    Points : 56 857
    Points
    56 857
    Billets dans le blog
    40
    Par défaut
    Citation Envoyé par didiersee Voir le message
    Si je raccorde ma carte leonardo comme une UNO (raccordant A4 et A5 SDA/SCL) et que je la déclare comme une UNO dans le logiciel arduino je n'ai plus de message d'erreur???
    Oui mais non Si c'est une Leonardo, utilise les SCL et SDA dédiées et dans le menu Outils/type de carte il faut choisir la Leonardo.

    avrdude: butterfly_recv(): programmer is not responding
    Found programmer: Id = "þ"; type = ¸
    Software Version = h.
    avrdude: error: buffered memory access not supported. Maybe it isn't
    a butterfly/AVR109 but a AVR910 device?
    avrdude: initialization failed, rc=-1
    Double check connections and try again, or use -F to override
    this check.
    Inquiétant ce message. Ta Leonardo est-elle une carte officielle Arduino d'un revendeur sérieux ou un quelconque clone chinois à pas cher ?

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


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 620
    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 620
    Points : 56 857
    Points
    56 857
    Billets dans le blog
    40
    Par défaut
    sur le net, on trouve ce genre de problèmes avec des cartes plus exotiques comme la Leonardo.
    Certains ont pu résoudre le problème en jouant avec le bouton Reset : il faut presser le bouton Reset de la carte juste après avoir cliqué sur le bouton de téléversement du code. Reste à trouver le bon timing

  18. #18
    Nouveau membre du Club
    Inscrit en
    Décembre 2003
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 67
    Points : 38
    Points
    38
    Par défaut code RTC suite
    merci je vais essayer

Discussions similaires

  1. [XL-2007] Exécution de code suite au changement de focus de cellule
    Par dlight dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 31/07/2015, 22h32
  2. [IP-2007] Exporter certificat signature de code suite changement de machine
    Par Rootdje dans le forum InfoPath
    Réponses: 3
    Dernier message: 17/12/2009, 12h03
  3. creer un code sur changement d'enregistrement
    Par deglingo37 dans le forum Access
    Réponses: 6
    Dernier message: 22/05/2006, 09h42
  4. problème d'état suite à changement de version
    Par moicats dans le forum Access
    Réponses: 4
    Dernier message: 11/04/2006, 16h16
  5. Erreur suite à changement de version
    Par BW7541 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 15
    Dernier message: 31/03/2006, 16h48

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