Bonsoir,
je débute avec Arduino et je viens demander votre aide car je n' arrive pas a faire fonctionner mes modules nrf24l01: j' arrive très bien à transmettre un message entre les deux module donc ce n' est pas un problème au niveau des composants , mais lorsque j' intègre le code dans mon code final, l' Arduino se stoppe au bout d' un certain temps et le programme ne veut plus avancer. Cela ce passe même quand l' émetteur n' envoie pas de signal.
auriez vous des idées de a quoi cela pourrait être dus ?
voici le code du recepteur ( où se trouve le problème )
il s' agit d' un systeme d' arrosage automatique ( deso si le code n' est pas très bien organisé et assez long , et ce n' est pas la version finale).
#include "SPI.h"
#include "nRF24L01.h"
#include "RF24.h"
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#define pinCE 7 // On associe la broche "CE" du NRF24L01 à la sortie digitale D7 de l'arduino
#define pinCSN 8 // On associe la broche "CSN" du NRF24L01 à la sortie digitale D8 de l'arduino
#define tunnel1 "PIPE1" // On définit un premier "nom de tunnel" (5 caractères), pour pouvoir envoyer des données à l'autre NRF24
#define tunnel2 "PIPE2" // On définit un second "nom de tunnel" (5 caractères), pour pouvoir recevoir des données de l'autre NRF24
RF24 radio(pinCE, pinCSN); // Instanciation du NRF24L01
// Instanciation d'un objet pour contrôler le servomoteur
const byte adresses[][6] = {tunnel1, tunnel2}; // Tableau des adresses de tunnel, au format "byte array"
// Instanciation du NRF24L01
int mesure;
// Mise au format "byte array" du nom du tunnel
int etatvanne;
int Temperature;
int CHPstart;
long prevMillis1 = 0;
long prevMillis3 = 0;
long prevMillis = 0;
long prevMillis2 = 0;
int delaylcd = 30000;
int delayboutons = 200;
int delaycapteur = 2000;
int delayexecution = 3000;
LiquidCrystal_I2C lcd(0x27, 16, 2);//pin analogiques 4 et 5
int PinAnalogiqueHumiditeS = A1;
int CHS = 6;
int hsolS; //Humidite su sol, mesure analogique
int hsolP;
int pompe_a_eau = 2;
int lampe = 5;
#define photoresistancein A0
long vphotoresistancein ;
int boutonM = 10;
int constBM = 0;
int trucM = 1;
int precedantM;
int boutonL = 9;
int constBL = 0;
int trucL = 1;
int precedantL;
int boutonAS = 3;
int constBAS = 0;
int trucAS = 1;
int precedantAS;
int trucAS2 = 0;
int boutonAP = 4;
int constBAP = 0;
int trucAP = 1;
int precedantAP;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
lcd.init();
radio.begin(); // Initialisation du module NRF24
radio.openWritingPipe(adresses[0]); // Ouverture du "tunnel1" en ÉCRITURE
radio.openReadingPipe(1, adresses[1]); // Ouverture du "tunnel2" en LECTURE
radio.setPALevel(RF24_PA_MIN); // Séle
pinMode(PinAnalogiqueHumiditeS, INPUT); //pin A0 en entrée analogique
pinMode(CHS, OUTPUT); //pin 3 en entrée numérique
//pin A0 en entrée analogique
//pompe a eau
pinMode(pompe_a_eau, OUTPUT);
//photoresistancs
pinMode(photoresistancein, INPUT);
///interrupteurs
pinMode(boutonAP, INPUT);
pinMode(boutonAS, INPUT);
pinMode(boutonL, INPUT);
pinMode(boutonM, INPUT);
pinMode(lampe, OUTPUT);
pinMode(photoresistancein, INPUT);
digitalWrite(pompe_a_eau, HIGH);
digitalWrite(lampe, HIGH);
lcd.noBacklight();
}
void loop() {
delay(5);
constBAS = digitalRead(boutonAS);
constBAP = digitalRead(boutonAP);
constBM = digitalRead(boutonM);
constBL = digitalRead(boutonL);
if ( constBM != precedantM) {
precedantM = constBM;
lcd.backlight();
prevMillis1 = millis();
}
if ( constBAS != precedantAS) {
precedantAS = constBAS;
lcd.backlight();
prevMillis1 = millis();
}
if ( constBAP != precedantAP) {
precedantAP = constBAP;
lcd.backlight();
prevMillis1 = millis();
}
if ( constBL != precedantL) {
precedantL = constBL;
lcd.backlight();
prevMillis1 = millis();
}
if (millis() - prevMillis1 > delaylcd) {
prevMillis1 = millis();
lcd.noBacklight();
}
radio.stopListening();
radio.write(&etatvanne, sizeof(etatvanne));
radio.startListening(); // On commence par arrêter le mode envoi, pour pouvoir réceptionner des données
if (radio.available()) { // On regarde si une donnée a été reçue
Serial.println("message"); // Si une donné est en attente de lecture, on va la lire
radio.read(&mesure, sizeof(mesure)); // Lecture des données reçues, une par une // … et ajustement de l'angle du servomoteur à chaque fois
}
if (millis() - prevMillis > delaycapteur) {
prevMillis = millis();
Serial.println(mesure); // avec une petite pause, avant de reboucler
Temperature = ((mesure - 214.5) / 10.5);
lcd.setCursor(1, 0);
lcd.print(Temperature);
lcd.setCursor(7, 0);
lcd.print("DEGRES");
}
if (millis() - prevMillis2 > delayboutons) {
prevMillis2 = millis();
if (constBM == 1) {
digitalWrite(CHS, LOW);
if ( trucM == 0) {
trucM = 1 ;
lcd.clear();
lcd.print("Mode Auto:");
lcd.setCursor(0, 1);
lcd.print("OFF");
delay(2000);
lcd.clear();
}
if (constBL == 1) {
digitalWrite(lampe, HIGH);
}
else {
digitalWrite(lampe, LOW);
}
if (constBAS == 1) {
if (trucAS == 1) {
trucAS = 0;
digitalWrite(pompe_a_eau, HIGH);
lcd.clear();
}
}
else {
lcd.clear();
digitalWrite(pompe_a_eau, LOW);
lcd.print("Arrosage des");
lcd.setCursor(0, 1);
lcd.print("S. en cours");
trucAS = 1;
}
//////////////////////////////
if (constBAP == 1) {
etatvanne = 1;
lcd.clear();
lcd.print(" Arrosage du");
lcd.setCursor(0, 1);
lcd.print("Potager en cours");
trucAP = 1;
}
else {
etatvanne = 0;
if (trucAP == 1) {
lcd.clear();
trucAP = 0;
}
}
////////////////////////////
}
if (constBM == 0) {
if ( trucM == 1) {
trucM = 0;
lcd.clear();
lcd.print("Mode Auto:");
lcd.setCursor(0, 1);
lcd.print("ON");
delay(2000);
lcd.clear();
}
if (constBL == 0) {
if ( trucL == 0) {
trucL = 1;
lcd.clear();
lcd.print("Lumiere Auto");
lcd.setCursor(0, 1);
lcd.print("OFF");
delay(2000);
lcd.clear();
}
digitalWrite(lampe, HIGH);
}
if (constBL == 1) {
if ( trucL == 1) {
trucL = 0;
lcd.clear();
lcd.print("Lumiere Auto");
lcd.setCursor(0, 1);
lcd.print("ON");
delay(2000);
lcd.clear();
}
}
if (constBAS == 0) {
if ( trucAS == 0) {
trucAS = 1;
lcd.clear();
lcd.print("Arrosage Semi");
lcd.setCursor(0, 1);
lcd.print("Auto : OFF");
delay(2000);
lcd.clear();
}
}
if (constBAS == 1) {
if ( trucAS == 1) {
trucAS = 0;
lcd.clear();
lcd.print("Arrosage Semis");
lcd.setCursor(0, 1);
lcd.print("Auto : ON");
delay(2000);
lcd.clear();
}
}
}
// hsolS=analogRead(PinAnalogiqueHumiditeS);
// Serial.println(hsolS);
}
if (millis() - prevMillis3 > delayexecution) {
prevMillis3 = millis();
if (constBM == 0) {
if (constBL == 1) {
vphotoresistancein = analogRead(photoresistancein);
Serial.println(vphotoresistancein);
if ( (vphotoresistancein > 200) && (vphotoresistancein < 400) ) {
digitalWrite(lampe, LOW);
}
else {
digitalWrite(lampe, HIGH);
}
}
if (constBAS == 0) {
digitalWrite(CHS, LOW);
}
if (constBAS == 1) {
digitalWrite(CHS, HIGH);
hsolS = analogRead(PinAnalogiqueHumiditeS);
Serial.println(hsolS);
if (hsolS > 350 ) {
for (int t = 0; t < 5; t++) {
hsolS = analogRead(PinAnalogiqueHumiditeS);
Serial.println(hsolS);
if (hsolS > 350 ) {
lcd.clear();
lcd.write("arrosage des");
lcd.setCursor(0, 1) ;
lcd.write("semis");
Serial.println("arrosage des semis");
digitalWrite(pompe_a_eau, LOW);
delay(2000);
digitalWrite(pompe_a_eau, HIGH);
lcd.clear();
}
}
}
delay(15);
digitalWrite(CHS, LOW);
}
}
}
}
Merci d' avance