极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11376|回复: 2

如何把float转换成char

[复制链接]
发表于 2015-7-17 15:20:22 | 显示全部楼层 |阅读模式
本帖最后由 magnet999999 于 2015-7-17 15:23 编辑

我用的TM1650LED数字模块,不能把计算出的数据直接显示,需要按照下面的格式才能行TM1650 displayString(char *aString);
但是计算出的数据是float类型的,我该怎么转换。
原程序如下
int dustPin=A0;
int dustVal=0;

int ledPower=2;
int delayTime=280;
int delayTime2=40;
float offTime=9680;
void setup(){
Serial.begin(9600);
pinMode(ledPower,OUTPUT);
//pinMode(4, OUTPUT);
}

void loop(){
// ledPower is any digital pin on the arduino connected to Pin 3 on the sensor
digitalWrite(ledPower,LOW); // power on the LED
delayMicroseconds(delayTime);
dustVal=analogRead(dustPin); // read the dust value via pin 5 on the sensor
delayMicroseconds(delayTime2);
digitalWrite(ledPower,HIGH); // turn the LED off
delayMicroseconds(offTime);

delay(3000);
Serial.println(dustVal);


float dustVal2=dustVal;
dustVal2=(dustVal2*5/1024-0.0356)*120000;
Serial.println(dustVal2);//实际的颗粒数

if(dustVal2<76)
{
Serial.println("EXCELLENT");
}
else if(dustVal2<151)
{
Serial.println("VERY GOOD");
}
else if(dustVal2<301)
{
Serial.println("GOOD");
}
else if(dustVal2<1051)
{
Serial.println("FAIR");
}
else if(dustVal2<3001)
{
Serial.println("POOR");
}
else
{
Serial.println("VERY POOR");
}


if(dustVal>118)
//此拟合公式有效y=0.172*x-0.0999
{
float dustVal3=dustVal;
dustVal3=((dustVal3*5/1024)*0.172-0.0999)*1000;
Serial.println("PM2.5:");
Serial.println(dustVal3);//实际的颗粒数
}
else
{
Serial.println("PM2.5:");
Serial.println("----");
}



}


我修改的程序


  1. #include <Wire.h>
  2. #include <TM1650.h>
  3. char s[10];
  4. float dustVal3;
  5. int dustPin=A0;
  6. int dustVal=0;

  7. int ledPower=2;
  8. int delayTime=280;
  9. int delayTime2=40;
  10. float offTime=9680;
  11. void setup(){
  12. Serial.begin(9600);
  13. pinMode(ledPower,OUTPUT);
  14. //pinMode(4, OUTPUT);
  15. }

  16. void loop(){
  17. // ledPower is any digital pin on the arduino connected to Pin 3 on the sensor
  18. digitalWrite(ledPower,LOW); // power on the LED
  19. delayMicroseconds(delayTime);
  20. dustVal=analogRead(dustPin); // read the dust value via pin 5 on the sensor
  21. delayMicroseconds(delayTime2);
  22. digitalWrite(ledPower,HIGH); // turn the LED off
  23. delayMicroseconds(offTime);

  24. delay(3000);
  25. Serial.println(dustVal);


  26. float dustVal2=dustVal;
  27. dustVal2=(dustVal2*5/1024-0.0356)*120000;
  28. Serial.println(dustVal2);//实际的颗粒数

  29. if(dustVal2<76)
  30. {
  31. Serial.println("EXCELLENT");
  32. }
  33. else if(dustVal2<151)
  34. {
  35. Serial.println("VERY GOOD");
  36. }
  37. else if(dustVal2<301)
  38. {
  39. Serial.println("GOOD");
  40. }
  41. else if(dustVal2<1051)
  42. {
  43. Serial.println("FAIR");
  44. }
  45. else if(dustVal2<3001)
  46. {
  47. Serial.println("POOR");
  48. }
  49. else
  50. {
  51. Serial.println("VERY POOR");
  52. }


  53. if(dustVal>118)
  54. //此拟合公式有效y=0.172*x-0.0999
  55. {
  56. dustVal3=((dustVal3*5/1024)*0.172-0.0999)*1000;
  57. Serial.println("PM2.5:");
  58. String dataString;
  59. dataString=dtostrf(dustVal3,3.0,s);
  60. TM1650 displayString(dataString);//实际的颗粒数
  61. }
  62. else
  63. {
  64. Serial.println("PM2.5:");
  65. Serial.println("----");
  66. }



  67. }


复制代码

回复

使用道具 举报

发表于 2015-7-17 16:26:04 | 显示全部楼层
有个更好用的:sprintf
char *displayString=new char[10];
float data=333.3333;
sprintf( displayString, "%f", data );
回复 支持 反对

使用道具 举报

发表于 2015-7-18 16:24:18 | 显示全部楼层
初学者学习
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-16 17:49 , Processed in 0.057967 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表