Comment stocker des valeurs de plusieurs Octets

.

Mise à jour le 28/09/2021 : Comment traiter le stockage d’informations en mémoire EEPROM sur arduino avec l’instruction EEPROM.put.

Sommaire :

.

.

separateur-redohm-001

But du tutoriel

.

Dans le cadre du projet Oryon nous avons une partie programmation pour le système d’apprentissage du cobot. Le principe de l’apprentissage et d’enseigner au cobot les mouvements que l’on souhaite qu’il réalise en le manipulant simplement, et d’enregistrer des différents mouvements dans une mémoire afin qu’il nous les restitue quand on lui demande

Pour que l’on utilise le mode d’apprentissage il faut déjà ecrire un programme qui nous permettra que ce mode nous retranscrive automatiquement les déplacements de celui-ci. Voici un petit programme qui nous permet déjà d’avoir un petit aperçu de ce mode de stockage. La difficulté sur arduino étend de récupérer les valeurs du convertisseur 10 bits et de stocker la valeur des 2 octets en une seule fois dans la mémoire.

Le but de cet exemple est de montrer aussi l’instruction EEPROM.put()  qui écrit des données sur EEPROM ou en utilisant également EEPROM.update() qui écrit des données uniquement si elles sont différentes du contenu précédent des emplacements à écrire. Le nombre d’octets écrits est lié au type de données ou à la structure personnalisée de la variable à écrire.

.

Retour au sommaire

.

separateur-redohm-001

Principe de capture et d’ecriture en EEPROM de plusieurs octets

.

.

.

Retour au sommaire

.

.

separateur-redohm-001

Video sur l’ecriture de la mémoire EEPROM

.

.

Retour au sommaire

.

.

separateur-redohm-001

Programme pour l’ecriture et la lecture en EEPROM de plusieurs octets

.

//
//
//******************************************************
//
//But : Lecture d'une valeur de 10 bits et enregistrement  
//      de celle-ci en memoire EEPROM
//
// Par H-Mazelin
// RedOhm
// Le 26/05/2021
//******************************************************


#include <EEPROM.h>


// le potentiomètre, branché sur la broche analogique 6
 int potentiometre1 = 6;
//int address = 0 ;
 int valeur_eeprom ;


// *************************************************************
// Declaration des entrees et des sorties pour l'enregistrement 
const int Led_enregistrement = 25 ;

// déclaration de l'entrée du bouton branché sur la broche 15
// de votre carte Arduino 
int bouton15 = 15;
// variable du type int pour stocker les valeurs de passage du bouton15
int bouton15v;



// *************************************************************
// Declaration des entrees et des sorties la lecture 
const int Led_lecture = 26;


// déclaration de l'entrée du bouton branché sur la broche 16
// de votre carte Arduino 
int bouton16 = 16;
// variable du type int pour stocker les valeurs de passage du bouton16
int bouton16v;





void setup() {
  
//****************************************
//Mise en service du port de com 
//****************************************

//ouvre le port série et fixe le debit de communication à 9600 bauds
  Serial.begin(9600);
// on attent que le port de communication soit pret  
  while (!Serial) {
    ; 
  }

//****************************************
//Configuration des entrees pour les boutons de selection
//****************************************
pinMode (bouton15,INPUT );
pinMode (bouton16,INPUT );
  
//****************************************
//Configuration des sorties pour les Led
//****************************************
pinMode (Led_enregistrement,OUTPUT );
pinMode (Led_lecture,OUTPUT );

  
}

void loop() {


// ****************************************************
// creation de la commande enregistrement 
// ****************************************************

bouton15v = digitalRead(bouton15);

  if (bouton15v == 1)
  {
    digitalWrite (Led_enregistrement,HIGH);
    // appel de la fonction -> lecture de la position du servomoteur
    lecture_position();
  }
  
  else if (bouton15v == 0)
  {
  digitalWrite (Led_enregistrement,LOW);    
  } 

// ****************************************************
// creation de la commande de lecture
// ****************************************************
   
bouton16v = digitalRead(bouton16);
 



  if (bouton16v == 1)
  {
    digitalWrite (Led_lecture,HIGH);
    // appel de la fonction -> lecture de la memoire
    lecture_memoire_et_pilotage_servomoteur();
  }
  
  else if (bouton16v == 0)
  {
    digitalWrite (Led_lecture,LOW);
  } 
 
}


// Creation de la fonction lecture_position
// 
//*******************************************************
// Lecture des positions du servomoteur et enregistrement
//*******************************************************
//

void lecture_position()
{
 
Serial.println(" Attention lecture de la position et ecriture de la memoire dans 5 secondes : ");
delay (5000);
Serial.print ("");
Serial.println("c'est parti");



for (int i=0 ; i <= 32 ; i=i+2)
{
    
    
    // conversion de la tension de la borne 6 et transfert de la valeur 
    // numerique dans la variable valeur_eeprom

    valeur_eeprom=analogRead(potentiometre1); 
    delay(20);
    Serial.print("ecriture a l'adresse : ");Serial.print(i);
    Serial.print(" de la valeur => ");Serial.println(valeur_eeprom);
    // EEPROM.put permet d'ecrire n'importe quel type de données ou objet dans l'EEPROM.
    // la valeur de i permet de pointer l'adresse pour stocker la valeur 
    EEPROM.put (i,valeur_eeprom);
    delay(200); 
 }

    bouton15v == 0; 
    Serial.println("Fin d'enregistrement");
    delay(2000);
}



 
//********************************
// Lecture de la memoire EEPROM 
//********************************
//
// Creation de la fonction lecture_memoire_et_pilotage_servomoteur

void lecture_memoire_et_pilotage_servomoteur()
{
Serial.println("");
Serial.println(" Attention lecture de la memoire EEPROM dans 5 secondes");
delay (5000);

for (int i=0 ; i <= 32 ; i=i+2)
{
   
  // lire un octet à partir de l'adresse specifie dans la variable i
  EEPROM. get ( i , valeur_eeprom ) ;
  delay (100);
  Serial.print(i);
  Serial.print("\t");
  Serial.print(valeur_eeprom);
  Serial.println();
  
 }
  
 delay(500);
 bouton16v == 0;
 Serial.println("Fin de lecture ");
}

.

Retour au sommaire

.

separateur-redohm-001

Pour tout probléme 

.

Pour tout problème de téléchargement ou pour nous suivre sur les réseaux sociaux voici les plateformes  sur lesquelles nous éditons.
Cliquez sur celle qui vous intéresse .

Facebook  Twitter  Youtube 

Grabcad  Thingiverse  Cults  

.

Retour au sommaire

 

.

 

.