Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: mlx90614.cpp
- 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)