Variables 无法在带有Arduino的16x2 LCD中显示变量值
我正在尝试将传感器输入到我的程序中,并将其显示在16x2 LCD显示屏上。我有两个接近传感器,计算两个输入之间的时间差,并在公式中使用。该值应用于变量,我希望该值显示在LCD中。它可以与串行监视器配合使用,但在LCD上显示的值看起来乱七八糟 我已将引脚从1更改为2,因此它现在是“液晶lcd(2、3、4、5、6、7);” 现在序列运行,但LCD中没有显示数据。也许它在循环中,因此它在不断地覆盖。有没有办法改变顺序,使值只出现一次,数据显示在LCD上?(即,它持续提供输出,如果我尝试while循环,它仍然不显示任何内容。串行监视器也变空 请在下面找到我的代码,并帮助我解决此问题Variables 无法在带有Arduino的16x2 LCD中显示变量值,variables,arduino,arduino-ide,lcd,Variables,Arduino,Arduino Ide,Lcd,我正在尝试将传感器输入到我的程序中,并将其显示在16x2 LCD显示屏上。我有两个接近传感器,计算两个输入之间的时间差,并在公式中使用。该值应用于变量,我希望该值显示在LCD中。它可以与串行监视器配合使用,但在LCD上显示的值看起来乱七八糟 我已将引脚从1更改为2,因此它现在是“液晶lcd(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,2,4,5,6,7);
int限位开关=13;
int=2=12;
int state1=低;
int state2=低;
浮动厘米=0.050;
所需浮动时间=0.000;
浮速=0.000;
浮动持续时间浮动=0.000;
无符号长起始时间;
无符号长结束时间;
无符号长持续时间;
字节定时;
无效设置()
{
Serial.begin(9600);
lcd.begin(16,2);
引脚模式(限位开关,输入);
引脚模式(限位开关2,输入);
}
void循环()
{
int val1=数字读取(限位开关);
int val2=数字读取(限位开关2);
lcd.clear();
if(val1!=state1 | | val2!=state2)
{
state1=val1;
state2=val2;
if(state1==0&&timerRunning==0)
开始时间=毫秒();
timerRunning=1;
if(state2==0&&timerRunning==1)
endTime=millis();
timerRunning=0;
持续时间=结束时间-开始时间;
durationFloat=(浮动)持续时间;
所需时间=持续时间浮动/1000;
速度=厘米/所需时间;
lcd.setCursor(0,0);
lcd.打印(“速度:”);
打印(速度);
lcd.setCursor(0,1);
串行打印(“速度单位为m/s=”);
序列号println(velocity,7);
//lcd.print(“速度”);lcd.print(速度);
延迟(1000);
}
}
您似乎正在使用插脚1,但arduino中的插脚0和1专用于您正在使用的串行。您是否先尝试了一个示例来检查接线是否正确?我投票关闭这个问题,因为这是一个接线问题,而不是编程问题。我已使用示例程序进行了检查,效果良好。是的。我已更改它和我把lcd.print放在循环的开头。现在工作正常。谢谢。