works fine on STM

Dependencies:   mbed

Committer:
open4416
Date:
Thu Mar 16 11:14:14 2017 +0000
Revision:
0:70da5379f95b
works fine on STM

Who changed what in which revision?

UserRevisionLine numberNew 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↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑//