Project
Dependencies: Hotboards_keypad TextLCD eeprom
Diff: i2ceeprom.cpp
- Revision:
- 0:194ff03a2e6a
- Child:
- 1:1894419d5def
diff -r 000000000000 -r 194ff03a2e6a i2ceeprom.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/i2ceeprom.cpp Tue Oct 23 08:12:53 2018 +0000 @@ -0,0 +1,138 @@ + + +// Example + +#include <string> +#include "mbed.h" +#include "eeprom.h" + +#define EEPROM_ADDR 0x02 // I2C EEPROM address is 0x00 + +#define SDA D14 // I2C SDA pin +#define SCL D15 // I2C SCL pin + +#define MIN(X,Y) ((X) < (Y) ? (X) : (Y)) +#define MAX(X,Y) ((X) > (Y) ? (X) : (Y)) + +extern float G_time; +extern float Y_time; +extern float R_time; + + +int32_t eeprom_size,max_size; +typedef struct _MyData { + int16_t sdata; + int32_t idata; + float fdata; + } MyData; + +static void myerror(std::string msg) +{ + printf("Error %s\n",msg.c_str()); + exit(1); +} + +void StoreCurrentMode(int32_t idata) +{ + EEPROM ep(SDA,SCL,EEPROM_ADDR,EEPROM::T24C128); // 24C64 eeprom with sda = p9 and scl = p10 + eeprom_size = ep.getSize(); + max_size = MIN(eeprom_size,256); + ep.write((uint32_t)(eeprom_size - 200),(int32_t)idata); // long write at address eeprom_size - 12 + if(ep.getError() != 0) + myerror(ep.getErrorMessage()); +// printf("\n"); + ep.read((eeprom_size - 12),(int32_t&)idata); + // printf("TransDC Read %d\r\n",idata); +} + + + +int32_t readCurrentMode() +{ + int32_t idata; + EEPROM ep(SDA,SCL,EEPROM_ADDR,EEPROM::T24C128); // 24C64 eeprom with sda = p9 and scl = p10 + eeprom_size = ep.getSize(); + max_size = MIN(eeprom_size,256); + ep.read((eeprom_size - 200),(int32_t&)idata); + + if(ep.getError() != 0) + myerror(ep.getErrorMessage()); +// printf("\n"); + // printf("Trans Down Count Read %d\r\n",idata); + return idata; +} + +bool WriteCorresspondingTimes(uint32_t currentMode, float gTime,float yTime,float rTime) +{ + EEPROM ep(SDA,SCL,EEPROM_ADDR,EEPROM::T24C128); // 24C64 eeprom with sda = p9 and scl = p10 + eeprom_size = ep.getSize(); + max_size = MIN(eeprom_size,256); + + uint32_t addr = eeprom_size - (currentMode*12); + ep.write(addr,(float)gTime); // float write at address eeprom_size - 8 + if(ep.getError() != 0) + myerror(ep.getErrorMessage()); + + // Test read short, long, float + printf("\nGreen Time : (%f) :\n",gTime); + + + addr = eeprom_size - ((currentMode*12)-4); + ep.write(addr,(float)yTime); // float write at address eeprom_size - 8 + if(ep.getError() != 0) + myerror(ep.getErrorMessage()); + + // Test read short, long, float + printf("\nYellow Time : (%f) :\n",yTime); + + addr = eeprom_size - ((currentMode*12)-8); + ep.write(addr,(float)rTime); // float write at address eeprom_size - 8 + if(ep.getError() != 0) + myerror(ep.getErrorMessage()); + + // Test read short, long, float + printf("\nRed Time : (%f) :\n",rTime); + + +} + + +bool ReadCorresspondingTimes(uint32_t currentMode, float *gTime,float *yTime,float *rTime) +{ + float fdata=0.0; + EEPROM ep(SDA,SCL,EEPROM_ADDR,EEPROM::T24C128); // 24C64 eeprom with sda = p9 and scl = p10 + eeprom_size = ep.getSize(); + max_size = MIN(eeprom_size,256); + ep.read((eeprom_size - (currentMode*12)),(float&)fdata); + + if(ep.getError() != 0) + myerror(ep.getErrorMessage()); +// printf("\n"); + // printf("Trans Down Count Read %d\r\n",idata); + *gTime=fdata; + fdata=0.0; + ep.read((eeprom_size - (currentMode*12)-4),(float&)fdata); + + if(ep.getError() != 0) + myerror(ep.getErrorMessage()); +// printf("\n"); + // printf("Trans Down Count Read %d\r\n",idata); + *yTime=fdata; + fdata=0.0; + ep.read((eeprom_size - (currentMode*12)-8),(float&)fdata); + + if(ep.getError() != 0) + myerror(ep.getErrorMessage()); +// printf("\n"); + // printf("Trans Down Count Read %d\r\n",idata); + *rTime=fdata; +} + + + +void Last_Saved_Mode() +{ + //float Gtime=0,Ytime=0, Rtime=0; + int32_t CurrentMode= readCurrentMode(); + bool flag= ReadCorresspondingTimes( CurrentMode, &G_time,&Y_time, &R_time); +} \ No newline at end of file