Bonjour,
Dans le cadre d’un projet, nous essayons de faire communiquer deux NRF24L01+ à l’aide d’un code trouvé sur une revue : Hackable magazine no16.
Nous avons adapté le code à la Wemos D1 mais celui-ci ne semble pas fonctionner et nous sommes à court de solution !
Est-ce que quelqu’un aurait la gentillesse de voir si dans ce code il y a quelque chose qui cloche, vraisemblablement à partir de la ligne 56 car le print renvoie bien l’état du bouton ?
/* Croquis paru dans Hackable Magazine No 16
Janvier et Fevrier 2017
émetteur
*/
#include <SPI.h>
#include <RF24.h>
#define PIN_CS D1
#define PIN_CE D2
RF24 radio(PIN_CE, PIN_CS);
const uint64_t pipeA =
0xF0F0F0F0E1LL;
const uint64_t pipeB =
0xF0F0F0F0D2LL;
const int buttonPin = D4; // the number of the pushbutton pin
int buttonState = 0; // variable for reading the pushbutton status
const int ledTemoin = D3; // the number of the LED temoin
int cpt = 0;
void setup() {
pinMode(buttonPin, INPUT_PULLUP); // initialize the pushbutton pin as an input:
pinMode(ledTemoin, OUTPUT);
digitalWrite(ledTemoin, LOW); // initialize the ledTemoin
Serial.begin(57600);
Serial.println(F("Go go go !"));
Serial.println("ok go");
radio.begin();
// Activer l'accuse de reception
radio.enableAckPayload();
// L'accuse de reception est dynamique
radio.enableDynamicPayloads();
// ------------- reglage des amplificateurs PA et LNA s'ils sont presents -----------
// reglage de l'amplificateur
radio.setPALevel(RF24_PA_LOW);
//radio.setPALevel(RF24_PA_HIGH);
// reglage des canaux/pipes
radio.openWritingPipe(pipeB);
radio.openReadingPipe(1, pipeA);
// En ecoute
radio.startListening();
}
void loop() {
// Arret ecoute
radio.stopListening();
Serial.println(F("Envoi"));
buttonState = digitalRead(buttonPin);// read the state of the pushbutton value:
Serial.println(buttonState);
// Utilisation de buttonState comme message
unsigned long message = buttonState;
// Envoi
if (!radio.write(&message, sizeof(unsigned long) )) {
Serial.println(F("erreur"));
}
// Mise en ecoute
radio.startListening();
Serial.println("mise en ecoute");
// Enregistement du debut du delai
unsigned long debut = micros();
boolean timeout = false;
// Tant que rien a lire
while (!radio.available()) {
// 600ms de passe, on abandonne
if (micros() - debut > 600000) {
timeout = true;
Serial.print("break");
break;
}
}
// abandon pour cause de delai ecoule ?
if (timeout) {
Serial.println(F("Erreur : timeout."));
} else {
// variable pour le message recu
unsigned long reception;
// lecture des donnees recues
radio.read(&reception, sizeof(unsigned long));
// enregistrement du moment de la reception
unsigned long fin = micros();
// Si le message a ete correctement recu la led s'allume
if (message == 0 && message == reception) {
Serial.println("reception OK");
digitalWrite(ledTemoin, HIGH);
delay(2000);
digitalWrite(ledTemoin, LOW);
cpt ++;
}
}
delay(100);
}
Peut-être dans les ports utilisés ?
Merci
Christian