2

我希望我的 LCD 显示“Voltage =(sensorValue)”,但现在我可以让程序在我转动电位器时识别该值的唯一方法是,如果我把它放在一个循环中。但是当我把它放在一个循环中时,整个屏幕会充满 1s、2s、3s、4s 或 5s,具体取决于电位器的设置位置。

如果我没有将它放在一个循环中,那么无论电位器的设置是什么,都会在屏幕上弹出,并且如果电位器转动则不会改变。

如何将循环的结果放在循环之外,以便我可以拥有“(Voltage = sensoreValue)”?

这是我的程序:

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);  

void setup()
{
    lcd.init();                      
    lcd.backlight();
    int sensorPin = A0;
    int sensorValue = 0;
    sensorValue = 0.004882812 * analogRead(sensorPin) + 1;
    lcd.print("Voltage=");
}

void loop()
{
    int sensorPin = A0;
    int sensorValue = 0;
    sensorValue = 0.004882812 * analogRead(sensorPin) + 1;
    lcd.print(sensorValue);
}
4

2 回答 2

1

您要求它打印读数并且它正在执行 - 它正在打印每个读数!

我怀疑您要么希望它仅在值更改时才打印

int sensorValue = 0;
int prevValue = 0;

void loop()
{    
    sensorValue = 0.004882812 * analogRead(sensorPin) + 1;
    if (sensorValue != prevValue) {
       lcd.print(sensorValue);
       prevValue == sensorValue;
    }
}

或者,如果您的显示器 lcd.print 支持,您可以打印“n”个退格,以便新值打印在旧值的顶部

于 2012-04-19T02:53:45.700 回答
0

听起来print()每次调用时都会清除先前数据的屏幕(尽管此处此处可用的相关文档和库代码尚不清楚)。

如果是这种情况,您需要Voltage=在循环中打印字符串以及传感器值。尝试将您的代码更改为:

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);  
int sensorPin = A0;

void setup()
{
    lcd.init();                      
    lcd.backlight();
}

void loop()
{
    int sensorValue = 0.004882812 * analogRead(sensorPin) + 1;
    String display = "Voltage=";
    display += sensorValue;
    lcd.print(display);
}
于 2012-04-19T15:51:10.307 回答