Arduino 将电位计值转换为GLCD显示的字符串

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];

我试图在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];

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