test

Dependencies:   mbed

Committer:
antimo8
Date:
Sat Jul 07 22:56:27 2018 +0000
Revision:
0:553e72ae6d64
test;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
antimo8 0:553e72ae6d64 1 #include "mbed.h"
antimo8 0:553e72ae6d64 2
antimo8 0:553e72ae6d64 3 #define LM75_REG_TEMP (0x00) // Temperature Register
antimo8 0:553e72ae6d64 4 #define LM75_REG_CONF (0x01) // Configuration Register
antimo8 0:553e72ae6d64 5 #define LM75_ADDR (0x90) // LM75 address
antimo8 0:553e72ae6d64 6
antimo8 0:553e72ae6d64 7 I2C i2c(I2C_SDA, I2C_SCL);
antimo8 0:553e72ae6d64 8
antimo8 0:553e72ae6d64 9 DigitalOut myled(LED1);
antimo8 0:553e72ae6d64 10
antimo8 0:553e72ae6d64 11 Serial pc(SERIAL_TX, SERIAL_RX);
antimo8 0:553e72ae6d64 12
antimo8 0:553e72ae6d64 13 volatile char TempCelsiusDisplay[] = "+abc.d C";
antimo8 0:553e72ae6d64 14
antimo8 0:553e72ae6d64 15 int main()
antimo8 0:553e72ae6d64 16 {
antimo8 0:553e72ae6d64 17
antimo8 0:553e72ae6d64 18 char data_write[2];
antimo8 0:553e72ae6d64 19 char data_read[2];
antimo8 0:553e72ae6d64 20
antimo8 0:553e72ae6d64 21 /* Configure the Temperature sensor device STLM75:
antimo8 0:553e72ae6d64 22 - Thermostat mode Interrupt
antimo8 0:553e72ae6d64 23 - Fault tolerance: 0
antimo8 0:553e72ae6d64 24 */
antimo8 0:553e72ae6d64 25 data_write[0] = LM75_REG_CONF;
antimo8 0:553e72ae6d64 26 data_write[1] = 0x02;
antimo8 0:553e72ae6d64 27 int status = i2c.write(LM75_ADDR, data_write, 2, 0);
antimo8 0:553e72ae6d64 28 if (status != 0) { // Error
antimo8 0:553e72ae6d64 29 while (1) {
antimo8 0:553e72ae6d64 30 myled = !myled;
antimo8 0:553e72ae6d64 31 wait(0.2);
antimo8 0:553e72ae6d64 32 }
antimo8 0:553e72ae6d64 33 }
antimo8 0:553e72ae6d64 34
antimo8 0:553e72ae6d64 35 while (1) {
antimo8 0:553e72ae6d64 36 // Read temperature register
antimo8 0:553e72ae6d64 37 data_write[0] = LM75_REG_TEMP;
antimo8 0:553e72ae6d64 38 i2c.write(LM75_ADDR, data_write, 1, 1); // no stop
antimo8 0:553e72ae6d64 39 i2c.read(LM75_ADDR, data_read, 2, 0);
antimo8 0:553e72ae6d64 40
antimo8 0:553e72ae6d64 41 // Calculate temperature value in Celcius
antimo8 0:553e72ae6d64 42 int tempval = (int)((int)data_read[0] << 8) | data_read[1];
antimo8 0:553e72ae6d64 43 tempval >>= 7;
antimo8 0:553e72ae6d64 44 if (tempval <= 256) {
antimo8 0:553e72ae6d64 45 TempCelsiusDisplay[0] = '+';
antimo8 0:553e72ae6d64 46 } else {
antimo8 0:553e72ae6d64 47 TempCelsiusDisplay[0] = '-';
antimo8 0:553e72ae6d64 48 tempval = 512 - tempval;
antimo8 0:553e72ae6d64 49 }
antimo8 0:553e72ae6d64 50
antimo8 0:553e72ae6d64 51 // Decimal part (0.5°C precision)
antimo8 0:553e72ae6d64 52 if (tempval & 0x01) {
antimo8 0:553e72ae6d64 53 TempCelsiusDisplay[5] = 0x05 + 0x30;
antimo8 0:553e72ae6d64 54 } else {
antimo8 0:553e72ae6d64 55 TempCelsiusDisplay[5] = 0x00 + 0x30;
antimo8 0:553e72ae6d64 56 }
antimo8 0:553e72ae6d64 57
antimo8 0:553e72ae6d64 58 // Integer part
antimo8 0:553e72ae6d64 59 tempval >>= 1;
antimo8 0:553e72ae6d64 60 TempCelsiusDisplay[1] = (tempval / 100) + 0x30;
antimo8 0:553e72ae6d64 61 TempCelsiusDisplay[2] = ((tempval % 100) / 10) + 0x30;
antimo8 0:553e72ae6d64 62 TempCelsiusDisplay[3] = ((tempval % 100) % 10) + 0x30;
antimo8 0:553e72ae6d64 63
antimo8 0:553e72ae6d64 64 // Display result
antimo8 0:553e72ae6d64 65 pc.printf("temp = %s\n", TempCelsiusDisplay);
antimo8 0:553e72ae6d64 66 myled = !myled;
antimo8 0:553e72ae6d64 67 wait(1.0);
antimo8 0:553e72ae6d64 68 }
antimo8 0:553e72ae6d64 69
antimo8 0:553e72ae6d64 70 }
antimo8 0:553e72ae6d64 71