c - 使用 radio.write() 发送小数;与阿杜诺

标签 c arduino

我正在改编我发现的草图,通过 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],它不会。

我错过了什么?

最佳答案

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

关于c - 使用 radio.write() 发送小数;与阿杜诺,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23833546/

相关文章:

c - 如何将 char 转换为其 ascii 十进制值?

C 程序给出意外的输出

c++ - Teensy 的#include <TimeLib.h> 被 Arduino 覆盖了

Arduino IDE库位置

c++ - Arduino 1.6.9 及更高版本的 c++ 支持

c++ - 数组一直只返回最后一个元素。 [C/阿杜伊诺]

c - 改进以下代码的方法

c - (char*)1 是什么意思?

c - 到 "head"还是不到 "head"?

c - Arduino定时器中断采样