You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:06:22