rf24 + bme280

voodoo-
Offline
Зарегистрирован: 20.12.2018

подскажите пожалуйста где косяк ? передаю данные по rf24 с датчика bme280 , в мониторе передатчика (Arduino Nano CH340 ATmega328) все норм отображается и температура и давление и влажность но в мониторе порта приемника (Arduino UNO) влажность ноль и на экран не могу вывести 

PS.в ардуино пока полный ноль. помогите доделать 

 

приемник 

#include <SPI.h>      
#include <nRF24L01.h> 
#include <RF24.h>     
#include <OLED_I2C.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <Wire.h>
#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME280 bme; // I2C
unsigned long delayTime;

const uint64_t pipe = 0xF0F1F2F3F4LL; 
RF24 radio(9,10);  

OLED oled(SDA, SCL, 8); //
extern uint8_t SmallFont[];
String txt1="";

void setup()
{
  Serial.begin(9600);  
  radio.begin();       
  radio.setChannel(0x60); 
  delay(2);

  radio.setChannel(0x60);            
  radio.setDataRate(RF24_1MBPS);  
  radio.setPALevel(RF24_PA_HIGH); 

  radio.openReadingPipe(1, pipe); 
  radio.startListening();        
  oled.begin();
  oled.setFont(SmallFont);
}

void loop() {
  float data[2];
  
  if (radio.available())             
  {
    
    radio.read(&data, sizeof(data)); 

  Serial.print("Humidity: ");
  Serial.println(data[3]);          
  Serial.print("Temperat: ");
  Serial.println(data[0]);          
  Serial.print("Pressure: ");
  Serial.println(data[1]);
  delay(1000);
  
   txt1="Temp=";

        txt1= txt1+String(data[3]);

         txt1= txt1+" *C";

         oled.print(txt1, CENTER, 10); 
  
  }
}

передачик 

#include <SPI.h>    
#include <nRF24L01.h> 
#include <RF24.h>     
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <Wire.h>
#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME280 bme; // I2C
unsigned long delayTime;

const uint64_t pipe = 0xF0F1F2F3F4LL; 
RF24 radio(9,10);  

void setup()
{
  bme.begin();
  Serial.begin(9600);  
  radio.begin();       
  radio.setChannel(0x60); 
  delay(2);

  radio.setChannel(0x60);            
  radio.setDataRate(RF24_1MBPS);  
  radio.setPALevel(RF24_PA_HIGH); 

  radio.openWritingPipe(pipe);    
  radio.stopListening();          
}

void loop() 
{
  float data[2];
  data[0] = bme.readTemperature();
  data[1] = bme.readPressure() / 100.0F;
  //data[3] = bme.readAltitude(SEALEVELPRESSURE_HPA)();
  data[3] = bme.readHumidity();
    
  radio.write(&data, sizeof(data)); 

  Serial.print("Humidity: ");
  Serial.println(data[3]);          
  Serial.print("Temperat: ");
  Serial.println(data[0]);          
  Serial.print("Pressure: ");
  Serial.println(data[1]);
  delay(10000);
}

 

 

 

 

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

del

voodoo-
Offline
Зарегистрирован: 20.12.2018

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

__Alexander
Offline
Зарегистрирован: 24.10.2012

У вас массив для передачи и приема по два байта. Сделайте три, и влажность суйте и высувайте из второго элемента, а не третьего.

float data[2];

voodoo-
Offline
Зарегистрирован: 20.12.2018
 
float data[3]; 
 
в мониторе получается так 
 
Humidity: ovf
Temperat: 23.89
Pressure: 1016.75
 
__Alexander
Offline
Зарегистрирован: 24.10.2012

Ну а засовываете и читаете из какого номера?

voodoo-
Offline
Зарегистрирован: 20.12.2018
 radio.read(&data, sizeof(data)); // читаем данные

  Serial.print("Humidity: ");
  Serial.println(data[3]);          // выводим данные влажности
  Serial.print("Temperat: ");
  Serial.println(data[0]);          // выводим данные температуры
  Serial.print("Pressure: ");
  Serial.println(data[1]);           // выводим данные давления
  delay(1000);

 

 

float data[3];
  data[0] = bme.readTemperature();     //читаем данные температуры
  data[1] = bme.readPressure() / 100.0F;   //читаем данные давления
  //data[3] = bme.readAltitude(SEALEVELPRESSURE_HPA)();
  data[3] = bme.readHumidity();     //читаем данные влажности 
    
  radio.write(&data, sizeof(data)); // отправляем данные по радиосигналу

  Serial.print("Humidity: ");
  Serial.println(data[3]);          // выводим данные влажности
  Serial.print("Temperat: ");
  Serial.println(data[0]);          // выводим данные температуры
  Serial.print("Pressure: ");
  Serial.println(data[1]);          // выводим данные давления

 

__Alexander
Offline
Зарегистрирован: 24.10.2012

так надо из 2-го, а не третьего. 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Не

data[3] = bme.readHumidity();     //читаем данные влажности

а

data[2] = bme.readHumidity();     //читаем данные влажности

Найди одно отличие.

sadman41
Offline
Зарегистрирован: 19.10.2016

А как это в код вставить? (С)

voodoo-
Offline
Зарегистрирован: 20.12.2018

о , блин. я думал  это не на ,что не влияет.

а не подскажите как вывести на экран ?  я отталкиваюсь от этой статьи https://3d-diy.ru/wiki/arduino-datchiki/datchik-bme280/  но безуспешно 

karamzin01
Offline
Зарегистрирован: 08.03.2018

р е а л и з у е м о - maslachenko767@mail.ru , консультации, подбор компонентов бесплатно, гарантии

b707
Offline
Зарегистрирован: 26.05.2017

voodoo- пишет:

а не подскажите как вывести на экран ?  я отталкиваюсь от этой статьи https://3d-diy.ru/wiki/arduino-datchiki/datchik-bme280/  но безуспешно 

подскажем. За 100 долларов.

Если вы не поняли - вы написали в платный раздел. Ваш счет за уже оказанные услуги - 5000. Каждому. (с)

voodoo-
Offline
Зарегистрирован: 20.12.2018

то что не в том разделе я помощи поросил , я виноват  и понял  ! ну а 5к и 100$ это перебор. это первые шаги   

vvadim
Offline
Зарегистрирован: 23.05.2012

voodoo- пишет:

то что не в том разделе я помощи поросил , я виноват  и понял  ! ну а 5к и 100$ это перебор. это первые шаги   

ну если первые шаги - почему с более простого не начать.