Project
Dependencies: Hotboards_keypad TextLCD eeprom
i2ceeprom.cpp
00001 00002 #include "mbed.h" 00003 #include <string> 00004 #include "eeprom.h" 00005 #include "i2ceeprom.h" 00006 00007 #define EEPROM_ADDR 0x0 // I2c EEPROM address is 0x00 00008 00009 #define SDA D14 // I2C SDA pin 00010 #define SCL D15 // I2C SCL pin 00011 00012 #define MIN(X,Y) ((X) < (Y) ? (X) : (Y)) 00013 #define MAX(X,Y) ((X) > (Y) ? (X) : (Y)) 00014 00015 #define MB_ID 0x00 00016 #define NO_OF_DEV 0x01 00017 #define DEV_1_ID 0x02 00018 #define DEV_1_ST 0x03 00019 #define DEV_1_VAL 0x04 00020 #define DEV_2_ID 0x05 00021 #define DEV_2_ST 0x06 00022 #define DEV_2_VAL 0x07 00023 #define DEV_3_ID 0x08 00024 #define DEV_3_VAL 0x09 00025 #define DEV_4_ID 0x0A 00026 #define DEV_4_ST 0x0B 00027 #define DEV_4_VAL 0x0C 00028 00029 int mb_ID = 0x00; 00030 int NOno_of_dev = 0x00; 00031 int dev_1_id = 0x00; 00032 int dev_1_st = 0x00; 00033 int dev_1_val = 0x00; 00034 int dev_2_id = 0x00; 00035 int dev_2_st = 0x00; 00036 int dev_2_val = 0x00; 00037 int dev_3_id = 0x00; 00038 int dev_3_st = 0x00; 00039 int dev_3_val = 0x00; 00040 int dev_4_id = 0x00; 00041 int dev_5_st = 0x00; 00042 int dev_6_val = 0x00; 00043 00044 extern float G_time; 00045 extern float Y_time; 00046 extern float R_time; 00047 00048 00049 int32_t eeprom_size,max_size; 00050 typedef struct _MyData { 00051 int16_t sdata; 00052 int32_t idata; 00053 float fdata; 00054 } MyData; 00055 00056 static void myerror(std::string msg) 00057 { 00058 printf("Error %s\n",msg.c_str()); 00059 exit(1); 00060 } 00061 00062 void StoreCurrentMode(int32_t idata) 00063 { 00064 EEPROM ep(SDA,SCL,EEPROM_ADDR,EEPROM::T24C32); // 24C64 eeprom with sda = p9 and scl = p10 00065 eeprom_size = ep.getSize(); 00066 max_size = MAX(eeprom_size,256); 00067 ep.write(10,(int32_t)idata); // long write at address eeprom_size - 12 00068 if(ep.getError() != 0) 00069 myerror(ep.getErrorMessage()); 00070 printf("\n"); 00071 ep.read(10,(int32_t&)idata); 00072 // printf("TransDC Read %d\r\n",idata); 00073 } 00074 00075 00076 00077 int32_t readCurrentMode() 00078 { 00079 int32_t idata; 00080 EEPROM ep(SDA,SCL,EEPROM_ADDR,EEPROM::T24C32); // 24C64 eeprom with sda = p9 and scl = p10 00081 eeprom_size = ep.getSize(); 00082 max_size = MAX(eeprom_size,256); 00083 printf(" Max Size =:%d\r\n",max_size); 00084 ep.read(10,(int32_t&)idata); 00085 00086 if(ep.getError() != 0) 00087 myerror(ep.getErrorMessage()); 00088 //printf("\n"); 00089 // printf("Trans Down Count Read %d\r\n",idata); 00090 return idata; 00091 } 00092 00093 bool WriteCorresspondingTimes(uint32_t currentMode, float gTime,float yTime,float rTime) 00094 { 00095 EEPROM ep(SDA,SCL,EEPROM_ADDR,EEPROM::T24C32); // 24C64 eeprom with sda = p9 and scl = p10 00096 eeprom_size = ep.getSize(); 00097 max_size = MAX(eeprom_size-200,256); 00098 00099 uint32_t addr = 100*currentMode; 00100 ep.write(addr,(float)gTime); // float write at address eeprom_size - 8 00101 if(ep.getError() != 0) 00102 myerror(ep.getErrorMessage()); 00103 00104 // Test read short, long, float 00105 printf("\nGreen Time : (%f) :\n",gTime); 00106 00107 00108 addr = 100*currentMode +4; 00109 ep.write(addr,(float)yTime); // float write at address eeprom_size - 8 00110 if(ep.getError() != 0) 00111 myerror(ep.getErrorMessage()); 00112 00113 // Test read short, long, float 00114 printf("\nYellow Time : (%f) :\n",yTime); 00115 00116 addr = 100*currentMode +8; 00117 ep.write(addr,(float)rTime); // float write at address eeprom_size - 8 00118 if(ep.getError() != 0) 00119 myerror(ep.getErrorMessage()); 00120 00121 // Test read short, long, float 00122 printf("\nRed Time : (%f) :\n",rTime); 00123 00124 00125 } 00126 00127 00128 bool ReadCorresspondingTimes(uint32_t currentMode, float *gTime,float *yTime,float *rTime) 00129 { 00130 float fdata=0.0; 00131 EEPROM ep(SDA,SCL,EEPROM_ADDR,EEPROM::T24C32); // 24C64 eeprom with sda = p9 and scl = p10 00132 eeprom_size = ep.getSize(); 00133 printf("Size is : %d",eeprom_size); 00134 max_size = MAX(eeprom_size-200,256); 00135 printf(" Here 1\r\n"); 00136 uint32_t addr=currentMode*100; 00137 ep.read(addr,fdata); 00138 *gTime=fdata; 00139 00140 fdata=0; 00141 addr = 100*currentMode +4; 00142 // ep.read((uint32_t)(max_size - ((currentMode*12)-4)),fdata); 00143 ep.read(addr,fdata); 00144 *yTime=fdata; 00145 fdata=0; 00146 addr = 100*currentMode +8; 00147 // ep.read((uint32_t)(max_size - ((currentMode*12)-8)),fdata); 00148 ep.read(addr,fdata); 00149 *rTime=fdata; 00150 printf("1 : %f\r\n",*gTime); 00151 printf("2 : %f\r\n",*yTime); 00152 printf("3 : %f\r\n",*rTime); 00153 00154 if(ep.getError() != 0) 00155 myerror(ep.getErrorMessage()); 00156 00157 00158 } 00159 00160 00161 00162 void Last_Saved_Mode() 00163 { 00164 //float Gtime=0,Ytime=0, Rtime=0; 00165 int32_t CurrentMode= readCurrentMode(); 00166 bool flag= ReadCorresspondingTimes( CurrentMode, &G_time,&Y_time, &R_time); 00167 }
Generated on Fri Jul 15 2022 15:37:46 by 1.7.2