nRF24L01 & tableau de données

Bonsoir,

Je tente d'envoyer des températures d'une sonde a base de DS1820 via des nRF24L01+ sur un LCD 4x20.
Comme je désire utiliser plusieurs sonde, je les identifie via un "int", puis je créer un tableau pour avoir un
paquet via float qui contient l'ident de la sonde et la température. (pas de byte car je désire des virgule pour la température).

Problème je ne reçoit rien du coter du récepteur !
J'
code de la sonde:

#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>

#include <SPI.h>
#include <DallasTemperature.h>
#include <OneWire.h>
#include <VirtualWire.h>
#define ONE_WIRE_BUS 2 //bus 2 pour le DS18

#include <LiquidCrystal.h> //Affichage de la température sur un lcd 2x8
LiquidCrystal lcd(9, 6, 5, 4, 3, 10); 

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress SDB = { 0x28, 0xC0, 0x09, 0xBC, 0x05, 0x00, 0x00, 0xC4 };  //sonde salle de bain
float tSDB;

int probeId = 1; //identifiant du DS18

void setup()
{
  Serial.begin(9600);
  Serial.println("Demarrage");
  lcd.begin(8, 2);
  
  sensors.begin();
  sensors.setResolution(SDB, 10);
  
  Mirf.cePin = 8;
  Mirf.csnPin = 7; 
  Mirf.spi = &MirfHardwareSpi;
  Mirf.init();
  Mirf.setRADDR((byte *)"sensor_2"); //Le nom du capteur de la sonde
  Mirf.payload = 6; // paquet 6 octets
  Mirf.channel = 0; // Canal 0
  Mirf.config();
  Mirf.setTADDR((byte*)"recepteur"); //Nom du recepteur

  Serial.println( "nRF24L01+ initialisation ...." );
}

void loop()
{
  senddata();
}
 
void senddata()
{
    while(Mirf.isSending()){
    }
    
    sensors.requestTemperatures();
    float tSDB = sensors.getTempC(SDB);
    
    lcd.clear();
    lcd.setCursor(2, 0);
    lcd.print("Temp ");
    lcd.setCursor(0, 1);
    lcd.print(">");
    lcd.setCursor(2, 1);
    lcd.print(tSDB);
    lcd.print("C");
    
    float packet[6]; // paquet 6 octets
    Serial.print("packet  ");
    Serial.println(packet[6]);
    
    packet[1] = probeId; // identifiant sonde
    Serial.print("probe  ");
    Serial.println(packet[1]);
    
    packet[5] = tSDB; // valeur temp
    Serial.print("temp  ");
    Serial.println(packet[5]);
    
    Mirf.send((byte *) &packet); // envoie des données
    while(Mirf.isSending());
    delay(5000); // toute les 5 secondes
}

Code du recepteur:

#include <Wire.h>
#include <SPI.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4); // ecran lcd 4x20
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
  
 void setup()
{
  Serial.begin(9600);
  Serial.println("Demarrage");
  lcd.init();  // initialize the lcd 
  lcd.backlight();
  
    Mirf.cePin = 8; // CE sur D8
  Mirf.csnPin = 7; // CSN sur D7
  Mirf.spi = &MirfHardwareSpi;
  Mirf.init();
  Mirf.setRADDR((byte *)"recepteur"); //Le nom du serveur 
  Mirf.payload = 6;
  Mirf.channel = 0; // Canal 0
  Mirf.config();
 
  Serial.println( "nRF24L01+ initialisation ..." );
}
  
void loop()
{   
  //Si des données sont dispo
  if(Mirf.dataReady())
  {
    float datas[6];     // on stocke les données
    Mirf.getData((byte *) &datas);  
    
    //On affiche via le port série 
    Serial.print("Sonde =");
    Serial.println(datas[1]);
    Serial.print("Temp =");
    Serial.println(datas[5]);
    
    lcd.setCursor(0, 0); // affichage sur LCD
    lcd.print("Sonde ");
    lcd.print(datas[1]);
    lcd.setCursor(0, 1);
    lcd.print("Temp ");
    lcd.print(datas[5]);
}   
}

Bonjour,
Sujet à supprimer car double emploi avec nRF24L01 & tableau de données - Français - Arduino Forum

You cannot delete your own topics in this board.

Re,

subsix:
You cannot delete your own topics in this board.

Demande à Jean François, le meilleur des modérateurs :slight_smile: