基于Arduino mega 2560 的mlx90614红外温度传感器测试

一、Arduino主从机之间的i2c通信

     I2C总线定义:I2C(‘intel’ -Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。在主从通信中,可以有多个I2C总线器件同时接到I2C总线上,通过地址来识别通信对象。

        I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,最高传送速率100kbps。各种被控制电路均并联在这条总线上,但就像电话机一样只有拨通各自的号码才能工作,所以每个电路和模块都有唯一的地址,在信息的传输过程中,I2C总线上并接的每一模块电路既可以是主控器(或被控器),又可以是发送器(或接收器),这取决于它所要完成的功能。二、Wire Library

  这个库允许您与I2C / TWI 设备进行通信。在Arduino板上的R3布局(1.0 pinout), SDA(数据线)和SCL(时钟线)都在靠近AREF引脚的针头上。Arduino Due有两个I2C /TWI接口SDA1和SCL1靠近AREF pin,另外一个在20和21上。详情可见:https://www.arduino.cc/en/Reference/Wire

注:当连接SDA/SCL引脚时上拉电阻需要被连接,mega2560的上拉电阻在20-21引脚上。(没另外设置,调试成功,原因暂且未知?)

Functions

三、测试demo 

引脚连接:

    1 VCC ------VCC

    2 GND ------ GND

    3 SCL ------ 21(SCL)或者SCL1

    4 SDA ------20(SDA)或者SDA1

代码

#include <Wire.h>
void setup() {
  // put your setup code here, to run once:
  Wire.begin(); // join i2c bus (address optional for master)
  Serial.begin(9600);  // start serial for output
}

uint16_t result;
float temp;

void loop() {
  
  // put your main code here, to run repeatedly:
  Wire.beginTransmission(0x5A);
  Wire.write(0x07);            // sends instruction byte
  Wire.endTransmission(false);     // stop transmitting

  Wire.requestFrom(0x5A, 3);//Send data n-bytes read
  result = Wire.read(); //Receive DATA
  result |= Wire.read() << 8; //Receive DATA

  uint8_t pec = Wire.read();
  
  temp =  result*0.02-273.15;//

  Serial.print(temp);

  Serial.println();
  // delay(500);
}

测试结果:

猜你喜欢

转载自www.cnblogs.com/lening206/p/8996289.html
今日推荐