无法在带Arduino的16x2液晶屏中显示变量值



我正在尝试将传感器输入到我的程序中,并将其显示在16x2 LCD显示屏中。我有两个接近传感器,其中计算两个输入之间的时间差并在公式中使用。该值应用于变量,我希望该值显示在LCD中。它适用于串行监视器,但LCD中的值看起来是乱码。

我已将引脚从 1 更改为 2,因此它现在是"液晶液晶(2, 3, 4, 5, 6, 7(;

现在序列运行,但LCD中不显示任何数据。也许它在循环中,因此它会不断覆盖。有没有办法更改顺序,使值只出现一次并且数据显示在LCD中?(即,它不断提供输出,如果我尝试一个 while 循环,它仍然什么也没显示。串行监视器也变为空。

串行监视器映像

液晶显示图像

请在下面找到我的代码并帮助我解决此问题。

#include <LiquidCrystal.h> 
LiquidCrystal lcd(1, 2, 4, 5, 6, 7); 
int limitSwitch = 13;
int limitSwitch2 = 12;
int state1 = LOW;
int state2 = LOW;
float centimeter = 0.050;
float timeRequired = 0.000;
float velocity = 0.000;
float durationFloat = 0.000;
unsigned long startTime;
unsigned long endTime;
unsigned long duration;
byte timerRunning;
void setup() 
{
Serial.begin(9600);
lcd.begin(16,2); 

pinMode(limitSwitch,INPUT);
pinMode(limitSwitch2,INPUT);
}

void loop() 

{
int val1 = digitalRead(limitSwitch);
int val2 = digitalRead(limitSwitch2);
lcd.clear();
if( val1 != state1 || val2 != state2 )
{
state1 = val1;
state2 = val2;
if( state1 == 0 && timerRunning == 0 )
startTime = millis();
timerRunning = 1;
if( state2 == 0 && timerRunning == 1)
endTime = millis();
timerRunning = 0;
duration = endTime - startTime;
durationFloat = (float) duration;

timeRequired = durationFloat / 1000;
velocity = centimeter / timeRequired;
lcd.setCursor(0, 0);
lcd.print("Speed: ");
lcd.print(velocity);
lcd.setCursor(0, 1);
Serial.print("Speed in m/s = ");
Serial.println(velocity,7);
//   lcd.print("Speed: "); lcd.print(velocity);
delay(1000);
}
}

您似乎正在使用引脚 1,但 Arduino 中的引脚 0 和 1 专用于您正在使用的序列号

最新更新