我正在尝试使用一个简单的类库来为Arduino工作并且正在努力。
图书馆 - .h
#ifndef ADS1X15_h
#define ADS1X15_h
#include "Arduino.h"
class ADS1X15
{
protected:
public:
ADS1X15 ();
void begin(uint8_t i2cAddress);
uint8_t m_i2cAddress;
uint8_t m_test;
private:
};
#endif
图书馆.cpp
#include "Arduino.h"
#include "ADS1X15.h"
ADS1X15::ADS1X15() {
uint8_t m_i2cAddress;
uint8_t m_test = 99;
}
void ADS1X15::begin(uint8_t i2cAddress) {
uint8_t m_i2cAddress = i2cAddress;
}
调用草图
#include <ADS1X15.h>
ADS1X15 ads;
void setup(void) {
Serial.begin(9600);
ads.begin(66);
}
void loop(void) {
Serial.print("Test1 ");
Serial.println(ads.m_i2cAddress);
Serial.print("Test2 ");
Serial.println(ads.m_test);
while (1==1) {}
}
上面似乎应该打印99和66而不是0和0!?!?!
提前致谢。
答案 0 :(得分:1)
这是不正确的:
ADS1X15::ADS1X15() {
uint8_t m_i2cAddress;
uint8_t m_test = 99;
}
它向构造函数声明了两个与类成员名称匹配的局部变量。您在ADS1X15::begin
中有类似的错误。如果启用了警告,则应该收到关于隐藏成员变量或类似变量的局部变量的警告。
重写没有类型声明的那些,它们将更新您的类,而不是更新方法的局部变量。
ADS1X15::ADS1X15() {
m_test = 99;
}
void ADS1X15::begin(uint8_t i2cAddress) {
m_i2cAddress = i2cAddress;
}
答案 1 :(得分:1)
在你的cpp:
ADS1X15::ADS1X15() {
uint8_t m_i2cAddress;
uint8_t m_test = 99;
您正在重新声明公共成员,因此当您在构造函数中引用时,您将访问私有副本而不是公共类成员。
只需使用:
ADS1X15::ADS1X15() {
m_test = 99;
}
void ADS1X15::begin(uint8_t i2cAddress) {
m_i2cAddress = i2cAddress;
}