Bonjour,
Je tente d'envoyer un tableau de 4 valeurs via NRF24L01.
J'ait utilisé des bouts de code ici et là et tenté d'arranger à ma sauce.
Pour la partie emission :
#include <OneWire.h>
#include <DallasTemperature.h>
#include <SparkFunTSL2561.h>
#include <Wire.h>
#define ONE_WIRE_BUS 2
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
SFE_TSL2561 light;
boolean gain; // Gain setting, 0 = X1, 1 = X16;
unsigned int ms; // Integration ("shutter") time in milliseconds
int sensorPin = A0;
int sensorUV = 0;
int capteur[4];
void setup(void)
{
Mirf.cePin = 8;
Mirf.csnPin = 7;
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.channel = 1;
Mirf.payload = sizeof(byte) * 4;
Mirf.config();
Mirf.setTADDR((byte *) "nrf02"); // Adresse de transmission
Mirf.setRADDR((byte *) "nrf01"); // Adresse de réception
pinMode(3, INPUT_PULLUP);
// start serial port
Serial.begin(9600);
sensors.begin();
light.begin();
unsigned char ID;
gain = 0;
unsigned char time = 2;
light.setTiming(gain, time, ms);
light.setPowerUp();
}
void loop(void)
{
// Surveillance de la lampe a UV
sensorUV = analogRead(sensorPin);
//capteur[0] = sensorUV & 0xFF;
capteur[0] = sensorUV;
if (sensorUV < 100) {
Serial.println("Verifier le fonctionnement de la lampe UV");
}
// Surveillance du niveau d eau
int sensorVal = digitalRead(3);
//capteur[1] = sensorVal & 0xFF;
capteur[1] = sensorVal ;
if (sensorVal == 0) {
Serial.println("Attention : il manque de l eau");
}
// Affichage de la temperature
sensors.requestTemperatures(); // Send the command to get temperatures
Serial.print("Temperature: ");
// Affichage de l ensoleillement
Serial.print(sensors.getTempCByIndex(0));
Serial.println(" degres");
capteur[2] = (sensors.getTempCByIndex(0)) * 10;
unsigned int data0, data1;
if (light.getData(data0, data1))
{
double lux; // Resulting lux value
boolean good; // True if neither sensor is saturated
// Perform lux calculation:
good = light.getLux(gain, ms, data0, data1, lux);
// Print out the results:
Serial.print(" Luminosite: ");
Serial.print(lux);
capteur[3] = lux ;
Serial.println(" Lux ");
}
for ( int i = 0 ; i < 4 ; i++ ) {
Serial.println(capteur[i]);
}
Mirf.send((byte *) &capteur);
while (Mirf.isSending()) {
delay(5);
}
delay(10000);
}
et pour ma partie reception :
/**
* Exemple de code pour la bibliothèque Mirf – Serveur d'envoi de tableau de valeurs
*/
#include <SPI.h> // Pour la communication via le port SPI
#include <Mirf.h> // Pour la gestion de la communication
#include <nRF24L01.h> // Pour les définitions des registres du nRF24L01
#include <MirfHardwareSpiDriver.h> // Pour la communication SPI
void setup() {
Serial.begin(9600);
Mirf.cePin = 8; // Broche CE sur D9
Mirf.csnPin = 7; // Broche CSN sur D10
Mirf.spi = &MirfHardwareSpi; // On veut utiliser le port SPI hardware
Mirf.init(); // Initialise la bibliothéque
Mirf.channel = 1; // Choix du cannal de communication (128 canaux disponible, de 0 à 127)
Mirf.payload = sizeof(int) * 4; // Taille d'un message (maximum 32 octets)
Mirf.config(); // Sauvegarde la configuration dans le module radio
Mirf.setTADDR((byte *) "nrf01"); // Adresse de transmission
Mirf.setRADDR((byte *) "nrf02"); // Adresse de réception
Serial.println("Go !");
}
void loop() {
int capteur[4];
if(Mirf.dataReady()){
Mirf.getData((byte *) &capteur); // Réception du paquet
Serial.print("capteur[0]=");
Serial.println(capteur[0]); // Affiche le message
Serial.print("capteur[1]=");
Serial.println(capteur[1]);
Serial.print("capteur[2]=");
Serial.println(capteur[2]);
Serial.print("capteur[3]=");
Serial.println(capteur[3]);
}
}
Pas d'erreurs de compilation... c'est dejà ça mais à la reception mes valeurs sont toujours à 0 !
Là, je séche... un piste, un coup de main serait bienvenue svp
Merci