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 :

EEPROM AT24C256 et Arduino


Sujet :

Arduino

  1. #1
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    décembre 2019
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : décembre 2019
    Messages : 43
    Points : 24
    Points
    24
    Par défaut EEPROM AT24C256 et Arduino
    Bonjour à tous

    Citation Envoyé par Guesset Voir le message
    ... Par exemple, lors d'une actualisation d'un fichier la nouvelle version n'est pas nécessairement à la même place ni même en un seul morceau.

    L'espace mémoire vu est un espace logique et une carte SD n'est pas que de la mémoire mais aussi de l'intelligence embarquée qui va gérer les échanges et garantir (dans certaines limites) un bon fonctionnement même quand des secteurs de la mémoires deviennent défaillants ...
    Merci pour ta réponse qui m'indique que la SD est, en effet totalement inadaptée à mon besoin, sans compter la démesure de capacité dont je ne suis plus maître.

    Je n'ai besoin que de moins de 16 koctets alors que les SD actuelles sont en giga.

    J'ai trouvé et reçu des cartes EEPROM contenant une 24C256 qui devrait me convenir et qui se gère en i2C.

    Mon programme qui prépare la mémorisation et qui va devoir l'exploiter avance bien et j'en arrive à la gestion de cette carte mémoire, que je ne sais pas trop encore comment l'aborder.

    C'est cette carte

    https://www.amazon.fr/gp/product/B07...?ie=UTF8&psc=1

    contenant la puce 24C256.

    AT24C128.PDF

    Comme souvent, je peine à trouver la datasheet du shield, et, même dans le pdf de l'EEPROM je ne trouve pas l'adresse i2c de la bête.

    Sauf erreur, je n'en trouve pas mention dans EEPROM.h, alors que je trouve bien ces valeurs pour les RTC que je maîtrise à peu près bien à présent, grâce aux conseils reçus ici.

    Si vous avez des conseils à ces sujets, ils continuent d'être les bienvenus.

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

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : janvier 2009
    Messages : 11 395
    Points : 49 429
    Points
    49 429
    Billets dans le blog
    18
    Par défaut
    Salut,

    La bibliothèque EEPROM.h fournie dans l'EDI standard concerne l'EEPROM intégrée au microcontrôleur (1024 octets pour l'ATmega328P de l'Arduino UNO).

    Pour l'EEPROM 24C256 :
    Nom : address_24C256.PNG
Affichages : 109
Taille : 31,2 Ko

    L'adresse est codée sur 7 bits, bit 7 à bit 1, soit : 101 0A2A1A0.

    Les bits A0 , A1 et A2 peuvent être configurés matériellement en connectant les broches correspondantes soit à VCC soit à GND.
    Si ces broches ne sont pas câblées sur le module, A0 = A1 = A2 =0, et l'adresse est donc : 0x50

    Un coup de scan I2C devrait le confirmer.

    Pour démarrer plus facilement, la bibliothèque qui va bien, par exemple : https://github.com/adamjezek98/Eeprom_at24c256

  3. #3
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    décembre 2019
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : décembre 2019
    Messages : 43
    Points : 24
    Points
    24
    Par défaut
    Bonjour à tous

    Voilà des informations très instructives et qui se confirment par la pratique.

    Citation Envoyé par f-leb Voir le message
    ... Si ces broches ne sont pas câblées sur le module, A0 = A1 = A2 =0, et l'adresse est donc : 0x50 ...
    Le décalage d'une colonne est trompeur, c'est le scanner qui a le dernier mot. ;-)

    Le scanner, parlons en.

    Citation Envoyé par f-leb Voir le message
    ... Un coup de scan I2C devrait le confirmer ...
    Je n'avais, jusqu'à aujourd'hui, jamais réussi à le faire fonctionner.

    Je ne dispose que de mon afficheur LCD à quatre ligne, mais ta proposition de scan m'a donné l'idée, avec mon programme déjà existant et fonctionnel d'affichage, de modifier le sketch pour envoyer les résultats sur mon afficheur, qui me donne bien ton 0x50, et me confirme ceux déjà utilisés: l'afficheur et la RTC.

    Je suis un peu surpris par un intrus 0x68 dont je ne comprends pas la présence.

    Si quelqu'un a des idées, il est le bienvenu.

    A moins de passer à côté de quelque chose d'évident et d’élémentaire, je n'ai pas trouvé comment exploiter directement (et sans rien d'autre), les sorties du scanner pointé par ton lien.

    S'il est intéressant de publier "ma" version, avec l'afficheur prévu et donc stand alone, je veux bien, après avoir avancé ma mémorisation, nettoyer mon sketch pour n'y laisser que ce qui est nécessaire et utile. Là, il persiste toutes mes procédures propres à mon application et qui sont totalement inutiles au scanner qui n'a besoin que d'afficheur.

  4. #4
    Membre émérite

    Homme Profil pro
    mad scientist :)
    Inscrit en
    septembre 2019
    Messages
    1 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : septembre 2019
    Messages : 1 502
    Points : 2 728
    Points
    2 728
    Par défaut
    0x68 c'est généralement soit une RTC, soit un gyroscope. Dans votre cas, ce doit être la RTC

    Je n'avais, jusqu'à aujourd'hui, jamais réussi à le faire fonctionner
    et la console série, elle sert à quoi?

    le sketch de scan fait donc il faut vous assurer que la console est ouverte à 9600 bauds

    Je n'ai besoin que de moins de 16 koctets alors que les SD actuelles sont en giga
    à mon avis vous avez besoin de bcp moins, c'est parce que vous souhaitez avoir un tableau qui sera quasiment vide. si vous preniez une autre technique de représentation des activités ça tiendrait sans doute dans l'EEPROM de votre Arduino (1ko)

  5. #5
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    décembre 2019
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : décembre 2019
    Messages : 43
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par Jay M Voir le message
    ... et la console série, elle sert à quoi? ...
    Justement, je me le demande, et je n’ai sûrement rien compris.

    Si c’est un accessoire extérieur, je ne vois pas lequel physiquement.

    Citation Envoyé par Jay M Voir le message
    ... à mon avis vous avez besoin de bcp moins, c'est parce que vous souhaitez avoir un tableau qui sera quasiment vide ...
    C’est probable, mais je n’ai pas encore trouvé un moyen "simple" et en théorie illimité en nombre de séquences par ligne avec la résolution de la minute.

  6. #6
    Membre émérite

    Homme Profil pro
    mad scientist :)
    Inscrit en
    septembre 2019
    Messages
    1 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : septembre 2019
    Messages : 1 502
    Points : 2 728
    Points
    2 728
    Par défaut
    C’est probable, mais je n’ai pas encore trouvé un moyen "simple" et en théorie illimité en nombre de séquences par ligne avec la résolution de la minute
    si effectivement c'est "illimité" vous devez pouvoir représenter l'état des 8 relais à chaque minute, donc 1 octet x 7 x 24 x 60 = 10080 octets soit un peu moins de 10Ko

    Si vous partez sur une carte ESP8266 ou ESP32 par exemple au lieu du UNO, comme il y a 4 Mega de mémoire flash, on peut allouer par exemple 1 mega pour les données (ça ce gère alors comme un disque dur avec des fichiers) et conserver le reste pour le programme. (et un ESP32 coûte moins cher qu'un UNO officiel et vous donnera le WiFi en plus donc vous pourriez aussi avoir une interface web)

    Ensuite il y a la réalité combien "d'actions" différentes allez vous réellement avoir dans la semaine ? par exemple une structure de ce type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    struct __attribute__ ((packed)) tProgramme {
      uint8_t actif: 1;
      uint8_t jour: 7;       // bit 0 = Lundi, bit 6 = Dimanche
      uint8_t hDebut: 5;     // 0-23
      uint8_t minDebut: 6;   // 0-59
      uint8_t hFin: 5;       // 0-23
      uint8_t minFin: 6;     // 0-59
      uint8_t broches;       // masque des broches actives (8 relais)
    };
    tiendra sur 5 octets et permet de noter une même heure de début et de fin, pour quels jours de la semaine et quels relais

    donc par exemple pour allumer les relais 1, 2 et 3 du Lundi au Vendredi entre 6h30 et 12h15 vous allez faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    tProgramme programmes[200]; // on a un tableau de 200 programmes possibles (1000 octets)
     
    programmes[0].actif = true;
    programmes[0].jour = 0b0011111;
    programmes[0].hDebut = 6;
    programmes[0].minDebut = 30;
    programmes[0].hFin = 12;
    programmes[0].minFin = 15;
    programmes[0].broches = 0b00000111;
    ==> cette programmation tient sur 5 octets... (il reste même 2 bits disponibles qui permettraient par exemple de définir si on veut clignoter et 3 rythmes -> par exemple 11 toutes les minutes, 10 toutes les 10 secondes, 01 toutes les 5 secondes,00 pas de clignotement)


    —————
    Le Moniteur série fait partie de l'IDE arduino.

    Une fois votre Arduino UNO connecté par USB à votre PC, dans le menu "Outils" vous choisissez UNO comme type de carte, vous choisissez le port sur lequel il est connecté et puis vous clickez sur "Moniteur Série"

    une fenêtre comme celle ci s'ouvre
    Nom : Capture d’écran 2021-04-07 à 13.55.29.png
Affichages : 93
Taille : 142,6 Ko

    si vous chargez par exemple le programme suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void setup() {
      Serial.begin(115200); // penser à régler le moniteur Série à 115200 bauds
      Serial.println("Hello Gienas !!!");
    }
     
    void loop() {
      if (Serial.available()) {
        Serial.print((char) Serial.read()); // on fait l'écho de ce qui est tapé
      }
    }
    et que vous avez bien mis le moniteur à 115200 bauds, vous devriez avoir un salut qui s'affiche et ensuite tout ce que vous tapez dans la ligne d'entrée de texte va s'afficher dans la zone d'affichage dès que vous appuyez entrée sur le clavier

  7. #7
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    décembre 2019
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : décembre 2019
    Messages : 43
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par Jay M Voir le message
    ... Le Moniteur série fait partie de l'IDE arduino.

    Une fois votre Arduino UNO connecté par USB à votre PC, dans le menu "Outils" vous choisissez UNO comme type de carte, vous choisissez le port sur lequel il est connecté et puis vous clickez sur "Moniteur Série" ...
    Je viens d'essayer, et, en effet, ça change la vie!

    Comment ai-je pu faire en m'en passant?

    Maintenant, il sera de toutes les fêtes. Merci pour le super conseil.

  8. #8
    Membre émérite

    Homme Profil pro
    mad scientist :)
    Inscrit en
    septembre 2019
    Messages
    1 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : septembre 2019
    Messages : 1 502
    Points : 2 728
    Points
    2 728
    Par défaut
    Comment ai-je pu faire en m'en passant?
    c'est le métier qui rentre !

  9. #9
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    décembre 2019
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : décembre 2019
    Messages : 43
    Points : 24
    Points
    24
    Par défaut
    Bonjour à tous

    Citation Envoyé par Jay M Voir le message
    c'est le métier qui rentre ! ...
    Pour dire la vérité, c'est beaucoup plus laborieux qu'il n'y paraît.

    Je tente pour l'instant d'ajouter dans mon programme déjà établi, les procédures de lecture et d'écriture en eeprom externe, mais sans les utiliser tant que tout n'est pas sûr.

    Et là, tout ne se passe pas comme prévu.

    je pressens que EEPROM ce n'est pas que ce que je place à l'extérieur (at24c256) mais aussi l'eeprom interne à laquelle je ne veux pas toucher.

    Je n'ai pas réussi encore à fixer/sélectionner les .h que je dois inclure dans mes entêtes, ni la fonction lecture et écriture d'un byte à une adresse fixée.

    Chacune de mes tentatives échoue lors de la compilation.

    Je confirme que l'adresse de l'eeprom est bien 0x50.

    Quelles sont les bibliothèques à inclure, et quelles sont les instructions de lexture/écriture à utiliser?

    Ma dernière tentative qui ne donne pas d'erreur de compilation est

    EEPROM.write ( adresseEcritureEeprom , valeurEcritureEeprom ) ; à l'écriture et

    octetLuEeprom = EEPROM.read ( adresseLectureEeprom ) ; en lecture

    Mais je sens bien que ces instructions ne vont pas chercher ni placer les données dans l'eeprom externe puisqu'il n'y est pas question de l'adresse i2c qui n'est annoncée nulle part. Elle l'est bien dans un des .h de les entêtes

    #define EEPROM_I2C_ADDRESS 0x50

    mais les instructions de lecture qui sont supposées en tenir compte déclenchent des erreurs de compilation si je les introduis.

    Un coup de pouce serait bienvenu.

  10. #10
    Membre émérite

    Homme Profil pro
    mad scientist :)
    Inscrit en
    septembre 2019
    Messages
    1 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : septembre 2019
    Messages : 1 502
    Points : 2 728
    Points
    2 728
    Par défaut
    EDIT: il y a d'autres bibliothèques à tester.
    Adafruit: https://github.com/adafruit/Adafruit_FRAM_I2C
    JChristensen https://github.com/JChristensen/extEEPROM
    Paul Gaudré https://github.com/polohpi/AT24C256
    RobTillaart https://github.com/RobTillaart/I2C_EEPROM
    ...


    comme suggéré par @f-leb, si vous installez la bibliothèque de adamjezek98 pour votre composant

    voici un petit code de test (que je n'ai pas testé, juste modifié un de leur exemple) (qui affiche de l'information dans le moniteur série ouvert à 115200 bauds)
    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
    #include <Eeprom_at24c256.h>
    Eeprom_at24c256 monEeprom(0x50); // notre interface d'accès, l'adresse de l'EEPROM est 0x50
     
    void setup()
    {
      char ecriture[30] = "TEST DE NOTRE EEPROM";
      char lecture[30];
     
      Serial.begin(115200); // ouvrir la console à 115200 bauds
      Serial.println(F("On écrit dans l'EEPROM"));
      monEeprom.write(100, (byte*) ecriture, sizeof(ecriture)); // on écrit 30 octets à l'adresse 100, en provenance de notre buffer "ecriture"
     
      Serial.println(F("On relit l'EEPROM"));
      monEeprom.read(100, (byte *) lecture, sizeof(lecture)); // on lit 30 octets à l'adresse 100, dans de notre buffer "lecture"
      Serial.print(F("J'ai lu le message: "));
      Serial.println(lecture);
    }
     
    void loop() {}

    En utilisant la bibliothèque Adafruit:

    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
    #include <Adafruit_EEPROM_I2C.h>
    Adafruit_EEPROM_I2C i2ceeprom;
     
    const char * message = "BONJOUR";
     
    void writeBuffer(uint16_t addr, void * buffer, size_t n) {
      Serial.print(F("Ecriture de "));
      for (size_t i = 0; i < n; i++) {
        Serial.write(((uint8_t *) buffer)[i]);
        i2ceeprom.write8(addr + i, ((uint8_t *) buffer)[i]);
      }
    }
     
    void setup(void) {
      Serial.begin(115200);
     
      if (i2ceeprom.begin(0x50)) Serial.println(F("EEPROM I2C OK"));
      else {
        Serial.println(F("Pas d'EEPROM I2C"));
        while (1) yield();
      }
     
     
      writeBuffer(8, message, strlen(message) + 1);
     
      // lecture des premiers 32 octets
      uint8_t val;
      for (uint16_t addr = 0; addr < 32; addr++) {
        val = i2ceeprom.read8(addr);
        if ((addr % 8) == 0) Serial.println(); else Serial.write('\t');
        if (isalnum(val)) {
          Serial.write('*');
          Serial.write((char) val);
        }
        else {
          if (val < 0x10) Serial.print('0');
          Serial.print(val, HEX);
        }
      }
      Serial.println();
    }
     
    void loop(void) {}
    ce code là je l'ai testé et ça donne sur le moniteur (les valeurs sont affichées en hexadécimal sauf si c'est un symbole alphanumérique dans ce cas je mets * suivi du symbole)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    EEPROM I2C OK
    Ecriture de BONJOUR
    *W	*E	*S	*T	00	00	00	00
    *B	*O	*N	*J	*O	*U	*R	00
    *1	3D	3D	3D	3D	3D	3D	3D
    3D	3D	3D	3D	3D	3D	3D	3D
    on voit bien que BONJOUR a été écrit en EEPROM

    le montage sur Arduino UNO est assez simple si vous avez ce module (les pins SCL et SDA sont ailleurs sur une MEGA)
    Nom : montage.png
Affichages : 78
Taille : 132,6 Ko

  11. #11
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    décembre 2019
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : décembre 2019
    Messages : 43
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par Jay M Voir le message
    ... voici un petit code de test (que je n'ai pas testé, juste modifié un de leur exemple) (qui affiche de l'information dans le moniteur série ouvert à 115200 bauds)[CODE]#include <Eeprom_at24c256.h>
    Eeprom_at24c256 monEeprom(0x50); // notre interface d'accès, l'adresse de l'EEPROM est 0x50 ...



    Comme je m'en étais déjà aperçu, le lancement de ce sketch n'aboutit pas en compilation. J'ai droit à l'erreur


    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
     
     
    #include <Eeprom_at24c256.h>
    Eeprom_at24c256 monEeprom(0x50); // notre interface d'accès, l'adresse de l'EEPROM est 0x50
     
    void setup()
    {
      char ecriture[30] = "TEST DE NOTRE EEPROM";
      char lecture[30];
     
      Serial.begin(115200); // ouvrir la console à 115200 bauds
      Serial.println(F("On écrit dans l'EEPROM"));
      monEeprom.write(100, (byte*) ecriture, sizeof(ecriture)); // on écrit 30 octets à l'adresse 100, en provenance de notre buffer "ecriture"
     
      Serial.println(F("On relit l'EEPROM"));
      monEeprom.read(100, (byte *) lecture, sizeof(lecture)); // on lit 30 octets à l'adresse 100, dans de notre buffer "lecture"
      Serial.print(F("J'ai lu le message: "));
      Serial.println(lecture);
    }
     
    void loop() {}
    J'ai droit au message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    C:\Users\Guy\AppData\Local\Temp\ccxR56lY.ltrans0.ltrans.o: In function `global constructors keyed to 65535_0_f_leb_test_eeprom_01.ino.cpp.o.1899':
    <artificial>:(.text.startup+0x60): undefined reference to `Eeprom_at24c256::Eeprom_at24c256(int)'
    C:\Users\Guy\AppData\Local\Temp\ccxR56lY.ltrans0.ltrans.o: In function `setup':
    B:\__Arduino_tests\f-leb_test_eeprom_01/f-leb_test_eeprom_01.ino:11: undefined reference to `Eeprom_at24c256::write(unsigned int, unsigned char*, unsigned char)'
    B:\__Arduino_tests\f-leb_test_eeprom_01/f-leb_test_eeprom_01.ino:14: undefined reference to `Eeprom_at24c256::read(unsigned int, unsigned char*, unsigned char)'
    collect2.exe: error: ld returned 1 exit status
    Plusieurs bibliothèque trouvées pour "Eeprom_at24c256.h"
    Utilisé : C:\Users\Guy\Documents\Arduino\libraries\Eeprom_at24c256
    Non utilisé : C:\Users\Guy\Documents\Arduino\libraries\SdFat-2.0.6
    exit status 1
    Erreur de compilation pour la carte Arduino Uno
    Essai suivant, avec le sketch adafruit

    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
    #include <Adafruit_EEPROM_I2C.h>
    Adafruit_EEPROM_I2C i2ceeprom;
     
    const char * message = "BONJOUR";
     
    void writeBuffer(uint16_t addr, void * buffer, size_t n) {
      Serial.print(F("Ecriture de "));
      for (size_t i = 0; i < n; i++) {
        Serial.write(((uint8_t *) buffer)[i]);
        i2ceeprom.write8(addr + i, ((uint8_t *) buffer)[i]);
      }
    }
     
    void setup(void) {
      Serial.begin(115200);
     
      if (i2ceeprom.begin(0x50)) Serial.println(F("EEPROM I2C OK"));
      else {
        Serial.println(F("Pas d'EEPROM I2C"));
        while (1) yield();
      }
     
     
      writeBuffer(8, message, strlen(message) + 1);
     
      // lecture des premiers 32 octets
      uint8_t val;
      for (uint16_t addr = 0; addr < 32; addr++) {
        val = i2ceeprom.read8(addr);
        if ((addr % 8) == 0) Serial.println(); else Serial.write('\t');
        if (isalnum(val)) {
          Serial.write('*');
          Serial.write((char) val);
        }
        else {
          if (val < 0x10) Serial.print('0');
          Serial.print(val, HEX);
        }
      }
      Serial.println();
    }
     
    void loop(void) {}
    Première alerte et rejet: le fichier #include <Adafruit_EEPROM_I2C.h>

    en gros le même message. Pas OK pour Uno

    A suivre puisque la suite est trop longue et dépasse 12000 caractères.

  12. #12
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    décembre 2019
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : décembre 2019
    Messages : 43
    Points : 24
    Points
    24
    Par défaut
    sketch suivant qui ne passe pas

    C'est celui du lien

    https://github.com/JChristensen/extE...eepromTest.ino

    qui ne finit pas avec stray '\302' in program


    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
     
     
     
     
     
     
     
     
     
     
    In file included from B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:7:0:
    extEEPROM.h:53:42: error: stray '\302' in program
       <title>extEEPROM/extEEPROM.h at master · JChristensen/extEEPROM · GitHub</title>
                                              ^
    extEEPROM.h:53:43: error: stray '\267' in program
       <title>extEEPROM/extEEPROM.h at master · JChristensen/extEEPROM · GitHub</title>
                                               ^
    extEEPROM.h:53:68: error: stray '\302' in program
       <title>extEEPROM/extEEPROM.h at master · JChristensen/extEEPROM · GitHub</title>
                                                                        ^
    extEEPROM.h:53:69: error: stray '\267' in program
       <title>extEEPROM/extEEPROM.h at master · JChristensen/extEEPROM · GitHub</title>
                                                                         ^
    In file included from B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:7:0:
    extEEPROM.h:305:10: error: missing terminating ' character
         <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="js-site-search-form" role="search" aria-label="Site" data-scope-type="Repository" data-scope-id="8976308" data-scoped-search-url="/JChristensen/extEEPROM/search" data-owner-scoped-search-url="/users/JChristensen/search" data-unscoped-search-url="/search" action="/JChristensen/extEEPROM/search" accept-charset="UTF-8" method="get">
              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:7:0:
    extEEPROM.h:352:75: error: stray '\342' in program
           <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">&#8629;</span>
                                                                               ^
    extEEPROM.h:352:76: error: stray '\206' in program
           <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">&#8629;</span>
                                                                                ^
    extEEPROM.h:352:77: error: stray '\265' in program
           <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">&#8629;</span>
                                                                                 ^
    extEEPROM.h:357:56: error: stray '\342' in program
           <span class="d-inline-block ml-1 v-align-middle">&#8629;</span>
                                                            ^
    extEEPROM.h:357:57: error: stray '\206' in program
           <span class="d-inline-block ml-1 v-align-middle">&#8629;</span>
                                                             ^
    extEEPROM.h:357:58: error: stray '\265' in program
           <span class="d-inline-block ml-1 v-align-middle">&#8629;</span>
                                                              ^
    In file included from B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:7:0:
    extEEPROM.h:393:75: error: stray '\342' in program
           <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">&#8629;</span>
                                                                               ^
    extEEPROM.h:393:76: error: stray '\206' in program
           <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">&#8629;</span>
                                                                                ^
    extEEPROM.h:393:77: error: stray '\265' in program
           <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">&#8629;</span>
                                                                                 ^
    extEEPROM.h:398:56: error: stray '\342' in program
           <span class="d-inline-block ml-1 v-align-middle">&#8629;</span>
                                                            ^
    extEEPROM.h:398:57: error: stray '\206' in program
           <span class="d-inline-block ml-1 v-align-middle">&#8629;</span>
                                                             ^
    extEEPROM.h:398:58: error: stray '\265' in program
           <span class="d-inline-block ml-1 v-align-middle">&#8629;</span>
                                                              ^
    In file included from B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:7:0:
    extEEPROM.h:425:75: error: stray '\342' in program
           <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">&#8629;</span>
                                                                               ^
    extEEPROM.h:425:76: error: stray '\206' in program
           <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">&#8629;</span>
                                                                                ^
    extEEPROM.h:425:77: error: stray '\265' in program
           <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">&#8629;</span>
                                                                                 ^
    extEEPROM.h:430:56: error: stray '\342' in program
           <span class="d-inline-block ml-1 v-align-middle">&#8629;</span>
                                                            ^
    extEEPROM.h:430:57: error: stray '\206' in program
           <span class="d-inline-block ml-1 v-align-middle">&#8629;</span>
                                                             ^
    extEEPROM.h:430:58: error: stray '\265' in program
           <span class="d-inline-block ml-1 v-align-middle">&#8629;</span>
                                                              ^
    In file included from B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:7:0:
    extEEPROM.h:457:75: error: stray '\342' in program
           <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">&#8629;</span>
                                                                               ^
    extEEPROM.h:457:76: error: stray '\206' in program
           <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">&#8629;</span>
                                                                                ^
    extEEPROM.h:457:77: error: stray '\265' in program
           <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">&#8629;</span>
                                                                                 ^
    extEEPROM.h:462:56: error: stray '\342' in program
           <span class="d-inline-block ml-1 v-align-middle">&#8629;</span>
                                                            ^
    extEEPROM.h:462:57: error: stray '\206' in program
           <span class="d-inline-block ml-1 v-align-middle">&#8629;</span>
                                                             ^
    extEEPROM.h:462:58: error: stray '\265' in program
           <span class="d-inline-block ml-1 v-align-middle">&#8629;</span>
                                                              ^
    In file included from B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:7:0:
    extEEPROM.h:759:25: error: missing terminating " character
                 data-action="
                             ^
    extEEPROM.h:760:41: error: stray '#' in program
                   input-entered:ref-selector#inputEntered
                                             ^
    extEEPROM.h:761:40: error: stray '#' in program
                   tab-selected:ref-selector#tabSelected
                                            ^
    extEEPROM.h:762:38: error: stray '#' in program
                   focus-list:ref-selector#focusFirstListMember
                                          ^
    extEEPROM.h:763:13: error: missing terminating " character
                 "
                 ^
    extEEPROM.h:776:80: error: missing terminating ' character
                 <!-- TODO: this max-height is necessary or else the branch list won't scroll.  why? -->
                                                                                    ^~~~~~~~~~~~~~~~~~~~
    extEEPROM.h:801:25: error: missing terminating " character
                 data-action="
                             ^
    extEEPROM.h:802:41: error: stray '#' in program
                   input-entered:ref-selector#inputEntered
                                             ^
    extEEPROM.h:803:40: error: stray '#' in program
                   tab-selected:ref-selector#tabSelected
                                            ^
    extEEPROM.h:804:38: error: stray '#' in program
                   focus-list:ref-selector#focusFirstListMember
                                          ^
    extEEPROM.h:805:13: error: missing terminating " character
                 "
                 ^
    In file included from B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:7:0:
    extEEPROM.h:910:16: error: missing terminating " character
         <div class="Box mt-3 position-relative
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~
    extEEPROM.h:911:7: error: missing terminating " character
           ">
           ^~
    In file included from B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:7:0:
    extEEPROM.h:1173:70: error: stray '#' in program
             <td id="LC55" class="blob-code blob-code-inner js-file-line">#<span class="pl-k">ifndef</span> extEEPROM_h</td>
                                                                          ^
    extEEPROM.h:1177:70: error: stray '#' in program
             <td id="LC56" class="blob-code blob-code-inner js-file-line">#<span class="pl-k">define</span> <span class="pl-en">extEEPROM_h</span></td>
                                                                          ^
    extEEPROM.h:1186:70: error: stray '#' in program
             <td id="LC58" class="blob-code blob-code-inner js-file-line">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>Arduino.h<span class="pl-pds">&gt;</span></span></td>
                                                                          ^
    In file included from B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:7:0:
    extEEPROM.h:1359:71: error: stray '#' in program
             <td id="LC100" class="blob-code blob-code-inner js-file-line">#<span class="pl-k">endif</span></td>
                                                                           ^
    extEEPROM.h:1394:12: error: missing terminating ' character
           <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="js-jump-to-line-form Box-body d-flex" action="" accept-charset="UTF-8" method="get">
                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    In file included from B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:7:0:
    extEEPROM.h:1451:12: error: stray '\342' in program
         You can’t perform that action at this time.
                ^
    extEEPROM.h:1451:13: error: stray '\200' in program
         You can’t perform that action at this time.
                 ^
    extEEPROM.h:1451:14: error: stray '\231' in program
         You can’t perform that action at this time.
                  ^
    In file included from B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:7:0:
    extEEPROM.h:7:1: error: expected unqualified-id before '<' token
     <!DOCTYPE html>
     ^
    In file included from B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:7:0:
    extEEPROM.h:170:27: error: 'up' does not name a type; did you mean 'u8'?
                     Sign&nbsp;up
                               ^~
                               u8
    extEEPROM.h:177:27: error: 'up' does not name a type; did you mean 'u8'?
                     Sign&nbsp;up
                               ^~
                               u8
    extEEPROM.h:204:275: error: expected unqualified-id before '<' token
                         <a href="/features" class="py-2 lh-condensed-ultra d-block Link--primary no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Features">Features <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">&rarr;</span></a>
                                                                                                                                                                                                                                                                                       ^
    extEEPROM.h:206:251: error: expected unqualified-id before '<' token
                             <li class="edge-item-fix"><a href="/mobile" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover">Mobile <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">&rarr;</span></a></li>
                                                                                                                                                                                                                                                               ^
    extEEPROM.h:207:262: error: expected unqualified-id before '<' token
                             <li class="edge-item-fix"><a href="/features/actions" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover">Actions <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">&rarr;</span></a></li>
                                                                                                                                                                                                                                                                          ^
    extEEPROM.h:208:268: error: expected unqualified-id before '<' token
                             <li class="edge-item-fix"><a href="/features/codespaces" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover">Codespaces <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">&rarr;</span></a></li>
                                                                                                                                                                                                                                                                                ^
    extEEPROM.h:209:264: error: expected unqualified-id before '<' token
                             <li class="edge-item-fix"><a href="/features/packages" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover">Packages <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">&rarr;</span></a></li>
                                                                                                                                                                                                                                                                            ^
    extEEPROM.h:210:264: error: expected unqualified-id before '<' token
                             <li class="edge-item-fix"><a href="/features/security" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover">Security <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">&rarr;</span></a></li>
                                                                                                                                                                                                                                                                            ^
    extEEPROM.h:211:271: error: expected unqualified-id before '<' token
                             <li class="edge-item-fix"><a href="/features/code-review/" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover">Code review <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">&rarr;</span></a></li>
                                                                                                                                                                                                                                                                                   ^
    extEEPROM.h:212:285: error: expected unqualified-id before '<' token
                             <li class="edge-item-fix"><a href="/features/project-management/" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover">Project management <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">&rarr;</span></a></li>
                                                                                                                                                                                                                                                                                                 ^
    extEEPROM.h:213:272: error: expected unqualified-id before '<' token
                             <li class="edge-item-fix"><a href="/features/integrations" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover">Integrations <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">&rarr;</span></a></li>
                                                                                                                                                                                                                                                                                    ^
    extEEPROM.h:217:323: error: expected unqualified-id before '<' token
                           <li class="edge-item-fix"><a href="/sponsors" class="py-2 lh-condensed-ultra d-block no-underline Link--primary no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Sponsors">GitHub Sponsors <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">&rarr;</span></a></li>
                                                                                                                                                                                                                                                                                                                                       ^
    extEEPROM.h:218:339: error: expected unqualified-id before '<' token
                           <li class="edge-item-fix"><a href="/customer-stories" class="py-2 lh-condensed-ultra d-block no-underline Link--primary no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Customer stories">Customer stories<span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">&rarr;</span></a></li>
                                                                                                                                                                                                                                                                                                                                                       ^
    extEEPROM.h:241:307: error: expected unqualified-id before '<' token
                           <li class="edge-item-fix"><a href="/explore" class="py-2 lh-condensed-ultra d-block Link--primary no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Explore">Explore GitHub <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">&rarr;</span></a></li>
                                                                                                                                                                                                                                                                                                                       ^
    extEEPROM.h:246:299: error: expected unqualified-id before '<' token
                           <li class="edge-item-fix"><a href="/topics" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Topics">Topics <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">&rarr;</span></a></li>
                                                                                                                                                                                                                                                                                                               ^
    extEEPROM.h:247:316: error: expected unqualified-id before '<' token
                             <li class="edge-item-fix"><a href="/collections" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Collections">Collections <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">&rarr;</span></a></li>
                                                                                                                                                                                                                                                                                                                                ^
    extEEPROM.h:248:305: error: expected unqualified-id before '<' token
                           <li class="edge-item-fix"><a href="/trending" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Trending">Trending <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">&rarr;</span></a></li>
                                                                                                                                                                                                                                                                                                                     ^
    extEEPROM.h:249:327: error: expected unqualified-id before '<' token
                           <li class="edge-item-fix"><a href="https://lab.github.com/" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Learning lab">Learning Lab <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">&rarr;</span></a></li>
                                                                                                                                                                                                                                                                                                                                           ^
    extEEPROM.h:250:340: error: expected unqualified-id before '<' token
                           <li class="edge-item-fix"><a href="https://opensource.guide" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Open source guides">Open source guides <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">&rarr;</span></a></li>
                                                                                                                                                                                                                                                                                                                                                        ^
    extEEPROM.h:255:279: error: expected unqualified-id before '<' token
                           <li class="edge-item-fix"><a href="https://github.com/readme" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover">The ReadME Project <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">&rarr;</span></a></li>
                                                                                                                                                                                                                                                                                           ^
    extEEPROM.h:256:317: error: expected unqualified-id before '<' token
                           <li class="edge-item-fix"><a href="https://github.com/events" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Events">Events <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">&rarr;</span></a></li>
                                                                                                                                                                                                                                                                                                                                 ^
    extEEPROM.h:257:334: error: expected unqualified-id before '<' token
                           <li class="edge-item-fix"><a href="https://github.community" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Community forum">Community forum <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">&rarr;</span></a></li>
                                                                                                                                                                                                                                                                                                                                                  ^
    extEEPROM.h:258:340: error: expected unqualified-id before '<' token
                           <li class="edge-item-fix"><a href="https://education.github.com" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover" data-ga-click="(Logged out) Header, go to GitHub Education">GitHub Education <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">&rarr;</span></a></li>
                                                                                                                                                                                                                                                                                                                                                        ^
    extEEPROM.h:259:349: error: expected unqualified-id before '<' token
                           <li class="edge-item-fix"><a href="https://stars.github.com" class="py-2 pb-0 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover" data-ga-click="(Logged out) Header, go to GitHub Stars Program">GitHub Stars program <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">&rarr;</span></a></li>
                                                                                                                                                                                                                                                                                                                                                                 ^
    extEEPROM.h:279:270: error: expected unqualified-id before '<' token
                         <a href="/pricing" class="pb-2 lh-condensed-ultra d-block Link--primary no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Pricing">Plans <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">&rarr;</span></a>
                                                                                                                                                                                                                                                                                  ^
    extEEPROM.h:282:333: error: expected unqualified-id before '<' token
                           <li class="edge-item-fix"><a href="/pricing#feature-comparison" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Compare plans">Compare plans <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">&rarr;</span></a></li>
                                                                                                                                                                                                                                                                                                                                                 ^
    extEEPROM.h:283:343: error: expected unqualified-id before '<' token
                           <li class="edge-item-fix"><a href="https://enterprise.github.com/contact" class="py-2 lh-condensed-ultra d-block Link--secondary no-underline f5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Contact Sales">Contact Sales <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">&rarr;</span></a></li>
                                                                                                                                                                                                                                                                                                                                                           ^
    extEEPROM.h:287:343: error: expected unqualified-id before '<' token
                           <li class="edge-item-fix"><a href="https://education.github.com" class="py-2 pb-0 lh-condensed-ultra d-block no-underline Link--primary no-underline h5 Bump-link--hover"  data-ga-click="(Logged out) Header, go to Education">Education <span class="Bump-link-symbol float-right text-normal color-text-tertiary pr-3">&rarr;</span></a></li>
                                                                                                                                                                                                                                                                                                                                                           ^
    In file included from B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:7:0:
    extEEPROM.h:521:25: error: expected unqualified-id before '<' token
           <div>{{ message }}</div>
                             ^
    In file included from B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:7:0:
    extEEPROM.h:789:109: error: expected unqualified-id before '<' token
                     <span class="flex-1 css-truncate css-truncate-overflow {{ isFilteringClass }}">{{ refName }}</span>
                                                                                                                 ^
    extEEPROM.h:821:109: error: expected unqualified-id before '<' token
                     <span class="flex-1 css-truncate css-truncate-overflow {{ isFilteringClass }}">{{ refName }}</span>
                                                                                                                 ^
    In file included from B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:7:0:
    extEEPROM.h:895:65: error: expected unqualified-id before '<' token
               <div class="Skeleton Skeleton--text col-5 ml-2">&nbsp;</div>
                                                                     ^
    extEEPROM.h:899:60: error: expected unqualified-id before '<' token
               <div class="Skeleton Skeleton--text col-1">&nbsp;</div>
                                                                ^
    In file included from B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:7:0:
    extEEPROM.h:1186:149: error: expected unqualified-id before '<' token
             <td id="LC58" class="blob-code blob-code-inner js-file-line">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>Arduino.h<span class="pl-pds">&gt;</span></span></td>
                                                                                                                                                         ^
    extEEPROM.h:1186:190: error: expected unqualified-id before '<' token
             <td id="LC58" class="blob-code blob-code-inner js-file-line">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds">&lt;</span>Arduino.h<span class="pl-pds">&gt;</span></span></td>
                                                                                                                                                                                                  ^
    extEEPROM.h:1247:72: error: expected unqualified-id before '<' token
             <td id="LC73" class="blob-code blob-code-inner js-file-line">};</td>
                                                                            ^
    extEEPROM.h:1260:184: error: expected unqualified-id before '<' token
             <td id="LC76" class="blob-code blob-code-inner js-file-line"><span class="pl-k">const</span> <span class="pl-c1">uint8_t</span> EEPROM_ADDR_ERR = <span class="pl-c1">9</span>;</td>
                                                                                                                                                                                            ^
    In file included from B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:7:0:
    extEEPROM.h:1350:72: error: expected unqualified-id before '<' token
             <td id="LC98" class="blob-code blob-code-inner js-file-line">};</td>
                                                                            ^
    extEEPROM.h:1417:39: error: expected unqualified-id before numeric constant
           <li class="mr-3 mr-lg-0">&copy; 2021 GitHub, Inc.</li>
                                           ^~~~
    essai_3:13:1: error: 'extEEPROM' does not name a type
     extEEPROM eep(kbits_256, 2, 64);         //device size, number of devices, page size
     ^~~~~~~~~
    B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino: In function 'void setup()':
    essai_3:21:25: error: 'eep' was not declared in this scope
         uint8_t eepStatus = eep.begin(extEEPROM::twiClock400kHz);   //go fast!
                             ^~~
    B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:21:25: note: suggested alternative: 'exp'
         uint8_t eepStatus = eep.begin(extEEPROM::twiClock400kHz);   //go fast!
                             ^~~
                             exp
    essai_3:21:35: error: 'extEEPROM' has not been declared
         uint8_t eepStatus = eep.begin(extEEPROM::twiClock400kHz);   //go fast!
                                       ^~~~~~~~~
    B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino: In function 'void eeWrite(uint8_t)':
    essai_3:54:42: error: ambiguous overload for 'operator<<' (operand types are 'HardwareSerial' and 'uint32_t {aka long unsigned int}')
             if ( (addr &0xFFF) == 0 ) Serial << addr << endl;
                                       ~~~~~~~^~~~~~~
    B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:54:42: note: candidate: operator<<(int, uint32_t {aka long unsigned int}) <built-in>
    In file included from B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:8:0:
    C:\Users\Guy\Documents\Arduino\libraries\Streaming/Streaming.h:54:15: note: candidate: Print& operator<<(Print&, const _BYTE_CODE&)
     inline Print &operator <<(Print &obj, const _BYTE_CODE &arg)
                   ^~~~~~~~
    essai_3:62:9: error: 'eep' was not declared in this scope
             eep.write(addr, data, chunk);
             ^~~
    B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:62:9: note: suggested alternative: 'exp'
             eep.write(addr, data, chunk);
             ^~~
             exp
    B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino: In function 'void eeRead(uint8_t)':
    essai_3:78:42: error: ambiguous overload for 'operator<<' (operand types are 'HardwareSerial' and 'uint32_t {aka long unsigned int}')
             if ( (addr &0xFFF) == 0 ) Serial << addr << endl;
                                       ~~~~~~~^~~~~~~
    B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:78:42: note: candidate: operator<<(int, uint32_t {aka long unsigned int}) <built-in>
    In file included from B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:8:0:
    C:\Users\Guy\Documents\Arduino\libraries\Streaming/Streaming.h:54:15: note: candidate: Print& operator<<(Print&, const _BYTE_CODE&)
     inline Print &operator <<(Print &obj, const _BYTE_CODE &arg)
                   ^~~~~~~~
    essai_3:79:9: error: 'eep' was not declared in this scope
             eep.read(addr, data, chunk);
             ^~~
    B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:79:9: note: suggested alternative: 'exp'
             eep.read(addr, data, chunk);
             ^~~
             exp
    B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino: In function 'void eeErase(uint8_t, uint32_t, uint32_t)':
    essai_3:100:39: error: ambiguous overload for 'operator<<' (operand types are 'HardwareSerial' and 'uint32_t {aka long unsigned int}')
             if ( (a &0xFFF) == 0 ) Serial << a << endl;
                                    ~~~~~~~^~~~
    B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:100:39: note: candidate: operator<<(int, uint32_t {aka long unsigned int}) <built-in>
    In file included from B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:8:0:
    C:\Users\Guy\Documents\Arduino\libraries\Streaming/Streaming.h:54:15: note: candidate: Print& operator<<(Print&, const _BYTE_CODE&)
     inline Print &operator <<(Print &obj, const _BYTE_CODE &arg)
                   ^~~~~~~~
    essai_3:101:9: error: 'eep' was not declared in this scope
             eep.write(a, data, chunk);
             ^~~
    B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:101:9: note: suggested alternative: 'exp'
             eep.write(a, data, chunk);
             ^~~
             exp
    B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino: In function 'void dump(uint32_t, uint32_t)':
    essai_3:117:9: error: 'eep' was not declared in this scope
             eep.read(a, d, 16);
             ^~~
    B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:117:9: note: suggested alternative: 'exp'
             eep.read(a, d, 16);
             ^~~
             exp
    essai_3:119:40: error: ambiguous overload for 'operator<<' (operand types are 'HardwareSerial' and 'char')
             if ( a < 16 * 16 * 16 ) Serial << '0';
                                     ~~~~~~~^~~~~~
    B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:119:40: note: candidate: operator<<(int, int) <built-in>
    In file included from B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:8:0:
    C:\Users\Guy\Documents\Arduino\libraries\Streaming/Streaming.h:54:15: note: candidate: Print& operator<<(Print&, const _BYTE_CODE&)
     inline Print &operator <<(Print &obj, const _BYTE_CODE &arg)
                   ^~~~~~~~
    essai_3:120:35: error: ambiguous overload for 'operator<<' (operand types are 'HardwareSerial' and 'char')
             if ( a < 16 * 16 ) Serial << '0';
                                ~~~~~~~^~~~~~
    B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:120:35: note: candidate: operator<<(int, int) <built-in>
    In file included from B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:8:0:
    C:\Users\Guy\Documents\Arduino\libraries\Streaming/Streaming.h:54:15: note: candidate: Print& operator<<(Print&, const _BYTE_CODE&)
     inline Print &operator <<(Print &obj, const _BYTE_CODE &arg)
                   ^~~~~~~~
    essai_3:121:30: error: ambiguous overload for 'operator<<' (operand types are 'HardwareSerial' and 'char')
             if ( a < 16 ) Serial << '0';
                           ~~~~~~~^~~~~~
    B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:121:30: note: candidate: operator<<(int, int) <built-in>
    In file included from B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:8:0:
    C:\Users\Guy\Documents\Arduino\libraries\Streaming/Streaming.h:54:15: note: candidate: Print& operator<<(Print&, const _BYTE_CODE&)
     inline Print &operator <<(Print &obj, const _BYTE_CODE &arg)
                   ^~~~~~~~
    essai_3:124:37: error: ambiguous overload for 'operator<<' (operand types are 'HardwareSerial' and 'char')
                 if ( d[c] < 16 ) Serial << '0';
                                  ~~~~~~~^~~~~~
    B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:124:37: note: candidate: operator<<(int, int) <built-in>
    In file included from B:\__Arduino_tests\Des-essais_sketches_eeprom\essai_3\essai_3.ino:8:0:
    C:\Users\Guy\Documents\Arduino\libraries\Streaming/Streaming.h:54:15: note: candidate: Print& operator<<(Print&, const _BYTE_CODE&)
     inline Print &operator <<(Print &obj, const _BYTE_CODE &arg)
                   ^~~~~~~~
    exit status 1
    stray '\302' in program
    J'ai pour habitude de m'obstiner, mais là, les éléments sont contre moi.

  13. #13
    Membre émérite

    Homme Profil pro
    mad scientist :)
    Inscrit en
    septembre 2019
    Messages
    1 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : septembre 2019
    Messages : 1 502
    Points : 2 728
    Points
    2 728
    Par défaut
    stray '\302' in program
    Le code doit avoir un caractère illégal invisible qui traîne après une accolade ou crochet généralement Regardez à l’endroit où le compilateur se plaint et enlevez les espaces autour des crochets (puis appuyez sur ctrl-T pour reindenter le code).

    EDIT: à la relecture il semble que vous ayez copié directement du code HTML et pas la version "textuelle" du code.
    Nom : page.png
Affichages : 54
Taille : 289,2 Ko

    il y a donc des tas de caractères qui n'ont pas leur place. Le plus simple c'est, une fois la bibliothèque installée, d'aller dans le menu Fichier de l'IDE, prendre les exemples, trouver le nom de la bibliothèque et ouvrir un exemple depuis cet endroit

    Pour les soucis de compilation, il faut essayer de conserver votre répertoire (dossier) qui contient les bibliothèques téléchargées le plus "propre" possible, n'avoir que les bibliothèques que vous utiliser vraiment, et en un seul exemplaire
    ==> Faites le ménage dans le répertoire des bibliothèques, détruisez TOUTES les bibliothèques téléchargées qui sont liées aux eeprom et installez en uniquement une (La bibliothèque de adafruit est celle que j’utilise certaines ont plus ou moins de fonctionnalités, celle de RobTillaart est bien aussi)

  14. #14
    Membre émérite

    Homme Profil pro
    mad scientist :)
    Inscrit en
    septembre 2019
    Messages
    1 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : septembre 2019
    Messages : 1 502
    Points : 2 728
    Points
    2 728
    Par défaut
    Voici un autre exemple utilisant I2C_eeprom de Rob Tillaart (qui est plus complète que celle de Adafruit) et appliqué à votre cas de gestion sur la semaine

    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
    #include <I2C_eeprom.h>  // https://github.com/RobTillaart/I2C_EEPROM/blob/master/I2C_eeprom.cpp
    I2C_eeprom memoire(0x50, I2C_DEVICESIZE_24LC256); // AT24C256 en 0x50
     
    /* METHODES PRATIQUES (un retour de 0 veut dire OK pour les fonctions d'écriture)
      bool      begin();
      bool      isConnected();
      int       writeByte(const uint16_t memoryAddress, const uint8_t value);
      int       writeBlock(const uint16_t memoryAddress, const uint8_t* buffer, const uint16_t length);
      int       setBlock(const uint16_t memoryAddress, const uint8_t value, const uint16_t length);
      uint8_t   readByte(const uint16_t memoryAddress);
      uint16_t  readBlock(const uint16_t memoryAddress, uint8_t* buffer, const uint16_t length);
      int       updateByte(const uint16_t memoryAddress, const uint8_t value);
      int       updateBlock(const uint16_t memoryAddress, const uint8_t* buffer, const uint16_t length);
    */
     
    const uint16_t adresseMotMagique = 0;
    const uint32_t motMagique = 0xB0CAD0;
    const uint16_t adresseDebut = adresseMotMagique + sizeof motMagique;
    const uint16_t tailleRequise = 10080; // 7 jours * 24 heures * 60 minutes
     
    enum tRelais : byte  {AucunRelais = 0, Relais0 = 1, Relais1 = 2, Relais2 = 4, Relais3 = 8, Relais4 = 16, Relais5 = 32, Relais6 = 64, Relais7 = 128};
    enum tJour : byte  {Lundi = 0, Mardi, Mercredi, Jeudi, Vendredi, Samedi, Dimanche};
    const char * jours[] = {"Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"};
     
    inline bool premierUsage() {
      uint32_t motTest;
      memoire.readBlock(adresseMotMagique, (uint8_t*) &motTest, sizeof motTest);
      return (motTest != motMagique);
    }
     
    void formater() {
      memoire.setBlock(adresseDebut, 0, tailleRequise); // on met tout à 0
      memoire.writeBlock(adresseMotMagique, (uint8_t*) &motMagique, sizeof motMagique);
    }
     
    inline byte lireEtat(tJour jour, byte heure, byte minute) {
      return memoire.readByte(adresseDebut + 1440u * jour + 60u * heure + minute);
    }
     
    inline bool ecrireEtat(byte etat, tJour jour, byte heure, byte minute) {
      return memoire.updateByte(adresseDebut + 1440u * jour + 60u * heure + minute, etat) == 0;
    }
     
    inline bool activerRelais(byte relais, tJour jour, byte heure, byte minute) {
      byte etat = lireEtat(jour, heure, minute);
      etat |= relais;
      return ecrireEtat(etat, jour, heure, minute);
    }
     
    inline bool desactiverRelais(byte relais, tJour jour, byte heure, byte minute) {
      byte etat = lireEtat(jour, heure, minute);
      etat &= ~relais;
      return ecrireEtat(etat, jour, heure, minute);
    }
     
    void afficher(tJour jour, byte heure, byte minute) {
      byte etat = lireEtat(jour, heure, minute);
      Serial.print(jours[jour]); Serial.write(' ');
      Serial.print(heure); Serial.write(':');
      if (minute < 10) Serial.write('0');
      Serial.print(minute);
      for (byte relais = 0; relais < 8; relais++) {
        Serial.print(F("\tR")); Serial.print(relais); Serial.write(':');
        Serial.print(bitRead(etat, relais) ? F("ON") : F("OFF"));
      }
      Serial.println();
    }
     
    void setup() {
      Serial.begin(115200);
      memoire.begin();
      if (! memoire.isConnected()) {
        Serial.println(F("EEPROM absente."));
        while (true);
      }
     
      if (premierUsage()) formater();
     
      // --------------- POUR TESTER --------------
     
      // activer uniquement les relais 1,3,5 et 7 le Lundi à 17h30
      ecrireEtat(Relais1 | Relais3 | Relais5 | Relais7, Lundi, 17, 30);
      afficher(Lundi, 17, 30); // vérification
     
      // on active en plus le relais 0
      activerRelais(Relais0, Lundi, 17, 30);
      afficher(Lundi, 17, 30); // vérification
     
      // on désactive les relais 5 et 7
      desactiverRelais( Relais5 | Relais7, Lundi, 17, 30);
      afficher(Lundi, 17, 30); // vérification
    }
     
    void loop() {}
    le code va d'abord vérifier que l'EEPROM est présente, puis vérifier si elle a déjà été initialisée pour notre usage. Pour cela on regarde si un mot magique de 4 octets (0x00B0CAD0) se trouve au début de la mémoire. S'il n'y est pas c'est que notre code a jamais tourné avec cette EEPROM et donc elle peut contenir n'importe quoi, donc on va formater l'EEPROM: on met 10080 octets à 0 et on écrit le mot magique.

    Une fois cela effectué, on est prêt à travailler.

    J'ai écrit quelques fonctions adaptées à votre usage qui prennent en paramètre un N° de jour (Lundi = 0, ... Dimanche = 6), l'heure et les minutes

    ecrireEtat() va forcer l'état des relais pour un jour donné
    lireEtat() va vous donner un octet correspondant à l'état des relais (bit à 1 = relais correspondant activé)
    activerRelais() va rajouter des relais actifs pour un jour donné (les autres sont inchangés)
    desactiverRelais() va enlever des relais pour un jour donné (les autres sont inchangés)
    afficher() va afficher sur le moniteur série l'état de 8 relais pour un jour donné

    Vous verrez à la fin du setup() un petit test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      // activer uniquement les relais 1,3,5 et 7 le Lundi à 17h30
      ecrireEtat(Relais1 | Relais3 | Relais5 | Relais7, Lundi, 17, 30);
      afficher(Lundi, 17, 30); // vérification
     
      // on active en plus le relais 0
      activerRelais(Relais0, Lundi, 17, 30);
      afficher(Lundi, 17, 30); // vérification
     
      // on désactive les relais 5 et 7
      desactiverRelais( Relais5 | Relais7, Lundi, 17, 30);
      afficher(Lundi, 17, 30); // vérification
    et si vous regardez le moniteur série (à 115200 bauds) vous verrez que tout se passe bien comme prévu:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Lundi 17:30	R0:OFF	R1:ON	R2:OFF	R3:ON	R4:OFF	R5:ON	R6:OFF	R7:ON
    Lundi 17:30	R0:ON	R1:ON	R2:OFF	R3:ON	R4:OFF	R5:ON	R6:OFF	R7:ON
    Lundi 17:30	R0:ON	R1:ON	R2:OFF	R3:ON	R4:OFF	R5:OFF	R6:OFF	R7:OFF

    ça devrait vous donner des idées !

  15. #15
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    décembre 2019
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : décembre 2019
    Messages : 43
    Points : 24
    Points
    24
    Par défaut
    Bonjour à tous

    Citation Envoyé par Jay M Voir le message
    Voici un autre exemple ... (qui est plus complète que celle de Adafruit) ...
    Hum. Mon obstination se heurte à une autre obstination, plus forte semble-t-il que la mienne, et qui est entretenue par le shield, sur lequel je commence très sérieusement à avoir des doutes.

    D'abord, ma version c'est celle là Arceli 00625 références que je relève sur les nouveaux paquets que je viens de déballer.

    https://www.amazon.fr/ARCELI-AT24C25.../dp/B07RHMPRK1

    Parmi tous les liens que tu m'as généreusement fournis, j'ai isolé tous ceux qui ne refusaient pas la compilation et que j'ai testés méticuleusement, mais tous me font aboutir à la même conclusion: je sais les lire, mais je suis incapable d'y écure.

    Le dernier en date, qui me semble être le plus court (donc le plus facile à "démonter", consiste à écrire un témoin à une adresse fixe (zéro à l'origine) et que j'ai modifiée pour en essayer une autre. Il porte le nom de AT24C256.ino et je le recopie ici, pour permettre à tout un chacun mais surtout les connaisseurs, de voir d'un simple coup d’œil ce qui est susceptible de coincer.

    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
     
    // T24C256.ino
    //This Library is used to communicate with an AT24CXXX type (256 here) chip
    //The i2c address can be modified in AT24C256.h
     
    // N'écrit qu'à une adresse, l'adresse 0, et la relit
     
     
    //I2C library
    #include "AT24C256.h"
     
    //Create Object
    AT24C256 eeprom = AT24C256();
     
    //this val will be wrote the the chip. An int is used here.
    int val = 0x09 ; // valeur témoin
     
    //The address on wich val will be wrote
    int Add = 0x10 ; // adresse de début
     
    void setup()
    {
      //Start Serial and i2c
      Serial.begin ( 9600 ) ;
     
      while (!Serial)
      {
        ; // wait for serial port to connect. Needed for native USB port only
      }
    }
     
    void loop()
    {
      //Write val to the address
      Serial.println( "\nEcriture de " + ( String ) val + " sur @ " + ( String ) Add ) ;
      eeprom.write ( val , Add ) ;
     
      //print the val read in the address specified and print it to serial
      Serial.print ( "Sa relecture " ) ;
      Serial.println ( eeprom.read ( Add ) ) ;
     
      //Stop
      while (1) ;
    }
    J'ai un tout petit peu francisé les messages, qu'à présent je sais afficher à l'écran (merci à toi ) et j'ai changé la valeur 24 initiale de mon témoin "val", ainsi que l'adresse "Add" qui était 0 et que j'ai passée à 0x10 après avoir testé le 0, sans succès.

    Voilà la réponse de mon écran

    Citation Envoyé par ecran
    13:30:51.969 -> Ecriture de 9 sur @ 16
    13:30:51.969 -> Sa relecture 255
    Méthodiquement, j'ai testé successivement les quatre shields dont je dispose, et, bien entendu, ils ont tous le même comportement. C'est aussi la conclusion à laquelle j'étais déjà arrivé avec les dix autres sketches qui acceptent de compiler.

    Pour plusieurs d'entre eux, j'ai été amené à modifier la vitesse du Serial.begin qui était de 115200 et que j'ai ramené à 9600. L'un d'eux comportait même une fréquence d'horloge de 400000, ramené à 100000, mais insuffisant pour aboutir.


    Il y en a un, particulier, qui me reste en travers de la gorge, c'est le ADAFRUIT qui ne compile pas, "au motif" qu'il ne va pas sur Uno.

    J'ai essayé, par élimination, de trouver un motif (de ce rejet) mais sans succès. Si vous le pouvez, ce serait bien d'essayer chez vous, probablement même sans le shield puisque c'est la compilation qui coince.

    Code Adafruit_FRAM_I2C_Generic_I2C_EEPROM : 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
    //  Adafruit_FRAM_I2C/examples/Generic_I2C_EEPROM/Generic_I2C_EEPROM.ino
    //   Adafruit_FRAM_I2C_Generic_I2C_EEPROM.ino
    #include <Wire.h>
    #include "Adafruit_EEPROM_I2C.h"
     
    /* Example code for the Adafruit I2C EEPROM breakout */
     
    /* Connect SCL    to SCL
       Connect SDA    to SDA
       Connect VDD    to 3 - 5V DC
       Connect GROUND to common ground */
     
    Adafruit_EEPROM_I2C i2ceeprom ;
     
    #define EEPROM_ADDR 0x50  // the default address!
    byte octet ;  // ma variable de lecture d'octets
    void setup ( void )
    {
      Serial.begin ( 9600 ) ;  // valeur qui était à 115200
      //  neutralisation pour voir ce qui coince
      if ( i2ceeprom.begin ( 0x50 ) )
      { // you can stick the new i2c addr in here, e.g. begin(0x51);
        Serial.println ( "Found I2C EEPROM" ) ;
      } else
      {
        Serial.println ( "I2C EEPROM not identified ... check your connections?\r\n" ) ;
        while ( 1 ) delay ( 10 ) ;
        //  while ( 1 ) ;  // delay ( 10 ) ;
      }
     
      // Read the first byte
      // uint8_t test = i2ceeprom.read8 ( 0x0 ) ;
      byte test = i2ceeprom.read8 ( 0x0 ) ;
      Serial.print ( "Restarted " ) ; Serial.print ( test ) ; Serial.println ( " times" ) ;
      // Test write ++
      i2ceeprom.write8 ( 0x0 , test + 1 ) ;
     
      // dump the first 256 bytes of memory
      // // uint8_t va l ;
      // uint8_t va  ;  // pour remplacer type wint8_t par byte
      byte va = 1 ;
      //  for ( uint16_t addr = 0 ; addr < 256 ; addr++ )
      for ( int addr = 0 ; addr < 256 ; addr ++ )
      {
        octet = i2ceeprom.read8 ( addr ) ;
        if ( (addr % 32 ) == 0 )
        {
          Serial.print ( "\n 0x" ) ; Serial.print ( addr,  HEX ) ; Serial.print ( ": " ) ;
        }
        Serial.print ( "0x" ) ;
        if ( octet < 0x10 )
          Serial.print ( '0' ) ;
        Serial.print ( octet , HEX ) ; Serial.print (" ") ;
      }
    }
    void loop ( void )
    {
    }

    Je demeure persuadé qu'un coup d’œil exercé saura trouver "l'intrus".

    Devant le constat d'échec qui dure maintenant depuis plusieurs jours, et devant ma "conclusion" que c'est probablement mon shield qui n'est pas le bon, j'ai repassé une commande pour approvisionner un autre modèle, qui devrait être celui que tu as montré en #10.

    Il m'est promis pour le 5 mai, donc, je vais poursuivre mes recherches d'ici là, et je n'exclus pas que vos interventions viennent débloquer l'obstination de mon "adversaire".

  16. #16
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    décembre 2019
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : décembre 2019
    Messages : 43
    Points : 24
    Points
    24
    Par défaut Victoire peut-être
    Ah, l'obstination ...

    En continuant et en simplifiant à outrance des sketches supposés fonctionner, je trouve l'un d'eux très différent.

    Voilà le code .ino

    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
    //    FILE: I2C_eeprom_simple.ino
    //  AUTHOR: Rob Tillaart
    // PURPOSE: demo I2C_EEPROM library - updateByte
    //
    // uses a 24LC256 (32KB) EEPROM
     
    #include "Wire.h"
    #include "I2C_eeprom.h"
     
    I2C_eeprom ee ( 0x50 , I2C_DEVICESIZE_24LC256 ) ;
     
    void setup ()
    {
      Serial.begin ( 9600 ) ;
      ee.begin () ;
    }
     
    void loop()
    {
      // écriture de valeur 9 à deux adresses 0 et 0x100
      Serial.println ( "\nEcriture de 9 en adresse 0 et 0x100" ) ;
      ee.writeByte ( 0 , 9 ) ;  // ( adresse , valeur ) ;
      ee.writeByte ( 0x100 , 9 ) ;  // ( adresse , valeur ) ;
      // Lecture des deux valeurs
      Serial.print ( ee.readByte ( 0 ) ) ; Serial.print ( "\t" ) ;
      Serial.print ( ee.readByte ( 0x100 ) ) ; Serial.print ( "\n" ) ;
     
      // écriture de valeur 9 à deux adresses 0 et 0x100
      Serial.println ( "\nEcriture de 0x0F en adresse 2 et en 10H " ) ;
      ee.writeByte ( 2 , 0x0F ) ;  // ( adresse , valeur ) ;
      ee.writeByte ( 0x10 , 0x0F ) ;  // ( adresse , valeur ) ;
      // Lecture des deux valeurs
      Serial.print ( ee.readByte ( 2  ) ) ; Serial.print ( "\t" ) ;
      Serial.print  ( ee.readByte ( 0x10  ) )  ; Serial.print ( "\n" ) ;
     
      while ( 1 ) ; // boucle
    }
    Et voilà sa réponse

    Citation Envoyé par I2C_eeprom_simple
    16:52:56.121 -> Ecriture de 9 en adresse 0 et 0x100
    16:52:56.175 -> 9 9
    16:52:56.175 ->
    16:52:56.175 -> Ecriture de 0x0F en adresse 2 et en 10H
    16:52:56.222 -> 15 15
    Je vais fouiller, à présent, dans mes divers sketches, pour voir si la lecture seule qu'ils pratiquent, me donnent bien les valeur qui, jusqu'à une prochaine modification, devraient être gravées dans le marbre.

    Il me semble que c'est le ee.begin () ; qui soit décisif pour l'écriture.

  17. #17
    Membre émérite

    Homme Profil pro
    mad scientist :)
    Inscrit en
    septembre 2019
    Messages
    1 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : septembre 2019
    Messages : 1 502
    Points : 2 728
    Points
    2 728
    Par défaut
    Salut

    Concentrez vous sur une seul bibliothèque , pas la peine de toutes les prendre. Celle de Rob T. est très bien

    le ee.begin() est clé car c'est ce qui active Wire. voici le code de la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     bool I2C_eeprom::begin()
    {
      _wire->begin();
      _lastWrite = 0;
      return isConnected();
    }
    Vous avez bien soudé les headers sur votre "Arceli"?

    La première chose à faire c'est d'ouvrir dans les exemples le scanner I2C (menu Fichier/Exemples/Wire/i2c_scanner), de le charger sur votre Arduino Uno, D'ouvrir la console série à 9600 bauds et de regarder s'il trouve un composant à l'adresse 0x50. si ce n'est pas le cas, pas la peine de chercher plus loin... vérifiez le montage, les soudures, l'alimentation et que SDA est sur A4 et SCL sur A5

    Si le scanner trouve un composant à l'adresse 50, chargez alors ce code sur votre Arduino Uno
    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
    #include <I2C_eeprom.h>  // https://github.com/RobTillaart/I2C_EEPROM/blob/master/I2C_eeprom.cpp
    I2C_eeprom memoire(0x50, I2C_DEVICESIZE_24LC256); // AT24C256 en 0x50
     
    /* METHODES PRATIQUES (un retour de 0 veut dire OK pour les fonctions d'écriture)
      bool      begin();
      bool      isConnected();
      int       writeByte(const uint16_t memoryAddress, const uint8_t value);
      int       writeBlock(const uint16_t memoryAddress, const uint8_t* buffer, const uint16_t length);
      int       setBlock(const uint16_t memoryAddress, const uint8_t value, const uint16_t length);
      uint8_t   readByte(const uint16_t memoryAddress);
      uint16_t  readBlock(const uint16_t memoryAddress, uint8_t* buffer, const uint16_t length);
      int       updateByte(const uint16_t memoryAddress, const uint8_t value);
      int       updateBlock(const uint16_t memoryAddress, const uint8_t* buffer, const uint16_t length);
    */
     
    const uint16_t adresseMotMagique = 0;
    const uint32_t motMagique = 0xB0CAD0;
    const uint16_t adresseDebut = adresseMotMagique + sizeof motMagique;
    const uint16_t tailleRequise = 10080; // 7 jours * 24 heures * 60 minutes
     
    enum tRelais : byte  {AucunRelais = 0, Relais0 = 1, Relais1 = 2, Relais2 = 4, Relais3 = 8, Relais4 = 16, Relais5 = 32, Relais6 = 64, Relais7 = 128};
    enum tJour : byte  {Lundi = 0, Mardi, Mercredi, Jeudi, Vendredi, Samedi, Dimanche};
    const char * jours[] = {"Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"};
     
    inline bool premierUsage() {
      uint32_t motTest;
      memoire.readBlock(adresseMotMagique, (uint8_t*) &motTest, sizeof motTest);
      return (motTest != motMagique);
    }
     
    void formater() {
      memoire.setBlock(adresseDebut, 0, tailleRequise); // on met tout à 0
      memoire.writeBlock(adresseMotMagique, (uint8_t*) &motMagique, sizeof motMagique);
    }
     
    inline byte lireEtat(tJour jour, byte heure, byte minute) {
      return memoire.readByte(adresseDebut + 1440u * jour + 60u * heure + minute);
    }
     
    inline bool ecrireEtat(byte etat, tJour jour, byte heure, byte minute) {
      return memoire.updateByte(adresseDebut + 1440u * jour + 60u * heure + minute, etat) == 0;
    }
     
    inline bool activerRelais(byte relais, tJour jour, byte heure, byte minute) {
      byte etat = lireEtat(jour, heure, minute);
      etat |= relais;
      return ecrireEtat(etat, jour, heure, minute);
    }
     
    inline bool desactiverRelais(byte relais, tJour jour, byte heure, byte minute) {
      byte etat = lireEtat(jour, heure, minute);
      etat &= ~relais;
      return ecrireEtat(etat, jour, heure, minute);
    }
     
    void afficher(tJour jour, byte heure, byte minute) {
      byte etat = lireEtat(jour, heure, minute);
      Serial.print(jours[jour]); Serial.write(' ');
      Serial.print(heure); Serial.write(':');
      if (minute < 10) Serial.write('0');
      Serial.print(minute);
      for (byte relais = 0; relais < 8; relais++) {
        Serial.print(F("\tR")); Serial.print(relais); Serial.write(':');
        Serial.print(bitRead(etat, relais) ? F("ON") : F("OFF"));
      }
      Serial.println();
    }
     
    void setup() {
      Serial.begin(115200);
      memoire.begin();
      if (! memoire.isConnected()) {
        Serial.println(F("EEPROM absente."));
        while (true);
      }
     
      if (premierUsage()) formater();
     
      // --------------- POUR TESTER --------------
     
      // activer uniquement les relais 1,3,5 et 7 le Lundi à 17h30
      ecrireEtat(Relais1 | Relais3 | Relais5 | Relais7, Lundi, 17, 30);
      afficher(Lundi, 17, 30); // vérification
     
      // on active en plus le relais 0
      activerRelais(Relais0, Lundi, 17, 30);
      afficher(Lundi, 17, 30); // vérification
     
      // on désactive les relais 5 et 7
      desactiverRelais( Relais5 | Relais7, Lundi, 17, 30);
      afficher(Lundi, 17, 30); // vérification
    }
     
    void loop() {}
    et ouvrez la console à 115200 bauds

    vous devriez voir quelque chose..

  18. #18
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    décembre 2019
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : décembre 2019
    Messages : 43
    Points : 24
    Points
    24
    Par défaut
    Bonjour à tous et surtout à toi Jay M

    Citation Envoyé par Jay M Voir le message
    ... vous devriez voir quelque chose.
    Je vois que tu n'as pas fait que te pencher sur mon problème, tu es en train de me donner des leçons en matière de programmation, adaptées très précisément à ce qui devient mon besoin.

    Ce merci est même bien léger par rapport au travail que tu as fourni et dont je n'ai pas encore réussi à en décoder toute la finesse et l'efficacité qui, bien entendu, est très loin devant ce que je sais faire. Mais je garde précieusement et je vais sûrement en profiter, et l'analyser à fond pour en saisir toutes astuces.

    Il me reste une interrogation que je n'explique pas encore complètement.

    Citation Envoyé par Jay M Voir le message
    ... et ouvrez la console à 115200 bauds ...
    J'ai rencontré aussi de telles vitesses dans d'autres sketches testés, mais ça ne se passe pas si bien que ça, je dirais même que ça "capote" complètement avec des signes cabalistiques à l'écran, et un non fonctionnement.

    Quelles sont les vitesses standard possibles?

    Peut-on y mettre "n'importe quoi" dans la gamme ou bien seules les/des valeurs normalisées fonctionnent?

    Cette vitesse concerne-t-elle les deux communications (à savoir le moniteur série et le i2c) et/ou peuvent-elles être distinctes?

    Moi, j'imagine que c'est la même vitesse qui concerne les deux types d'échanges, et que simplement, ce sont les vitesses d'exécution qui sont plus longues aux vitesses plus basses. Les timings relatifs sont conservés partout et toujours et que les écritures ou lectures se font à l'identique quelles que soient les vitesses.

    Peux-tu me confirmer mes suppositions?

    Puisque je constate que ta vitesse proposée ne fonctionne pas, dois-je chercher une limite et me mettre à la valeur inférieure suivante? Je suppose que c'est mon câblage qui est responsable. Ma maquette comporte quelques longueurs dans les fils data et clock du I2C. Ce pourra sûrement être rendu beaucoup plus court lors de la construction de mon proto. Là, ce "bus" ne dépasse pas un mètre, et le câble USB qui va au PC est à peu près de cette longueur.

    Comme j'avais eu un accident aux tous débuts (probablement un court circuit sur l'alimentation USB), j'ai grillé une des sorties USB de l'ordinateur.

    Depuis, j'ai mis un HUB USB2 sur une sortie autre du PC pour que ce soit lui qui trinque, en cas d'accident et pas la sortie directe du PC. J'ai l'espoir, un jour, de remettre mon nez dans les tripes du PC pour essayer de réparer, si possible, le fusible qui a dû dégager, mais le démontage est très fastidieux alors que j'ai d'autres chats à fouetter et que je ne suis pas totalement en panne.

    Merci encore, sincèrement, pour ta précieuse assistance.

  19. #19
    Membre émérite

    Homme Profil pro
    mad scientist :)
    Inscrit en
    septembre 2019
    Messages
    1 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : septembre 2019
    Messages : 1 502
    Points : 2 728
    Points
    2 728
    Par défaut
    Salut

    C'est bien la première fois que j'entends qu'un ordinateur ne tient pas les 115200 bauds... pouvez vous préciser votre configuration?

    Quelles sont les vitesses standard possibles
    la classe HardWareSerial qui se cache derrière l'objet Serial est relativement souple, vous pouvez passer la vitesse que vous voulez, ensuite le matériel (des 2 côtés) va faire du mieux qu'il peut. J'utilise fréquemment 2,000,000 de bauds entre mon mac et mon Arduino (de programme à programme) et je me contente de 115200 quand il s'agit d'afficher des choses à l'écran mais pour parler au moniteur série vous pouvez mettre dans Serial.begin(xxx) un xxx qui correspond à un de ceux qui est listé dans le menu déroulant de la fenêtre du moniteur.

    Pouvez vous me confirmer que vous avez réglé le moniteur série de l'IDE à 115200 bauds
    Nom : bauds.png
Affichages : 24
Taille : 393,7 Ko

    Cette vitesse concerne-t-elle les deux communications (à savoir le moniteur série et le i2c) et/ou peuvent-elles être distinctes?
    Ce sont vraiment 2 choses distinctes, ce n'est pas le même matériel qui gère cela.

    En pratique sur le port série il n'y a pas de signal d'horloge qui relie les 2 ordinateurs, c'est pour cela qu'ils doivent être d'accord sur le débit pour se comprendre, les 1 et 0 s'égrènent pour une durée qui correspond au débit choisi donc un 0 (pin à LOW) à 9600 bauds dure deux fois plus longtemps que le même 0 à 19200 bauds. Si vous n'êtes pas d'accord sur le débit et que l'un émet à 9600 et l'autre reçoit à 19200, le receveur verra deux '0' au lieu d'un seul.

    La vitesse d'horloge standard (SCL) pour I2C est 100 KHz. Philips définit des vitesses plus rapides: le fast mode, qui est jusqu'à 400 KHz et le High Speed mode qui va jusqu'à 3,4 MHz. Pour faire simple, comme le signal est émis d'un côté, le récepteur sait quand lire les bits sur la ligne data (SDA) et il y a une séquence particulière pour démarrer et arrêter la communication
    Nom : i2cb.GIF
Affichages : 24
Taille : 1,3 Ko

    Donc choisissez le débit que vous souhaitez pour la communication série, il n'y a pas de raison (sauf matériel qui aurait plus de 25 ans) que ça ne fonctionne pas à 115200 bauds et ne touchez rien à la partie I2C, avec des câbles de 10 ou 20cm ça fonctionne sans soucis pour la RTC ou l'écran.

    Comme j'avais eu un accident aux tous débuts (probablement un court circuit sur l'alimentation USB), j'ai grillé une des sorties USB de l'ordinateur
    ça pourrait expliquer aussi les soucis... vous avez peut-être aussi endommagé la carte Arduino ou plus qu'un seul des ports USB de votre PC..


    Pour en avoir le coeur net, pouvez vous charger ce code dans votre Arduino:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // TEST DU MONITEUR SERIE A DIFFERENTS DEBITS
     
    void setup() {
    // ESSAYEZ: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 74880, 115200, 230400, 250000, 500000, 1000000, 2000000
      Serial.begin(2000000); // <<=== CHANGER LE DEBITS, COMPILER, METTEZ LE MEME REGLAGLE DANS LE MENU DEROULANT DU MONITEUR SERIE 
    }
     
    void loop() {
      if (Serial.available()) {
        Serial.write(Serial.read());
      }
    }
    ici j'ouvre la voie série dans le code à 2,000,000 de bauds.Donc (étape 1) il faut régler le menu déroulant sur 2 million et avec ce code téléchargé, tout ce que je tape (étape 2 sur le schéma) dans la ligne de commande vient s'afficher quand je valide dans l'espace du moniteur (étape 3).

    Nom : test.png
Affichages : 24
Taille : 1,04 Mo
    Comme vous le voyez entre mon Mac et mon Arduino UNO, en passant aussi par un hub USB (c'est une bonne idée de se protéger), je communiquer sans souci à 2 millions de bauds.

    A tester chez vous:
    Choisissez une par une (en descendant) la valeur utilisée dans le Serial.begin() du code
    (ESSAYEZ: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 74880, 115200, 230400, 250000, 500000, 1000000, 2000000)
    compilez et téléversez le code dans l'arduino
    étape 1: réglez le menu déroulant (ça reboot l'arduino)
    étape 2: tapez du texte dans la ligne de commande
    étape 3: confirmez que le texte qui apparaît est "propre"

    faites cela pour tous les débits, ça devrait vous donner une idée de ce qui fonctionne et ce qui ne fonctionne pas et dites nous ce que vous avez pu en tirer.

Discussions similaires

  1. EEPROM, quel est l'intérêt pour Arduino ?
    Par frederic13870 dans le forum Arduino
    Réponses: 13
    Dernier message: 10/09/2019, 23h41
  2. STM32 Arduino I2C EEPROM
    Par roro60 dans le forum Arduino
    Réponses: 9
    Dernier message: 18/02/2019, 10h02
  3. Réponses: 9
    Dernier message: 10/05/2007, 15h14
  4. [PIC 16C84] Ajouter une eeprom externe i2c à un programme
    Par jacques8 dans le forum Autres architectures
    Réponses: 2
    Dernier message: 30/09/2005, 17h11
  5. Programmation EEPROM
    Par jeannot27 dans le forum C++Builder
    Réponses: 69
    Dernier message: 10/03/2004, 09h44

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