Project
Dependencies: Hotboards_keypad TextLCD eeprom
Diff: i2ceeprom.cpp
- Revision:
- 0:194ff03a2e6a
- Child:
- 1:1894419d5def
--- /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