Arduino 将电位计值转换为GLCD显示的字符串
我试图在Adafruit ST7565 GLCD上显示电位计的值。我的串行监视器提供的值在1.62-1.67之间,而GLCD的范围在-20000到+20000之间。我不确定算术/数据类型是否错误,或者是否为“sprintf”转换分配了不正确的内存Arduino 将电位计值转换为GLCD显示的字符串,arduino,Arduino,我试图在Adafruit ST7565 GLCD上显示电位计的值。我的串行监视器提供的值在1.62-1.67之间,而GLCD的范围在-20000到+20000之间。我不确定算术/数据类型是否错误,或者是否为“sprintf”转换分配了不正确的内存 #include "ST7565.h" #include "stdlib.h" char buffer[5]; int ledPin = 13; // LED connected to digital pin 13 char str[8];
#include "ST7565.h"
#include "stdlib.h"
char buffer[5];
int ledPin = 13; // LED connected to digital pin 13
char str[8];
// the LCD backlight is connected up to a pin so you can turn it on & off
#define BACKLIGHT_LED 10
// pin 9 - Serial data out (SID)
// pin 8 - Serial clock out (SCLK)
// pin 7 - Data/Command select (RS or A0)
// pin 6 - LCD reset (RST)
// pin 5 - LCD chip select (CS)
ST7565 glcd(9, 8, 7, 6, 5);
#define LOGO16_GLCD_HEIGHT 16
#define LOGO16_GLCD_WIDTH 16
void setup() {
Serial.begin(9600);
// turn on backlight
pinMode(BACKLIGHT_LED, OUTPUT);
digitalWrite(BACKLIGHT_LED, HIGH);
// initialize and set the contrast to 0x18
glcd.begin(0x18);
glcd.display(); // show splashscreen
delay(3000);
glcd.clear();
Serial.println(" ");
digitalWrite(BACKLIGHT_LED, HIGH);
glcd.drawstring(0,0," ");
glcd.display();
glcd.clear();
}
void loop() {
// read the input on analog pin 0:
int sensorValue = analogRead(A0);
// Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V):
float voltage = sensorValue * (5.0 / 1023.0);
// print out the value you read:
Serial.println(voltage);
digitalWrite(BACKLIGHT_LED, HIGH);
Serial.println(voltage);
sprintf(str,"%d",voltage); // converts to decimal base.
glcd.drawstring(0,0,str);
glcd.display();
delay(500);
glcd.clear();
}
任何见解都值得赞赏。我没有太多的正式编程经验,所以链接有关数据类型的教程没有任何用处。我需要看一个像这样的具体例子才能真正理解。您使用
%d
打印出一个浮点
;这是未定义的行为(在您的例子中,它可能转储了浮点
位序列的某些部分的整数表示)
不要使用sprintf
(因为据报道在Arduino上sprintf(…,“%f”,val)
被破坏),而是使用:
另外,如果您感兴趣,可以查看Arduino打印浮动的方式。sprintf(str,“%d”,电压)代码>错误,电压
不是int
。您正在寻找snprintf(str,sizeof str,“%d”,电压)代码>而不是?(为了安全起见,还应注意使用snprintf()
dtostrf(voltage, 0, 2, buf);