Как передать значения float датчика через модуль NRF24L01?
Я пытаюсь выяснить, как передать четыре значения датчиков: напряжение, ток, мощность и потребление, но я не могу этого сделать. Тем не менее, мой синтаксис верен... что я упускаю?
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include <RF24.h>
#define ACS712 A0
int lastData = 0;
int dataSum = 0;
int Count = 0;
float Voltage;
float Current;
float Power;
float kWh;
float Consumption;
String Data;
float vpc = 4.882813; // approx. voltage per count
RF24 radio(9, 10); // CE, CSN
const byte addresses[][6] = {"00001", "00002"};
void setup() {
Serial.begin(115200);
pinMode(13, OUTPUT);
radio.begin();
radio.openWritingPipe(addresses[1]); // 00001
radio.openReadingPipe(1, addresses[0]); // 00002
radio.setPALevel(RF24_PA_MIN);
radio.startListening();
}
void loop() {
radio.stopListening();
if (millis() > lastData + 1) {
dataSum += sq(analogRead(ACS712) - 512);
Count++;
lastData = millis();
}
// If statement to make calculations.
if (Count == 1000) {
// To get the RMS of the data.
float mean = dataSum / Count;
float value = sqrt(mean);
// To get the Voltage (in volts) consumed.
float Voltage = value * vpc;
// To get the Current (in amps) consumed.
float Current = Voltage / 66;
// To get the Power (in watts) consumed.
float Power = Current * 240;
float kWh = Power / 1000;
float Consumption = kWh;
dataSum = 0;
Count = 0;
Data += F("\nVoltage: ");
Data += String(Voltage, 3);
Data += F("\nCurrent: ");
Data += String(Current, 3);
Data += F("\nPower: ");
Data += String(Power, 3);
Data += F("\nConsumption: ");
Data += String(Consumption, 3);
//Serial.println(Data);
radio.write(&Data, sizeof(Data));
if (radio.write(&Data, sizeof(Data)) && true) {
Serial.println("Sent!");
} else {
Serial.println("Failed!");
};
delay(10);
}
}
@, 👍1
Обсуждение1 ответ
▲ 2
Простая float передача:
Для использования в TX
float payload = 0.12345;
radio.write(&payload, sizeof(payload));
Для использования в RX
float payload = 0;
radio.read(&payload, sizeof(payload));
,
@PaszaVonPomiot
здесь он хочет передать полную строку, ни одно значение с плавающей точкой, ваш ответ будет применим, если это будет один поплавок, но здесь вопрос касается того, как он может передать полную строку., @Maaz Sk
Смотрите также:
- Проблемы с передачей данных через RF24
- Интерфейс Arduino nano ,adxl335 ,nrf24l01
- Float печатается только 2 десятичных знака после запятой
- Отправка и получение различных типов данных через I2C в Arduino
- Какова работа pulseIn?
- Сколько датчиков может поддерживать один модуль Arduino?
- вопрос по трубке nRF24L01
- Получение BPM из данного кода
`Я не в состоянии сделать это " бессмысленно ..... ясное описание наблюдаемых результатов имеет смысл, @jsotola
Подсказка: Каков максимальный размер полезной нагрузки? И что будет передано для
radio.write(&Data, sizeof(Data))
, строкового объекта или его значения?, @Mikael PatelВы пробовали отправлять командные значения вместо строковых? Например, отправьте "0x01" для напряжения, "0x02" для тока и т. Д. Таким образом, вы не отправляете строки (которые в встроенном программировании вы действительно не должны использовать!!) и уменьшит передаваемые данные., @Tom
Почему бы просто не отправить напряжение и не сделать все эти вычисления на приемнике, так как есть только базовое деление/умножение с заданными константами. Кроме того, сначала попробуйте более простую программу, чтобы заставить радио работать. Удалось ли вам запустить один из примеров скетчей и заставить радио работать?, @Gerben