【问题标题】:Sending decimals using radio.write(); with Arduino使用 radio.write() 发送小数;与阿杜诺
【发布时间】:2014-05-23 15:48:31
【问题描述】:

我正在修改一个我发现通过 wifi 芯片 (Nrf2401) 发送传感器数据的草图,虽然我通过了消息,但我发送的值包含小数(例如 24.59),但收到的消息只会是 24 .

我确定代码的发送器部分有问题,但我看不出是什么。

这是我的代码:

#include <RF24.h>
#include <RF24_config.h>
#include <SPI.h>
#include <OneWire.h>
#include <DallasTemperature.h>

OneWire oneWire(4);

DallasTemperature sensors(&oneWire);

// ce,csn pins
RF24 radio(8,7);

unsigned char data[3] = {
  0};
unsigned long count=0;
void setup(void)
{
  sensors.begin();  
  Serial.begin(57600);
  Serial.println("**************V1 Send Sensor Data***********");
  radio.begin();
  radio.setPALevel(RF24_PA_LOW);
  radio.setChannel(0x4c);

  // open pipe for writing
  radio.openWritingPipe(0xF0F0F0F0E1LL);

  radio.enableDynamicPayloads();
  radio.setAutoAck(true);
  radio.powerUp();
  Serial.println("...Sending");
}

void loop(void)
{
  sensors.requestTemperatures();
  float currentTemp;
  currentTemp = sensors.getTempCByIndex(0);

  //assign 'T' to represent a Temperature reading
  data[0] = 'T';
  data[1] = currentTemp;
  count++;
  // print and increment the counter
  radio.write(data, sizeof(float)+1);
  Serial.print("Temperature sent:  ");
  Serial.println(currentTemp);
  // pause a second
  delay(500);
}

在这个例子中,当我打印 currentTemp 时,它会显示小数,但如果我打印 data[1],它不会。

我错过了什么?

【问题讨论】:

    标签: c arduino


    【解决方案1】:

    您正在分配data [1] = currentTemp。当前温度是一个浮点数,而不是一个字符,所以这不起作用。小数点会丢失,因为浮点数将在赋值中转换为 char。如果要将数据用作字符串,则将数据放入更大的缓冲区并使用 sprintf 打印 currentTemp。真的,您应该只将 currentTemp 写入收音机并在另一端进行格式化,这将使操作更快并且需要更少的带宽来传输(更不用说传输和格式化是不同的问题,应该分开而不是耦合,如果可能的话)。

    【讨论】:

    • 我意识到在机器之间发送浮点数可能不是最好的主意,因为它们有不同的表示形式。将其打印为字符串并以这种方式发送。
    猜你喜欢
    • 2021-07-11
    • 2016-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多