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
| //**************************************************
#include <Arduino.h>
#include <EEPROM.h>
void setup(){
Serial.begin(115200);
EEPROM.begin(32); //EEPROM.begin(Size)
delay(2000);
Serial.println(" ");
// Carte NodeMCU 1.0(ESP-12E Module)
// declaration d'un integer 32 bit non signé
// valeur decimal : 4660, soit en Hexa 00 00 12 34
uint32_t dt = 4660 ; // 0x1234; // 00 00 12 34
Serial.print("val hexa dt : "); Serial.print(dt,DEC);
Serial.print(" val hexa dt : ");Serial.println(dt,HEX);
// Resultat moniteur série val hexa dt : 4660 val hexa dt : 1234
// je récupère la valeur de chaque byte (octet) de l'integer
// formule magique !! récupérée sur le net, qui marche... mais qui n'est pas claire pour moi
byte byteEeprom1 = * ((byte *) (& dt) + 0); // low byte = 0x34
Serial.print("val hexa byteEeprom1 : "); Serial.println(byteEeprom1,HEX);
byte byteEeprom2 = * ((byte *) (& dt) + 1); // high byte = 0x12
Serial.print("val hexa byteEeprom2 : "); Serial.println(byteEeprom2,HEX);
byte byteEeprom3 = * ((byte *) (& dt) + 2); // high byte = 0x00
Serial.print("val hexa byteEeprom3 : "); Serial.println(byteEeprom3,HEX);
byte byteEeprom4 = * ((byte *) (& dt) + 3); // high byte = 0x00
Serial.print("val hexa byteEeprom4 : "); Serial.println(byteEeprom4,HEX);
// // je m'attends à 00 00 12 34 et j'obtiens 34 12 00 00
// Resultat moniteur série : val hexa byteEeprom1 : 34
// Resultat moniteur série : val hexa byteEeprom2 : 12
// Resultat moniteur série : val hexa byteEeprom3 : 0
// Resultat moniteur série : val hexa byteEeprom4 : 0
// je copie l'espace mémoire integer32 : dt vers espace mémoire tableau de 4 bytes : numberByte
// et j'imprime chaque élément du tableau
byte numberByte[4];
memcpy(&numberByte, &dt, 4);
Serial.print("val hexa numberByte[0] : "); Serial.println(numberByte[0],HEX);
Serial.print("val hexa numberByte[1] : "); Serial.println(numberByte[1],HEX);
Serial.print("val hexa numberByte[2] : "); Serial.println(numberByte[2],HEX);
Serial.print("val hexa numberByte[3] : "); Serial.println(numberByte[3],HEX);
// impression tableau idem formule magique
// je m'attends à 00 00 12 34 et j'obtiens 34 12 00 00
// Resultat moniteur série : val hexa numberByte[0] : 34
// Resultat moniteur série : val hexa numberByte[1] : 12
// Resultat moniteur série : val hexa numberByte[2] : 0
// Resultat moniteur série : val hexa numberByte[3] : 0
// j'ecris dans l'EEPROM dans l'ordre naturel 00 00 12 34 et je commit
EEPROM.write(0,numberByte[3]);
EEPROM.write(1,numberByte[2]);
EEPROM.write(2,numberByte[1]);
EEPROM.write(3,numberByte[0]);
EEPROM.commit();
// je lis le resultat par EEPROM.get dans un integer 32 bit
uint32_t intLowHigh = 0;
EEPROM.get(0,intLowHigh);
Serial.print("valeur intLowHigh decimal : "); Serial.print(intLowHigh);
Serial.print(" valeur intLowHigh Hexa : "); Serial.println(intLowHigh,HEX);
// Resultat moniteur série : valeur intLowHigh decimal : 873594880 valeur intLowHigh Hexa : 34120000
// j'ecris de nouveau mais dans l'ordre 34 12 00 00 numberByte [0,1,2,3)
EEPROM.write(0,numberByte[0]);
EEPROM.write(1,numberByte[1]);
EEPROM.write(2,numberByte[2]);
EEPROM.write(3,numberByte[3]);
EEPROM.commit();
// je lis le resultat par EEPROM.get dans un integer 32 bit
uint32_t intHighLow = 0;
EEPROM.get(0,intHighLow);
Serial.print("valeur intHighLow decimal : "); Serial.print(intHighLow);
Serial.print(" valeur intHighLow Hexa : "); Serial.println(intHighLow,HEX);
//le resultat correspond au nombre 4660 equivalent à 00 00 12 34
// Resultat moniteur série : valeur intHighLow decimal : 4660valeur intHighLow Hexa : 1234
}
void loop(){
}
//************************************************** |
Partager