передача значения типа char и float в строку - PullRequest
0 голосов
/ 02 октября 2018

Мне нужно отправить запрос на получение с использованием строки, и поэтому мне нужно передать значение float и char в строку для его отправки. Я пытаюсь подключить PIC18F4550 к Wi-Fi с помощью модуля ESP8266, который мне также нуженчитать и писать в базу данных.Я использую эту функцию, которую я сделал для отправки 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 ischar и temp - это float. Использование FTDI232 и Arduino IDE Я читаю данные между PIC и ESP8266. Я действительно не знаю, как делать то, что мне нужно.

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Преобразование float в строку сначала.


При отправке текстовой версии 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);
0 голосов
/ 02 октября 2018

Если ваша платформа поддерживает sprintf, вы, вероятно, хотите это:

float temp;
char luz;
...
char buffer[200];
sprintf(buffer, "GET /ESPic/index3.php?temp=%f&luz=%c", temp, luz);
send(buffer);
...