SHENG-HEN HSIEH
/
MLX90614_STM32compatible_continuous
works fine on STM
main.cpp@0:70da5379f95b, 2017-03-16 (annotated)
- Committer:
- open4416
- Date:
- Thu Mar 16 11:14:14 2017 +0000
- Revision:
- 0:70da5379f95b
works fine on STM
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
open4416 | 0:70da5379f95b | 1 | #include "mbed.h" |
open4416 | 0:70da5379f95b | 2 | |
open4416 | 0:70da5379f95b | 3 | #define MLX90614_ADDR (0x5A) // Slave address |
open4416 | 0:70da5379f95b | 4 | #define MLX90614_TOBJ (0x07) // Object temperature register |
open4416 | 0:70da5379f95b | 5 | |
open4416 | 0:70da5379f95b | 6 | //~~~~~~~~~~~~~~~~~~~~~~~~~~~GPIO registor~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// |
open4416 | 0:70da5379f95b | 7 | //~~~structure~~~// |
open4416 | 0:70da5379f95b | 8 | DigitalOut led(D13); //link leg |
open4416 | 0:70da5379f95b | 9 | |
open4416 | 0:70da5379f95b | 10 | //~~~Sensor_I2C~~~// |
open4416 | 0:70da5379f95b | 11 | I2C i2c(D14, D15); //I2C reg(SDA, SCL) |
open4416 | 0:70da5379f95b | 12 | |
open4416 | 0:70da5379f95b | 13 | //~~~Serial~~~// |
open4416 | 0:70da5379f95b | 14 | Serial pc(D1, D0); //Serial reg |
open4416 | 0:70da5379f95b | 15 | //~~~~~~~~~~~~~~~~~~~~~~~~~~~end of GPIO registor~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// |
open4416 | 0:70da5379f95b | 16 | |
open4416 | 0:70da5379f95b | 17 | |
open4416 | 0:70da5379f95b | 18 | //~~~~~~~~~~~~~~~~~~~~~~~~~~~Varible registor~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// |
open4416 | 0:70da5379f95b | 19 | //~~~globle~~~// |
open4416 | 0:70da5379f95b | 20 | Ticker TT; //call a timer |
open4416 | 0:70da5379f95b | 21 | |
open4416 | 0:70da5379f95b | 22 | //~~~Sensor_I2C~~~// |
open4416 | 0:70da5379f95b | 23 | char data_write[1]; //buff for write |
open4416 | 0:70da5379f95b | 24 | char data_read [3]; //buff for read |
open4416 | 0:70da5379f95b | 25 | short Buff = 0x00; |
open4416 | 0:70da5379f95b | 26 | float TOBJ = 0.0; |
open4416 | 0:70da5379f95b | 27 | //~~~~~~~~~~~~~~~~~~~~~~~~~~~end of Varible registor~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// |
open4416 | 0:70da5379f95b | 28 | |
open4416 | 0:70da5379f95b | 29 | |
open4416 | 0:70da5379f95b | 30 | //~~~~~~~~~~~~~~~~~~~~~~~~~~~Function registor~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// |
open4416 | 0:70da5379f95b | 31 | void init_IO(); //initialize IO state |
open4416 | 0:70da5379f95b | 32 | void init_TIMER(); //set TT_main{} rate |
open4416 | 0:70da5379f95b | 33 | void TT_main(); //timebase function rated by TT |
open4416 | 0:70da5379f95b | 34 | void read_MLX(); //read MLX data give raw data |
open4416 | 0:70da5379f95b | 35 | //~~~~~~~~~~~~~~~~~~~~~~~~~~~end of Function registor~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// |
open4416 | 0:70da5379f95b | 36 | |
open4416 | 0:70da5379f95b | 37 | |
open4416 | 0:70da5379f95b | 38 | //~~~~~~~~~~~~~~~~~~~~~~~~~~~main funtion~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// |
open4416 | 0:70da5379f95b | 39 | int main() |
open4416 | 0:70da5379f95b | 40 | { |
open4416 | 0:70da5379f95b | 41 | init_IO(); //initialized value and IRQ(Interrupt request) |
open4416 | 0:70da5379f95b | 42 | init_TIMER(); //start TT_main |
open4416 | 0:70da5379f95b | 43 | |
open4416 | 0:70da5379f95b | 44 | while(1) { //main() loop |
open4416 | 0:70da5379f95b | 45 | } |
open4416 | 0:70da5379f95b | 46 | |
open4416 | 0:70da5379f95b | 47 | } |
open4416 | 0:70da5379f95b | 48 | //~~~~~~~~~~~~~~~~~~~~~~~~~~~end of main funtion~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// |
open4416 | 0:70da5379f95b | 49 | |
open4416 | 0:70da5379f95b | 50 | |
open4416 | 0:70da5379f95b | 51 | //~~~~~~~~~~~~~~~~~~~~~~~~~~~init_IO funtion~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// |
open4416 | 0:70da5379f95b | 52 | void init_IO(void) //initialize |
open4416 | 0:70da5379f95b | 53 | { |
open4416 | 0:70da5379f95b | 54 | led = 0; |
open4416 | 0:70da5379f95b | 55 | pc.baud(9600); //set baud rate |
open4416 | 0:70da5379f95b | 56 | i2c.frequency(100000); //100kHz |
open4416 | 0:70da5379f95b | 57 | // NVIC_SetPriority(I2C1_ER_IRQn, 0); //!!!!!!!!!!!!!!!!!!!!!!!!! |
open4416 | 0:70da5379f95b | 58 | // NVIC_SetPriority(I2C1_EV_IRQn, 0); //!!!!!!!!!!!!!!!!!!!!!!!!! |
open4416 | 0:70da5379f95b | 59 | NVIC_SetPriority(TIM5_IRQn, 51); //!!!!!!!!!!!!!!!!!!!!!!!!! |
open4416 | 0:70da5379f95b | 60 | } |
open4416 | 0:70da5379f95b | 61 | //~~~~~~~~~~~~~~~~~~~~~~~~~~~end of init_IO funtion~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// |
open4416 | 0:70da5379f95b | 62 | |
open4416 | 0:70da5379f95b | 63 | |
open4416 | 0:70da5379f95b | 64 | //~~~~~~~~~~~~~~~~~~~~~~~~~~~Timebase funtion~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// |
open4416 | 0:70da5379f95b | 65 | void init_TIMER() //set TT_main{} rate |
open4416 | 0:70da5379f95b | 66 | { |
open4416 | 0:70da5379f95b | 67 | TT.attach_us(&TT_main, 10000); //rate set to 100Hz |
open4416 | 0:70da5379f95b | 68 | } |
open4416 | 0:70da5379f95b | 69 | |
open4416 | 0:70da5379f95b | 70 | void TT_main() //interrupt function by TT |
open4416 | 0:70da5379f95b | 71 | { |
open4416 | 0:70da5379f95b | 72 | read_MLX(); //update MLX data |
open4416 | 0:70da5379f95b | 73 | TOBJ = ((float)Buff * 0.02f) - 273.0f; |
open4416 | 0:70da5379f95b | 74 | printf("%.2f\n",TOBJ); |
open4416 | 0:70da5379f95b | 75 | } |
open4416 | 0:70da5379f95b | 76 | //~~~~~~~~~~~~~~~~~~~~~~~~~~~end of Timebase funtion~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// |
open4416 | 0:70da5379f95b | 77 | |
open4416 | 0:70da5379f95b | 78 | |
open4416 | 0:70da5379f95b | 79 | |
open4416 | 0:70da5379f95b | 80 | //↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓read_IMU funtion↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓// |
open4416 | 0:70da5379f95b | 81 | void read_MLX(void) //read MLX data give raw data |
open4416 | 0:70da5379f95b | 82 | { |
open4416 | 0:70da5379f95b | 83 | //TOBJ |
open4416 | 0:70da5379f95b | 84 | data_write[0] = MLX90614_TOBJ; //TOBJ address to buff |
open4416 | 0:70da5379f95b | 85 | i2c.write( MLX90614_ADDR<<1 | 0x00, data_write, 1, 1); //command to RAM access |
open4416 | 0:70da5379f95b | 86 | i2c.read ( MLX90614_ADDR<<1 | 0x01, data_read , 3, 0); //read callback |
open4416 | 0:70da5379f95b | 87 | Buff = data_read[1] << 8 |data_read[0]; |
open4416 | 0:70da5379f95b | 88 | } |
open4416 | 0:70da5379f95b | 89 | //↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑end of read_IMU funtion↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑// |