Project
Dependencies: Hotboards_keypad TextLCD eeprom
i2ceeprom.cpp
- Committer:
- shivanandgowdakr
- Date:
- 2018-10-23
- Revision:
- 0:194ff03a2e6a
- Child:
- 1:1894419d5def
File content as of revision 0:194ff03a2e6a:
// 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);
}