c++ - Arduino变量使用

标签 c++ arduino

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

相关文章:

arduino - 将许多输入连接到 Arduino

c++ - Boost::asio:仅在出现其他连接后才收到数据

c++ - 单步编译时是否生成目标文件?

c++ - 我可以使用 memcmp 两个比较多字节字符串吗?

c++ - 指针和静态和新对象

c++ - 在不编写显式 setter 的情况下修改私有(private)类数据成员的便捷方法是什么?模板有用吗?

c - beginPacket 上的 UDP 错误

c++ - 在 Arduino 上从字符串转换为 char*

c - Arduino通过串口传递多个参数

c++ - Arduino 中的预定义数组