繁体   English   中英

Arduino变量用法

[英]Arduino variable usage

对于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=potValue;

并且您的程序将按照需要运行。

您可以像这样保存一些内存和代码空间:

int g_lastValue = 0;

void loop() {

  int nowValue = analogRead(A0);

  if (nowValue != g_lastValue) {
    Serial.println(nowValue);
    g_lastValue = nowValue;
  }
  ...
}

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

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

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

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);
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM