Ronald Lee / Mbed 2 deprecated MLX90614

Dependencies:   mbed

Revision:
1:eb3bd21fba0b
Parent:
0:599009dbb3e5
diff -r 599009dbb3e5 -r eb3bd21fba0b mlx90614.cpp
--- a/mlx90614.cpp	Tue Mar 21 07:29:14 2017 +0000
+++ b/mlx90614.cpp	Wed Mar 22 04:54:35 2017 +0000
@@ -37,7 +37,67 @@
     for (uint8_t cnt = 0; cnt < 3; cnt++) crcbuf[cnt+3] = (uint8_t)cmd[cnt];
     
     if (MLX90614_CRC8(crcbuf, 6) == (uint8_t)0x00) return cmd[0];
-    else return 0xff;
+    else return ERROR_ADDR_CRC8;
+}
+
+int MLX90614_EEPROM_Erase(int8_t curAddr, uint8_t eepromcmd)
+{
+    char cmd[4] = { 0 };
+    uint8_t crcbuf[4] = { 0 };
+    uint8_t writeAddr;
+    
+    writeAddr = (curAddr << 1) + 0;
+
+    crcbuf[0] = writeAddr;       //write Address
+    crcbuf[1] = cmd[0] = OPCODE_EEPROM | eepromcmd;
+    crcbuf[2] = cmd[1] = 0x00;
+    crcbuf[3] = cmd[2] = 0x00;
+                cmd[3] = MLX90614_CRC8(crcbuf, 4);
+    
+    return MLX90614_I2C.write(writeAddr, cmd, 4, true);
+}
+
+int MLX90614_EEPROM_Write(int8_t curAddr, uint8_t eepromcmd, uint16_t data)
+{
+    char cmd[4] = { 0 };
+    uint8_t crcbuf[4] = { 0 };
+    uint8_t writeAddr;
+    
+    MLX90614_EEPROM_Erase(curAddr, eepromcmd);
+    wait(0.1);
+    
+    writeAddr = (curAddr << 1) + 0;
+
+    crcbuf[0] = writeAddr;       //write Address
+    crcbuf[1] = cmd[0] = OPCODE_EEPROM | eepromcmd;
+    crcbuf[2] = cmd[1] = (uint8_t)(data & 0x00ff);
+    crcbuf[3] = cmd[2] = (uint8_t)((data & 0xff00) >> 8);
+                cmd[3] = MLX90614_CRC8(crcbuf, 4);
+    
+    MLX90614_I2C.write(writeAddr, cmd, 4, true);
+    wait(0.1);
+    
+    return 1;
+}
+
+uint16_t MLX90614_EEPROM_Read(uint8_t curAddr, uint8_t eepromcmd)
+{
+    char cmd[3] = { 0 };
+    uint8_t crcbuf[6] = { 0 };
+    uint8_t writeAddr, readAddr;
+    
+    writeAddr = (curAddr << 1) + 0;
+    readAddr = (curAddr << 1) + 1;
+
+    crcbuf[0] = writeAddr;       //write Address
+    crcbuf[1] = cmd[0] = OPCODE_EEPROM | eepromcmd;
+    crcbuf[2] = readAddr;       //read Address
+    MLX90614_I2C.write(writeAddr, cmd, 1, true);
+    MLX90614_I2C.read(readAddr, cmd, 3);
+    for (uint8_t cnt = 0; cnt < 3; cnt++) crcbuf[cnt+3] = (uint8_t)cmd[cnt];
+    
+    if (MLX90614_CRC8(crcbuf, 6) == (uint8_t)0x00) return (cmd[1]<<8)|cmd[0];
+    else return ERROR_ADDR_CRC8;
 }
 
 float getTempC_Ambi(uint8_t SAddr)
@@ -62,7 +122,7 @@
         return ((0.02*static_cast<float>((cmd[1]<<8)|cmd[0]))   //Kelvin
                  -273.15                                        //C
                  -0.18);                                        //(3.3V-3)*0.6/V
-    else return 0xffffffff;                                     //Error
+    else return ERROR_TEMP_CRC8;                                     //Error
 }
 
 float getTempC_Obj1(uint8_t SAddr)
@@ -87,7 +147,7 @@
         return ((0.02*static_cast<float>((cmd[1]<<8)|cmd[0]))   //Kelvin
                  -273.15                                        //C
                  -0.18);                                        //(3.3V-3)*0.6/V
-    else return 0xffffffff;                                     //Error
+    else return ERROR_TEMP_CRC8;                                     //Error
 }
 
 float getTempC_Obj2(uint8_t SAddr)
@@ -112,7 +172,7 @@
         return ((0.02*static_cast<float>((cmd[1]<<8)|cmd[0]))   //Kelvin
                  -273.15                                        //C
                  -0.18);                                        //(3.3V-3)*0.6/V
-    else return 0xffffffff;                                     //Error
+    else return ERROR_TEMP_CRC8;                                     //Error
 }
 
 float getTempC(uint8_t SAddr, uint8_t memAddr)
@@ -134,7 +194,7 @@
         return ((0.02*static_cast<float>((cmd[1]<<8)|cmd[0]))   //Kelvin
                  -273.15                                        //C
                  -0.18);                                        //(3.3V-3)*0.6/V
-    else return 0xffffffff;                                     //Error
+    else return ERROR_TEMP_CRC8;                                     //Error
 }
 
 float getTempF(uint8_t SAddr, uint8_t memAddr)
@@ -156,7 +216,7 @@
                   -273.15                                       //C
                   -0.18)                                        //(3.3V-3)*0.6/V
                   *1.8+32);                                     //F
-    else return 0xffffffff;                                     //Error
+    else return ERROR_TEMP_CRC8;                                     //Error
 }
 
 uint8_t MLX90614_CRC8(uint8_t *data, int length)