我需要使用字符串发送get请求,因此需要将浮点数和char值传递给字符串才能发送它。我试图使用ESP8266模块将PIC18F4550连接到wifi,我也需要读取和写入数据库。我一直在使用此功能来发送AT指令,并且该功能运行良好:
void send (char dato[]){
int i = 0;
while (dato[i]!=0){
TXREG=dato[i];
i++;
while(TRMT==0);
}
TXREG = 0x0D;
while(TRMT==0);
TXREG = 0x0A;
}
我的问题是我需要发送:
send("GET /ESPic/index3.php?temp=temp&luz=luz");
但是luz是char并且temp是float。使用FTDI232和Arduino IDE我正在读取PIC和ESP8266之间的数据,我真的不知道该怎么做。
答案 0 :(得分:3)
您的平台支持sprintf
的Assumimg,您可能需要这样做:
float temp;
char luz;
...
char buffer[200];
sprintf(buffer, "GET /ESPic/index3.php?temp=%f&luz=%c", temp, luz);
send(buffer);
答案 1 :(得分:1)
首先将float
转换为 string 。
发送float
的文本版本时,最好避免使用"%f"
,并以足够的精度使用"%e"
,"%g"
或"%a"
。
"%f"
对于很大的数字可能会很长。对于所有"0.000000"
的大约一半(较小的),它都掩盖了无信息的+/- float
。
这3种格式e,g,a
可以更好地控制最大长度,更容易确保使用所需的精度。
float temp;
char luz;
// send("GET /ESPic/index3.php?temp=temp&luz=luz");
#define SEND_FC_FMT "GET /ESPic/index3.php?temp=%.*e&luz=%c"
// - d . ddd...ddd e - d...d \0
#define FLT_ESTR_SIZE (1 + 1 + 1 + (FLT_DECIMAL_DIG-1) + 1 + 1 + 5 + 1)
char buffer[sizeof SEND_FC_FMT + FLT_ESTR_SIZE];
sprintf(buffer, SEND_FC_FMT, FLT_DECIMAL_DIG-1, temp, luz);
send (buffer);