Как я могу отправить символ измеренной температуры, чтобы он был виден в моей программе последовательного захвата (с использованием Realterm или Putty) - PullRequest
0 голосов
/ 09 ноября 2019

Я хочу отправить измеренную температуру моему уарту на моем Arduino с этим кодом. Я использовал этот код много раз, и передача всегда работает. Но когда я хочу послать это, я не получаю вывод, который я хочу в моей реальной программе серийного захвата. Код для преобразования его в градусы Цельсия, вероятно, хорош, но в итоге у меня есть число с плавающей запятой, которое мне, вероятно, нужно преобразовать в char (может быть, с помощью sprintf () или чего-то еще), но сейчас я просто застрял с этим.

Я пробовал несколько способов сделать это, но проблема в том, что, возможно, есть только один способ сделать это. Я также пытался использовать Itoa (температура, буфер, 10);На самом деле немного сложно понять, что мне нужно сделать, чтобы преобразовать его так, чтобы это было видно в моей программе последовательного захвата. Скорость передачи данных установлена ​​на 19200. В начале программы UART будет инициализирован, после чего я вызываю функцию передачи в главном в цикле.

//while(1)
        int reading = ADCsingleREAD(0); //Reads the sensor on port 0

        float voltage = reading * (5.0f / 1024.0f);

        float temperature = (voltage - 0.5f) * 100;

        char a = temperature;

        //Maybe i also need to do this ?
        //  char array[10];
        //  sprintf(array, "%f", temperature);

        transmit(temperature);
        _delay_ms(100);


        //the transmit function (in a different file)
        void transmit(int8_t data)
        {
            // wait for an empty transmit buffer
            // UDRE is set when the transmit buffer is empty
            loop_until_bit_is_set(UCSR0A, UDRE0);
            // send the data
            UDR0 = data;
        }

1 Ответ

0 голосов
/ 09 ноября 2019

Обычно программы терминалов с последовательным интерфейсом показывают текст, поэтому вы должны передавать текст:

, например, "20,5", если он действительно предназначен для числа с плавающей запятой, или "20", поскольку эта точность достаточна и ее легче обрабатывать

(дополнительно рекомендуется использовать символы новой строки)

Arduino не поддерживает формат% f в sprintf напрямую. Либо используйте метод печати Arduino (float) для любого класса, производного от Stream, либо dtostrf.

Один байт со значением 20 не является печатным символом, но, конечно, может интерпретироваться как предназначенное вашим собственным программным обеспечением на принимающем устройстве.

...