Arduino 和 LM75 的 I2C 总线通讯(3) – 定义LM75类

Arduino 的语言可以使用 C++ 的,所以它支持自定义对象,即 object。比如说,前面用的LM75读取温度,可以将其封装为一个类 (class),简化其使用。

头文件 LM75.h

#ifndef LM75_H
#define LM75_H

#include <Arduino.h>

class LM75
{
    int address;

public:
    LM75();
    LM75(int Addr);
    float Temp();
};

#endif // LM75_H

C++文件 LM75.cpp

#include "LM75.h"
#include <Wire.h>

LM75::LM75():address(B1001000){}

LM75::LM75(int Addr){
    address = Addr;
}

float LM75::Temp(){
    int part1,part2;
    Wire.beginTransmission(address);
    Wire.write(B00);
    Wire.endTransmission();

    Wire.requestFrom(address, 2);
    while(Wire.available()){
        part1 = Wire.read();
        part2 = Wire.read();
    }
    part2 &= B10000000;
    part2 >>= 7;
    return part1 + part2 * 0.5;
    
}

本代码有个问题,就是温度为负数时,显示的数值不正确,这个将在下一个版本里更新。

将上述两个文件 *.h 和 *.cpp 放入 文档目录下 Arduino\libraries\LM75 内:(文件夹和类同名),然后再 Arduino IDE 里调用。

arduino_libraries_lm75

Arduino 代码

#include <LM75.h>
#include <Wire.h>

LM75 myLM75;

void setup(){
  Wire.begin();
  Serial.begin(9600);
}

void loop(){
  Serial.println(myLM75.Temp());
  delay(500);
}

注意到,在定义 myLM75 时,没有指明地址,是因为使用默认构造函数,在初始化列表里,对 address 进行初始化。

LM75::LM75():address(B1001000){}

如果想指明地址,可以在 Arduino IDE 中指明地址

LM75 myLM75(B1001000);

将重载另一个构造函数,通过形参将实参赋值到 address 。

LM75::LM75(int Addr){
    address = Addr;
}

扩展阅读

关键字: LM75, Arduino, I2C, Class, C++, 构造函数, 初始化

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.