Added the functions to read and set the emissivity of the sensor.
mlx90614.cpp@1:4a60d3f1e91e, 2011-06-09 (annotated)
- Committer:
- aquahika
- Date:
- Thu Jun 09 13:07:40 2011 +0000
- Revision:
- 1:4a60d3f1e91e
- Child:
- 2:01d333d06727
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
aquahika | 1:4a60d3f1e91e | 1 | |
aquahika | 1:4a60d3f1e91e | 2 | #include "mlx90614.h" |
aquahika | 1:4a60d3f1e91e | 3 | |
aquahika | 1:4a60d3f1e91e | 4 | MLX90614::MLX90614(I2C* i2c,int addr){ |
aquahika | 1:4a60d3f1e91e | 5 | |
aquahika | 1:4a60d3f1e91e | 6 | this->i2caddress = addr; |
aquahika | 1:4a60d3f1e91e | 7 | this->i2c = i2c; |
aquahika | 1:4a60d3f1e91e | 8 | |
aquahika | 1:4a60d3f1e91e | 9 | } |
aquahika | 1:4a60d3f1e91e | 10 | |
aquahika | 1:4a60d3f1e91e | 11 | |
aquahika | 1:4a60d3f1e91e | 12 | bool MLX90614::getTemp(float* temp_val){ |
aquahika | 1:4a60d3f1e91e | 13 | |
aquahika | 1:4a60d3f1e91e | 14 | char p1,p2,p3; |
aquahika | 1:4a60d3f1e91e | 15 | float temp_thermo; |
aquahika | 1:4a60d3f1e91e | 16 | bool ch; |
aquahika | 1:4a60d3f1e91e | 17 | |
aquahika | 1:4a60d3f1e91e | 18 | i2c->stop(); //stop i2c if not ack |
aquahika | 1:4a60d3f1e91e | 19 | wait(0.01); |
aquahika | 1:4a60d3f1e91e | 20 | i2c->start(); //start I2C |
aquahika | 1:4a60d3f1e91e | 21 | ch=i2c->write(i2caddress); //device address with write condition |
aquahika | 1:4a60d3f1e91e | 22 | |
aquahika | 1:4a60d3f1e91e | 23 | if(!ch)return false; //No Ack, return False |
aquahika | 1:4a60d3f1e91e | 24 | |
aquahika | 1:4a60d3f1e91e | 25 | ch=i2c->write(0x07); //device ram address where Tobj value is present |
aquahika | 1:4a60d3f1e91e | 26 | |
aquahika | 1:4a60d3f1e91e | 27 | if(!ch)return false; //No Ack, return False |
aquahika | 1:4a60d3f1e91e | 28 | |
aquahika | 1:4a60d3f1e91e | 29 | |
aquahika | 1:4a60d3f1e91e | 30 | i2c->start(); //repeat start |
aquahika | 1:4a60d3f1e91e | 31 | ch=i2c->write(i2caddress|0x01); //device address with read condition |
aquahika | 1:4a60d3f1e91e | 32 | if(!ch)return false; //No Ack, return False |
aquahika | 1:4a60d3f1e91e | 33 | |
aquahika | 1:4a60d3f1e91e | 34 | p1=i2c->read(1); //Tobj low byte |
aquahika | 1:4a60d3f1e91e | 35 | p2=i2c->read(1); //Tobj heigh byte |
aquahika | 1:4a60d3f1e91e | 36 | p3=i2c->read(0); //PEC |
aquahika | 1:4a60d3f1e91e | 37 | |
aquahika | 1:4a60d3f1e91e | 38 | i2c->stop(); //stop condition |
aquahika | 1:4a60d3f1e91e | 39 | |
aquahika | 1:4a60d3f1e91e | 40 | |
aquahika | 1:4a60d3f1e91e | 41 | temp_thermo=((((p2&0x007f)<<8)+p1)*0.02)-0.01; //degree centigrate conversion |
aquahika | 1:4a60d3f1e91e | 42 | *temp_val=temp_thermo-273; //Convert kelvin to degree Celsius |
aquahika | 1:4a60d3f1e91e | 43 | |
aquahika | 1:4a60d3f1e91e | 44 | return true; //load data successfully, return true |
aquahika | 1:4a60d3f1e91e | 45 | } |