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 代码
#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; }
扩展阅读
- Arduino 和 LM75 的 I2C 总线通讯
http://davidrobot.com/2009/08/arduino-lm75-i2c.html - Arduino 和 LM75 的 I2C 总线通讯(2) – 温度小数部分
http://davidrobot.com/2014/10/arduino_lm75_i2c_part2.html - Arduino 事件驱动 (video)
http://v.youku.com/v_show/id_XNzYwNTM5Mjky.html?f=22764614
关键字: LM75, Arduino, I2C, Class, C++, 构造函数, 初始化