Arduino变量用法

时间:2014-08-08 23:02:28

标签: 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;
}
 }

2 个答案:

答案 0 :(得分:2)

这非常接近。这一行是你的错误

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_作为名称前缀是一个变量是全局的提示。我使用这个命名约定,因为它有助于在读取函数时知道非本地变量。如果没有名称提示,您需要扫描整个函数体以查看是否存在变量声明,并且只有查看函数并且查找声明才能知道变量必须是全局的。在小函数上,并不是真正的问题,但随着代码的增长,您可能需要一些命名约定提供的自我文档。

答案 1 :(得分:1)

你正在路上,但是你在变量方面有点纠结。

它可以更简单:只需一个全局变量和一个条件检查。

int lastRead = -1; // init to value outside of possible range

void setup()
{
  Serial.begin(9600);
}

void loop() {

  // get current value
  int currentRead = analogRead(0);

  //compare and only print if !=
  if (currentRead != lastRead){
   lastRead = currentRead; // store
   Serial.println(lastRead);
  }
}