Note

Bonjour et bienvenue dans la Communauté Facebook des passionnés de Raspberry Pi, Arduino et ESP32 de SunFounder ! Plongez plus profondément dans l’univers des Raspberry Pi, Arduino et ESP32 avec d’autres passionnés.

Pourquoi rejoindre ?

  • Support d’experts : Résolvez les problèmes après-vente et les défis techniques avec l’aide de notre communauté et de notre équipe.

  • Apprendre et partager : Échangez des astuces et des tutoriels pour améliorer vos compétences.

  • Aperçus exclusifs : Accédez en avant-première aux annonces de nouveaux produits et aux aperçus.

  • Réductions spéciales : Profitez de réductions exclusives sur nos produits les plus récents.

  • Promotions festives et cadeaux : Participez à des cadeaux et des promotions de vacances.

👉 Prêt à explorer et à créer avec nous ? Cliquez [ ici ] et rejoignez-nous aujourd’hui !

5.15 EEPROM

EEPROM est une mémoire, donc les données qu’elle stocke ne seront pas effacées lorsque la carte de contrôle principale est éteinte. Vous pouvez l’utiliser pour enregistrer certaines données et les lire la prochaine fois que vous l’allumez.

Par exemple, vous pouvez créer un compteur de sport qui suit le nombre de sauts à la corde que vous faites chaque jour.

Vous pouvez également y écrire des données dans un programme et les lire dans un autre. Par exemple, lorsque vous travaillez sur un projet de voiture, les vitesses des deux moteurs sont incohérentes. Vous pouvez écrire un programme de calibration pour enregistrer la valeur de compensation de la vitesse du moteur.

Composants requis

Pour ce projet, nous aurons besoin des composants suivants.

Il est certainement pratique d’acheter un kit complet, voici le lien :

Nom

ÉLÉMENTS DE CE KIT

LIEN

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

Vous pouvez également les acheter séparément via les liens ci-dessous.

INTRODUCTION DES COMPOSANTS

LIEN D’ACHAT

Carte SunFounder R3

ACHETER

Plaque d’essai

ACHETER

Fils de Cavalier

ACHETER

Résistance

ACHETER

LED

ACHETER

Servomoteur

ACHETER

Bouton

ACHETER

Potentiomètre

ACHETER

Schéma

../_images/circuit_515_eeprom.png

Câblage

../_images/eeprom_servo.png

Code

Note

  • Ouvrez le fichier 5.15.eeproom.ino situé dans le dossier 3in1-kit\basic_project\5.15.eeproom.

  • Ou copiez ce code dans Arduino IDE.

  • Ou téléversez le code via l”Éditeur Web Arduino.

Pour utiliser ce circuit, vous appuyez simplement sur le bouton pour commencer l’enregistrement et entrer les informations souhaitées via un potentiomètre. Désormais, la carte répétera vos actions indéfiniment (et fera clignoter une LED à chaque itération) jusqu’à ce que vous appuyiez à nouveau sur le bouton pour enregistrer de nouvelles actions. Vous pouvez également varier la durée de l’enregistrement en changeant les valeurs de résolution et de recordTime.

Comment ça fonctionne ?

  1. Importez la bibliothèque EEPROM.h et initialisez la mémoire EEPROM.

    ...
    #include <EEPROM.h>//used to store recorded values
    
    ...
    float resolution = 1000;//MUST be less than EEPROM.length()
    float recordTime = 5; //delay time
    bool recording = false;
    ...
    

    Veuillez noter que /DOIT être inférieur à EEPROM.length(), dans setup() il imprimera la mémoire de l’EEPROM de votre carte, qui devrait être 1024 pour la carte SunFounder R3. Si vous utilisez une autre carte, vous pouvez changer la valeur de la variable resolution.

  2. Imprimez la mémoire EEPROM de votre carte.

    void setup() {
        ...
        Serial.begin(9600);
        //Serial.println(EEPROM.length());
    }
    

    Pour trouver la taille de la mémoire EEPROM de votre carte, décommentez la ligne Serial.println(EEPROM.read(i)). Cela imprimera la taille de l’EEPROM dans le moniteur série, et vous pourrez changer la valeur de la variable resolution en conséquence.

  3. Dès qu’une pression sur un bouton est détectée, l’enregistrement commence et les informations requises sont entrées via un potentiomètre. Maintenant, la carte répète votre action indéfiniment (et fait clignoter une LED à chaque répétition) jusqu’à ce que vous appuyiez à nouveau sur le bouton, enregistrant une nouvelle action.

    void loop() {
        if (recording == true) {//record
            for (int i = 1; i <= resolution; i++) {
                digitalWrite(ledPin, HIGH); //light status led
                int val = map(analogRead(A0), 0, 1023, 0, 180);
                EEPROM.write(i, val);
                //Serial.println(EEPROM.read(i));
                myServo.write(val);
                delay(recordTime);
            }
            digitalWrite(ledPin, LOW); //turn off status led
            delay(1000);//give time for person
            recording = false;
        }
        else {
            for (int i = 1; i <= resolution; i++) {//playback
                if (digitalRead(buttonPin) == 0) {//stop playback and record new values
                    recording = true;
                    break;
                }
                int readval = EEPROM.read(i);
                myServo.write(readval);
                //Serial.println(readval);
                delay(recordTime);
            }
            digitalWrite(ledPin, HIGH); //show a new repeat
            delay(100);
            digitalWrite(ledPin, LOW);
        }
    }
    
    • Rendez la variable recording vraie lorsque le bouton est pressé.

    • Lorsque la variable recording est vraie, commencez à enregistrer l’action dans la plage de mémoire.

    • Lisez la valeur du potentiomètre et mappez-la de 0 à 180 pour la stocker dans l’EEPROM et contrôler la rotation du servo.

    • La LED s’allume au début de l’enregistrement et s’éteint à la fin.

    • Répétez l’action enregistrée avec un clignotement rapide de la LED pour vous rappeler une nouvelle répétition.

  4. À propos de la bibliothèque EEPROM.

    Voici certaines de ses fonctions.

    • write(address,value) : Écrivez un octet dans l’EEPROM.

      • address : l’emplacement où écrire, à partir de 0 (int)

      • value : la valeur à écrire, de 0 à 255 (byte)

      • Une écriture EEPROM prend 3.3 ms pour s’achever. La mémoire EEPROM a une durée de vie spécifiée de 100,000 cycles d’écriture/effacement, donc vous devrez peut-être faire attention à la fréquence à laquelle vous écrivez dedans.

    • Read(address) : Lit un octet de l’EEPROM. Les emplacements qui n’ont jamais été écrits ont une valeur de 255.

    • update(address,value) : Écrivez un octet dans l’EEPROM. La valeur est écrite seulement si elle diffère de celle déjà enregistrée à la même adresse.

      • Une écriture EEPROM prend 3.3 ms pour s’achever. La mémoire EEPROM a une durée de vie spécifiée de 100,000 cycles d’écriture/effacement, donc l’utilisation de cette fonction au lieu de write() peut économiser des cycles si les données écrites ne changent pas souvent.

    • EEPROM.put(address, data) : Écrivez n’importe quel type de données ou objet dans l’EEPROM.

      • address : l’emplacement à lire, à partir de 0 (int).

      • data : les données à lire, peuvent être un type primitif (par exemple, float) ou une structure personnalisée.

      • Cette fonction utilise EEPROM.update() pour effectuer l’écriture, donc elle ne réécrit pas la valeur si elle n’a pas changé.

    • EEPROM.get(address, data) : Lisez n’importe quel type de données ou objet de l’EEPROM.

      • address : l’emplacement à lire, à partir de 0 (int).

      • data : les données à lire, peuvent être un type primitif (par exemple, float) ou une structure personnalisée.