Project
Dependencies: Hotboards_keypad TextLCD eeprom
i2ceeprom.cpp@0:194ff03a2e6a, 2018-10-23 (annotated)
- Committer:
- shivanandgowdakr
- Date:
- Tue Oct 23 08:12:53 2018 +0000
- Revision:
- 0:194ff03a2e6a
- Child:
- 1:1894419d5def
HI
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
shivanandgowdakr | 0:194ff03a2e6a | 1 | |
shivanandgowdakr | 0:194ff03a2e6a | 2 | |
shivanandgowdakr | 0:194ff03a2e6a | 3 | // Example |
shivanandgowdakr | 0:194ff03a2e6a | 4 | |
shivanandgowdakr | 0:194ff03a2e6a | 5 | #include <string> |
shivanandgowdakr | 0:194ff03a2e6a | 6 | #include "mbed.h" |
shivanandgowdakr | 0:194ff03a2e6a | 7 | #include "eeprom.h" |
shivanandgowdakr | 0:194ff03a2e6a | 8 | |
shivanandgowdakr | 0:194ff03a2e6a | 9 | #define EEPROM_ADDR 0x02 // I2C EEPROM address is 0x00 |
shivanandgowdakr | 0:194ff03a2e6a | 10 | |
shivanandgowdakr | 0:194ff03a2e6a | 11 | #define SDA D14 // I2C SDA pin |
shivanandgowdakr | 0:194ff03a2e6a | 12 | #define SCL D15 // I2C SCL pin |
shivanandgowdakr | 0:194ff03a2e6a | 13 | |
shivanandgowdakr | 0:194ff03a2e6a | 14 | #define MIN(X,Y) ((X) < (Y) ? (X) : (Y)) |
shivanandgowdakr | 0:194ff03a2e6a | 15 | #define MAX(X,Y) ((X) > (Y) ? (X) : (Y)) |
shivanandgowdakr | 0:194ff03a2e6a | 16 | |
shivanandgowdakr | 0:194ff03a2e6a | 17 | extern float G_time; |
shivanandgowdakr | 0:194ff03a2e6a | 18 | extern float Y_time; |
shivanandgowdakr | 0:194ff03a2e6a | 19 | extern float R_time; |
shivanandgowdakr | 0:194ff03a2e6a | 20 | |
shivanandgowdakr | 0:194ff03a2e6a | 21 | |
shivanandgowdakr | 0:194ff03a2e6a | 22 | int32_t eeprom_size,max_size; |
shivanandgowdakr | 0:194ff03a2e6a | 23 | typedef struct _MyData { |
shivanandgowdakr | 0:194ff03a2e6a | 24 | int16_t sdata; |
shivanandgowdakr | 0:194ff03a2e6a | 25 | int32_t idata; |
shivanandgowdakr | 0:194ff03a2e6a | 26 | float fdata; |
shivanandgowdakr | 0:194ff03a2e6a | 27 | } MyData; |
shivanandgowdakr | 0:194ff03a2e6a | 28 | |
shivanandgowdakr | 0:194ff03a2e6a | 29 | static void myerror(std::string msg) |
shivanandgowdakr | 0:194ff03a2e6a | 30 | { |
shivanandgowdakr | 0:194ff03a2e6a | 31 | printf("Error %s\n",msg.c_str()); |
shivanandgowdakr | 0:194ff03a2e6a | 32 | exit(1); |
shivanandgowdakr | 0:194ff03a2e6a | 33 | } |
shivanandgowdakr | 0:194ff03a2e6a | 34 | |
shivanandgowdakr | 0:194ff03a2e6a | 35 | void StoreCurrentMode(int32_t idata) |
shivanandgowdakr | 0:194ff03a2e6a | 36 | { |
shivanandgowdakr | 0:194ff03a2e6a | 37 | EEPROM ep(SDA,SCL,EEPROM_ADDR,EEPROM::T24C128); // 24C64 eeprom with sda = p9 and scl = p10 |
shivanandgowdakr | 0:194ff03a2e6a | 38 | eeprom_size = ep.getSize(); |
shivanandgowdakr | 0:194ff03a2e6a | 39 | max_size = MIN(eeprom_size,256); |
shivanandgowdakr | 0:194ff03a2e6a | 40 | ep.write((uint32_t)(eeprom_size - 200),(int32_t)idata); // long write at address eeprom_size - 12 |
shivanandgowdakr | 0:194ff03a2e6a | 41 | if(ep.getError() != 0) |
shivanandgowdakr | 0:194ff03a2e6a | 42 | myerror(ep.getErrorMessage()); |
shivanandgowdakr | 0:194ff03a2e6a | 43 | // printf("\n"); |
shivanandgowdakr | 0:194ff03a2e6a | 44 | ep.read((eeprom_size - 12),(int32_t&)idata); |
shivanandgowdakr | 0:194ff03a2e6a | 45 | // printf("TransDC Read %d\r\n",idata); |
shivanandgowdakr | 0:194ff03a2e6a | 46 | } |
shivanandgowdakr | 0:194ff03a2e6a | 47 | |
shivanandgowdakr | 0:194ff03a2e6a | 48 | |
shivanandgowdakr | 0:194ff03a2e6a | 49 | |
shivanandgowdakr | 0:194ff03a2e6a | 50 | int32_t readCurrentMode() |
shivanandgowdakr | 0:194ff03a2e6a | 51 | { |
shivanandgowdakr | 0:194ff03a2e6a | 52 | int32_t idata; |
shivanandgowdakr | 0:194ff03a2e6a | 53 | EEPROM ep(SDA,SCL,EEPROM_ADDR,EEPROM::T24C128); // 24C64 eeprom with sda = p9 and scl = p10 |
shivanandgowdakr | 0:194ff03a2e6a | 54 | eeprom_size = ep.getSize(); |
shivanandgowdakr | 0:194ff03a2e6a | 55 | max_size = MIN(eeprom_size,256); |
shivanandgowdakr | 0:194ff03a2e6a | 56 | ep.read((eeprom_size - 200),(int32_t&)idata); |
shivanandgowdakr | 0:194ff03a2e6a | 57 | |
shivanandgowdakr | 0:194ff03a2e6a | 58 | if(ep.getError() != 0) |
shivanandgowdakr | 0:194ff03a2e6a | 59 | myerror(ep.getErrorMessage()); |
shivanandgowdakr | 0:194ff03a2e6a | 60 | // printf("\n"); |
shivanandgowdakr | 0:194ff03a2e6a | 61 | // printf("Trans Down Count Read %d\r\n",idata); |
shivanandgowdakr | 0:194ff03a2e6a | 62 | return idata; |
shivanandgowdakr | 0:194ff03a2e6a | 63 | } |
shivanandgowdakr | 0:194ff03a2e6a | 64 | |
shivanandgowdakr | 0:194ff03a2e6a | 65 | bool WriteCorresspondingTimes(uint32_t currentMode, float gTime,float yTime,float rTime) |
shivanandgowdakr | 0:194ff03a2e6a | 66 | { |
shivanandgowdakr | 0:194ff03a2e6a | 67 | EEPROM ep(SDA,SCL,EEPROM_ADDR,EEPROM::T24C128); // 24C64 eeprom with sda = p9 and scl = p10 |
shivanandgowdakr | 0:194ff03a2e6a | 68 | eeprom_size = ep.getSize(); |
shivanandgowdakr | 0:194ff03a2e6a | 69 | max_size = MIN(eeprom_size,256); |
shivanandgowdakr | 0:194ff03a2e6a | 70 | |
shivanandgowdakr | 0:194ff03a2e6a | 71 | uint32_t addr = eeprom_size - (currentMode*12); |
shivanandgowdakr | 0:194ff03a2e6a | 72 | ep.write(addr,(float)gTime); // float write at address eeprom_size - 8 |
shivanandgowdakr | 0:194ff03a2e6a | 73 | if(ep.getError() != 0) |
shivanandgowdakr | 0:194ff03a2e6a | 74 | myerror(ep.getErrorMessage()); |
shivanandgowdakr | 0:194ff03a2e6a | 75 | |
shivanandgowdakr | 0:194ff03a2e6a | 76 | // Test read short, long, float |
shivanandgowdakr | 0:194ff03a2e6a | 77 | printf("\nGreen Time : (%f) :\n",gTime); |
shivanandgowdakr | 0:194ff03a2e6a | 78 | |
shivanandgowdakr | 0:194ff03a2e6a | 79 | |
shivanandgowdakr | 0:194ff03a2e6a | 80 | addr = eeprom_size - ((currentMode*12)-4); |
shivanandgowdakr | 0:194ff03a2e6a | 81 | ep.write(addr,(float)yTime); // float write at address eeprom_size - 8 |
shivanandgowdakr | 0:194ff03a2e6a | 82 | if(ep.getError() != 0) |
shivanandgowdakr | 0:194ff03a2e6a | 83 | myerror(ep.getErrorMessage()); |
shivanandgowdakr | 0:194ff03a2e6a | 84 | |
shivanandgowdakr | 0:194ff03a2e6a | 85 | // Test read short, long, float |
shivanandgowdakr | 0:194ff03a2e6a | 86 | printf("\nYellow Time : (%f) :\n",yTime); |
shivanandgowdakr | 0:194ff03a2e6a | 87 | |
shivanandgowdakr | 0:194ff03a2e6a | 88 | addr = eeprom_size - ((currentMode*12)-8); |
shivanandgowdakr | 0:194ff03a2e6a | 89 | ep.write(addr,(float)rTime); // float write at address eeprom_size - 8 |
shivanandgowdakr | 0:194ff03a2e6a | 90 | if(ep.getError() != 0) |
shivanandgowdakr | 0:194ff03a2e6a | 91 | myerror(ep.getErrorMessage()); |
shivanandgowdakr | 0:194ff03a2e6a | 92 | |
shivanandgowdakr | 0:194ff03a2e6a | 93 | // Test read short, long, float |
shivanandgowdakr | 0:194ff03a2e6a | 94 | printf("\nRed Time : (%f) :\n",rTime); |
shivanandgowdakr | 0:194ff03a2e6a | 95 | |
shivanandgowdakr | 0:194ff03a2e6a | 96 | |
shivanandgowdakr | 0:194ff03a2e6a | 97 | } |
shivanandgowdakr | 0:194ff03a2e6a | 98 | |
shivanandgowdakr | 0:194ff03a2e6a | 99 | |
shivanandgowdakr | 0:194ff03a2e6a | 100 | bool ReadCorresspondingTimes(uint32_t currentMode, float *gTime,float *yTime,float *rTime) |
shivanandgowdakr | 0:194ff03a2e6a | 101 | { |
shivanandgowdakr | 0:194ff03a2e6a | 102 | float fdata=0.0; |
shivanandgowdakr | 0:194ff03a2e6a | 103 | EEPROM ep(SDA,SCL,EEPROM_ADDR,EEPROM::T24C128); // 24C64 eeprom with sda = p9 and scl = p10 |
shivanandgowdakr | 0:194ff03a2e6a | 104 | eeprom_size = ep.getSize(); |
shivanandgowdakr | 0:194ff03a2e6a | 105 | max_size = MIN(eeprom_size,256); |
shivanandgowdakr | 0:194ff03a2e6a | 106 | ep.read((eeprom_size - (currentMode*12)),(float&)fdata); |
shivanandgowdakr | 0:194ff03a2e6a | 107 | |
shivanandgowdakr | 0:194ff03a2e6a | 108 | if(ep.getError() != 0) |
shivanandgowdakr | 0:194ff03a2e6a | 109 | myerror(ep.getErrorMessage()); |
shivanandgowdakr | 0:194ff03a2e6a | 110 | // printf("\n"); |
shivanandgowdakr | 0:194ff03a2e6a | 111 | // printf("Trans Down Count Read %d\r\n",idata); |
shivanandgowdakr | 0:194ff03a2e6a | 112 | *gTime=fdata; |
shivanandgowdakr | 0:194ff03a2e6a | 113 | fdata=0.0; |
shivanandgowdakr | 0:194ff03a2e6a | 114 | ep.read((eeprom_size - (currentMode*12)-4),(float&)fdata); |
shivanandgowdakr | 0:194ff03a2e6a | 115 | |
shivanandgowdakr | 0:194ff03a2e6a | 116 | if(ep.getError() != 0) |
shivanandgowdakr | 0:194ff03a2e6a | 117 | myerror(ep.getErrorMessage()); |
shivanandgowdakr | 0:194ff03a2e6a | 118 | // printf("\n"); |
shivanandgowdakr | 0:194ff03a2e6a | 119 | // printf("Trans Down Count Read %d\r\n",idata); |
shivanandgowdakr | 0:194ff03a2e6a | 120 | *yTime=fdata; |
shivanandgowdakr | 0:194ff03a2e6a | 121 | fdata=0.0; |
shivanandgowdakr | 0:194ff03a2e6a | 122 | ep.read((eeprom_size - (currentMode*12)-8),(float&)fdata); |
shivanandgowdakr | 0:194ff03a2e6a | 123 | |
shivanandgowdakr | 0:194ff03a2e6a | 124 | if(ep.getError() != 0) |
shivanandgowdakr | 0:194ff03a2e6a | 125 | myerror(ep.getErrorMessage()); |
shivanandgowdakr | 0:194ff03a2e6a | 126 | // printf("\n"); |
shivanandgowdakr | 0:194ff03a2e6a | 127 | // printf("Trans Down Count Read %d\r\n",idata); |
shivanandgowdakr | 0:194ff03a2e6a | 128 | *rTime=fdata; |
shivanandgowdakr | 0:194ff03a2e6a | 129 | } |
shivanandgowdakr | 0:194ff03a2e6a | 130 | |
shivanandgowdakr | 0:194ff03a2e6a | 131 | |
shivanandgowdakr | 0:194ff03a2e6a | 132 | |
shivanandgowdakr | 0:194ff03a2e6a | 133 | void Last_Saved_Mode() |
shivanandgowdakr | 0:194ff03a2e6a | 134 | { |
shivanandgowdakr | 0:194ff03a2e6a | 135 | //float Gtime=0,Ytime=0, Rtime=0; |
shivanandgowdakr | 0:194ff03a2e6a | 136 | int32_t CurrentMode= readCurrentMode(); |
shivanandgowdakr | 0:194ff03a2e6a | 137 | bool flag= ReadCorresspondingTimes( CurrentMode, &G_time,&Y_time, &R_time); |
shivanandgowdakr | 0:194ff03a2e6a | 138 | } |