Ошибка: значение void не проигнорировано, как должно быть = radio.read(&Irms, sizeof(float));

Доброе утро всем, у меня был этот скетч, который работал, теперь при загрузке программы выдает ошибку:

#include <Wire.h>
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

float Irms ;
RF24 radio(9, 10);
const uint64_t pipe = 0xE8E8F0F0E1LL;

void setup(void) {

  radio.begin();
  radio.openReadingPipe(1, pipe);
  radio.startListening();
  Serial.println("setup() - Inizializzazione completata");
  delay(300);
}

void loop(void) {
  if ( radio.available() )
  {
    bool done = false;
    
    while (!done)
      delay(1000);

    {
      delay(1000);
      done = radio.read(&Irms, sizeof(float));

, 👍0

Обсуждение

Кстати, будьте осторожны, так как цикл while бесконечен (есть только delay(1000), а done никогда не меняется), @KIIV

Это не совсем относится к вопросу, но в вызове radio.read лучше использовать sizeof(lrms), а не sizeof(float), потому что тогда, если вы измените тип lrms, код все равно будет работать., @Code Gorilla


1 ответ


1

Это заявление:

done = radio.read(&Irms, sizeof(float));

несовместимо с текущей библиотекой <RF24.h>.

Метод read() теперь имеет следующую сигнатуру:

void read (void *buf, uint8_t len)

Вы можете либо адаптировать свой код, либо использовать древнюю библиотеку «maniacbug» https://github.com/maniacbug/RF24 который имеет следующую сигнатуру для read():

bool read(void* buf, uint8_t len);

,

Можете ли вы помочь мне изменить мой код? Спасибо, @ksalva

@ksalva Ваш код в вопросе, похоже, усечен. Покажите весь ваш код, и я попытаюсь предложить исправление и добавить его в ответ., @6v6gt

Существует функция available(), которая возвращает true, если есть данные, которые можно прочитать. Поэтому вызовите done = radio.available(); if (done) {radio.read(&lm=lrms, sizeof (lrms));}, @Code Gorilla