自定义Energia库中analogRead返回0的问题求助
问题分析与解决方案
我一眼就发现问题所在啦——你在库的init方法里犯了一个非常容易踩的变量作用域陷阱!
问题核心
在Filoguidage::init函数中,你写了:
int _PinCapteur = PinCapteur;
这里的int关键字会创建一个局部变量_PinCapteur,它和类的私有成员变量_PinCapteur重名了!这就导致局部变量完全“遮蔽”了类成员变量,你实际根本没给类的_PinCapteur赋值,它始终保持默认的初始值0。所以getPosition()调用analogRead(_PinCapteur)时,其实是在读取引脚0,自然返回0。
而你在.ino文件里直接调用analogRead(pin)时,用的是正确的引脚A11,所以能正常工作。
修正后的代码
只需要修改Filoguidage.cpp中的init函数,去掉局部变量的声明,直接给类成员变量赋值即可:
#include "Energia.h" #include "Filoguidage.h" void Filoguidage::init(int PinCapteur,int valeurCentrale,int interval){ _PinCapteur = PinCapteur; // 去掉前面的int,直接赋值给类的私有成员 pinMode(_PinCapteur, INPUT); } int Filoguidage::getPosition(){ return analogRead( _PinCapteur ); }
额外小提示
你在.ino的setup里已经调用了pinMode(pin,INPUT);,库的init里又重复做了一次,这属于冗余操作,可以去掉其中一个,不影响功能,但保持代码整洁更好。
内容的提问来源于stack exchange,提问作者Alexandre Michaud
相关产品推荐
相关产品推荐

