gpt4 book ai didi

c++ - Arduino变量使用

转载 作者:行者123 更新时间:2023-11-30 02:44:31 26 4
gpt4 key购买 nike

我是 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com