#include //I2C library #define ad_ROM_1_I2C 0x50 #include "SparkFunMPL3115A2.h" // Constantes const int switchPin = 2; const int A_lim = 10; const float marge = 0.5; // Variables a redefinir boolean ok = false; int nb = 0; //nombre de valeurs lues // Variables validées boolean en_vol = true; boolean recovery = false; float A_new, A_old, A_ini, t; //capteur de pression MPL3115A2 myPressure; float calcul; //variable reconstituée à la lecture unsigned int AdrBaseEeprom =0; //adresse de l'EEPROM démarre à 0 void setup() { Wire.begin(); // Init port I2C Serial.begin(9600); pinMode(switchPin, INPUT); myPressure.begin(); // capteur de pression actif //Configure the sensor myPressure.setModeAltimeter(); // Measure altitude above sea level in meters myPressure.setOversampleRate(6); // Set Oversample to the recommended 128 myPressure.enableEventFlags(); // Enable all three pressure and temp event flag //Lecture Serial.println("---------------"); Serial.println("LECTURE"); Serial.println("---------------"); unsigned int AdrBaseEeprom =0; //adresse de l'EEPROM démarre à 0 for(int i=0; i<16000; i++){ //Lecture de l'EEPROM union u_tag { byte b[4]; float fval; } u; u.b[0] = i2c_eeprom_read_byte(AdrBaseEeprom++); // chrgt LSB u.b[1] = i2c_eeprom_read_byte(AdrBaseEeprom++); // chrgt LSB+1 u.b[2] = i2c_eeprom_read_byte(AdrBaseEeprom++); // chrgt LSB+2 u.b[3] = i2c_eeprom_read_byte(AdrBaseEeprom++); // chrgt MSB calcul = u.fval; Serial.println(calcul); //calcul est la valeur ecrite et reconstituée ok = true; } } void i2c_eeprom_write_byte(unsigned int eeaddress, byte data ) { Wire.beginTransmission(ad_ROM_1_I2C); Wire.write((int)(eeaddress >> 8)); // envoi du MSB de l'adresse Wire.write((int)(eeaddress & 0xFF)); // envoi du LSB de l'adresse Wire.write(data); //écriture de l'octet Wire.endTransmission(); delay(5);// les écritures consécutives trop rapide mettent leur fiabilité en vrac (marche a partir de 3ms) } void ecrire_reel(float var) { //écriture d'un réel dans la mémoire byte *ptr; ptr = (byte *)&var; for(byte j=0;j<4;j++) { byte octet = *(ptr+j); i2c_eeprom_write_byte(AdrBaseEeprom++,octet); } //fin écriture } // routine de lecture de byte individuel dans l'EEPROM // lui passer adresse, elle rend le byte correspondant byte i2c_eeprom_read_byte(unsigned int eeaddress ) { byte rdata = 0xFF; Wire.beginTransmission(ad_ROM_1_I2C); Wire.write((int)(eeaddress >> 8)); // envoi du MSB de l'adresse Wire.write((int)(eeaddress & 0xFF)); // envoi du LSB de l'adresse Wire.endTransmission(); Wire.requestFrom(ad_ROM_1_I2C,1); if (Wire.available()) rdata = Wire.read(); //lecture de l'octet adressé return rdata; } void loop() { int mode = digitalRead(switchPin); }