我是 Arduino 和 C++ 的新手。
我正在尝试编写一个程序,从模拟引脚零(一个 POT)读取输入数据。 读取值后,我希望它打印到串行监视器,但只打印一次。如果模拟引脚零的值发生变化,我希望它将新值打印到串行监视器。我试图使用全局变量,但无济于事。任何帮助将不胜感激!
int entered=0;
int flag;
void setup()
{
Serial.begin(9600);
}
void loop() {
int potValue=analogRead(A0);
if (!entered){
entered=1;
Serial.println(potValue);
}
int flag=potValue;
if (flag!=flag){
entered=0;
}
}
最佳答案
那真的很接近。这条线是你的错误
int flag=potValue;
如所写,这会创建一个新的局部变量flag。局部变量隐藏了全局变量。所以比较总是针对自身,永远不会失败。将行更改为:
flag=potValue;
您的程序将按预期运行。
你可以像这样节省一些内存和代码空间:
int g_lastValue = 0;
void loop() {
int nowValue = analogRead(A0);
if (nowValue != g_lastValue) {
Serial.println(nowValue);
g_lastValue = nowValue;
}
...
}
使用 g_ 作为名称前缀表明变量是全局变量。我使用这个命名约定,因为它有助于在读取函数时了解非本地变量。如果没有名称提示,则需要扫描整个函数体以查看是否存在变量声明,只有通过查看函数并且没有找到声明才能知道变量必须是全局的.在小函数上,这不是真正的问题,但随着代码的增长,您可能需要一些命名约定提供的 self 文档。
关于c++ - Arduino变量使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25213457/