bonjour a tous
je viens trouver de l'aide auprès de vous car je sèche vraiment et je n'arrive pas a me dépatouille de ça
J'ai écrit un programme pour faire une télécommande nrf, ça fonctionne en émission réception etc sur ce point la c'est parfait.
en revanche il y as deux point qui ne fonctionne pas....
le premier mon écran LCD je n'ai rien qui s'affiche (le rétroéclairage fonctionne) mais j'ai utiliser les pin A0 à A5 je pense qu'il doit y avoir le type de sortie a déclarer
le deuxième c'est ma divergence en OU j'aimerai que le récepteur me renvoie un accusé de réception et que sur l'émetteur ça me disent si oui ou non le message est arrivé
de ce style la
j'ai essayé de bricoler a base de if et else dans le programme mais j'ai systématiquement du orange ou du rouge donc je désespère....Code:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- if (digitalRead(PIN_AD2) == LOW) { Serial.println("Signal AD !"); LCD.begin(16,2); //on initialise la communication avec 16 colonnes et deux lignes LCD.clear(); // on efface l'écran LCD.print("commande AD2"); // on écrit un message LCD.setCursor(0,1); //on passe à la ligne suivante LCD.print("envoie en cours"); // on finit d'écrire delay (1100); byte message[8] = "VPCADD2"; Serial.println("Signal ADD2 !"); Mirf.send(message); // On envoie le message circuit AD2 Serial.println("envoie du message au recepteur !"); while(Mirf.isSending()); // On attend la fin de l'envoi -------------------------------------------------------------------------------------fonction à rajouter "si le recepteur renvoie le OK-ADD2 message on écrit sur le LCD message reçu" "si le recepteur ne renvoie rien au bout d'un Temps donné on ecrit sur le LCD pas de message reçu et on retourne au debut du programme" -------------------------------------------------------------------------------------fonction à rajouter LCD.begin(16,2); //on initialise la communication avec 16 colonnes et deux lignes LCD.clear(); // on efface l'écran LCD.print("commande AD2"); // on écrit un message LCD.setCursor(0,1); //on passe à la ligne suivante LCD.print("fin d'envoie"); // on finit d'écrire Serial.println("fin de l'envoie"); ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Je met mon code en fin de topic et si quelqu'un peut m'aider je le remercie d'avance
DD91
code complet
Code:#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 #include <LiquidCrystal.h> // on importe la bibliothèque LCD const byte PIN_P = 5; const byte PIN_AD1 = 4; const byte PIN_AD2 = 3; const byte PIN_LEDRX = A0; LiquidCrystal LCD(A0,A1,A2,A3,A4,A5); // on active l'ecran void setup() { Serial.begin(9600); LCD.begin(16,2); //on initialise la communication avec 16 colonnes et deux lignes LCD.clear(); // on efface l'écran LCD.print("bonjour"); // on écrit un message LCD.clear(); // on efface l'écran LCD.print("Valise 2019,"); // on écrit un message LCD.setCursor(0,1); //on passe à la ligne suivante LCD.print("PRET"); // on finit d'écrire pinMode(PIN_P, INPUT_PULLUP); pinMode(PIN_AD1, INPUT_PULLUP); pinMode(PIN_AD2, INPUT_PULLUP); pinMode(PIN_LEDRX, OUTPUT); Mirf.cePin = 9; // Broche CE sur D9 Mirf.csnPin = 10; // 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 canal de communication (128 canaux disponibles, de 0 à 127) Mirf.payload = 8; // Taille d'un message (maximum 32 octets) Mirf.config(); // Sauvegarde la configuration dans le module radio Mirf.setTADDR((byte *) "nrf02"); // Adresse de transmission Mirf.setRADDR((byte *) "nrf01"); // Adresse de réception Serial.println("Testeur pret -"); } void loop() { // Lit l'état des boutons if (digitalRead(PIN_Panto) == LOW) { Serial.println("Signal Panto !"); LCD.begin(16,2); //on initialise la communication avec 16 colonnes et deux lignes LCD.clear(); // on efface l'écran LCD.print("commande panto"); // on écrit un message LCD.setCursor(0,1); //on passe à la ligne suivante LCD.print("envoie en cours"); // on finit d'écrire delay(1100); byte message[8] = "VPCPMNT"; Serial.println("envoie du message au recepteur !"); Mirf.send(message); // On envoie le message d'action while(Mirf.isSending()); // On attend la fin de l'envoi LCD.begin(16,2); //on initialise la communication avec 16 colonnes et deux lignes LCD.clear(); // on efface l'écran LCD.print("commande "); // on écrit un message LCD.setCursor(0,1); //on passe à la ligne suivante LCD.print("fin d'envoie"); // on finit d'écrire Serial.println("fin de l'envoie"); delay(100); Serial.println("en attente de relachement bouton"); LCD.begin(16,2); //on initialise la communication avec 16 colonnes et deux lignes LCD.clear(); // on efface l'écran LCD.print("commande "); // on écrit un message LCD.setCursor(0,1); //on passe à la ligne suivante LCD.print("relacher BP"); // on finit d'écrire while (digitalRead(PIN_P) == LOW) delay(100); LCD.begin(16,2); //on initialise la communication avec 16 colonnes et deux lignes LCD.clear(); // on efface l'écran LCD.print("fin d'action,"); // on écrit un message LCD.setCursor(0,1); //on passe à la ligne suivante LCD.print("Valise prete"); // on finit d'écrire Serial.println("emeteur pret -); } if (digitalRead(PIN_AD1) == LOW) { Serial.println("Signal AD !"); LCD.begin(16,2); //on initialise la communication avec 16 colonnes et deux lignes LCD.clear(); // on efface l'écran LCD.print("commande AD1"); // on écrit un message LCD.setCursor(0,1); //on passe à la ligne suivante LCD.print("envoie en cours"); // on finit d'écrire delay (1100); byte message[8] = "VPCAD1"; Serial.println("Signal AD1 !"); Mirf.send(message); // On envoie le message circuit AD1 Serial.println("envoie du message au recepteur !"); while(Mirf.isSending()); // On attend la fin de l'envoi LCD.begin(16,2); //on initialise la communication avec 16 colonnes et deux lignes LCD.clear(); // on efface l'écran LCD.print("commande AD1"); // on écrit un message LCD.setCursor(0,1); //on passe à la ligne suivante LCD.print("fin d'envoie"); // on finit d'écrire Serial.println("fin de l'envoie"); delay(100); Serial.println("en attente de relachement bouton"); LCD.begin(16,2); //on initialise la communication avec 16 colonnes et deux lignes LCD.clear(); // on efface l'écran LCD.print("commande AD1"); // on écrit un message LCD.setCursor(0,1); //on passe à la ligne suivante LCD.print("relacher BP"); // on finit d'écrire while (digitalRead(PIN_AD1) == LOW) delay(100); LCD.begin(16,2); //on initialise la communication avec 16 colonnes et deux lignes LCD.clear(); // on efface l'écran LCD.print("fin d'action,"); // on écrit un message LCD.setCursor(0,1); //on passe à la ligne suivante LCD.print("Valise prete"); // on finit d'écrire Serial.println("emeteur pret - "); } if (digitalRead(PIN_AD2) == LOW) { Serial.println("Signal AD !"); LCD.begin(16,2); //on initialise la communication avec 16 colonnes et deux lignes LCD.clear(); // on efface l'écran LCD.print("commande AD2"); // on écrit un message LCD.setCursor(0,1); //on passe à la ligne suivante LCD.print("envoie en cours"); // on finit d'écrire delay (1100); byte message[8] = "VPCADD2"; Serial.println("Signal ADD2 !"); Mirf.send(message); // On envoie le message circuit AD2 Serial.println("envoie du message au recepteur !"); while(Mirf.isSending()); // On attend la fin de l'envoi LCD.begin(16,2); //on initialise la communication avec 16 colonnes et deux lignes LCD.clear(); // on efface l'écran LCD.print("commande AD2"); // on écrit un message LCD.setCursor(0,1); //on passe à la ligne suivante LCD.print("fin d'envoie"); // on finit d'écrire Serial.println("fin de l'envoie"); delay(100); Serial.println("en attente de relachement bouton"); LCD.begin(16,2); //on initialise la communication avec 16 colonnes et deux lignes LCD.clear(); // on efface l'écran LCD.print("commande AD2"); // on écrit un message LCD.setCursor(0,1); //on passe à la ligne suivante LCD.print("relacher BP"); // on finit d'écrire while (digitalRead(PIN_AD2) == LOW) delay(100); LCD.begin(16,2); //on initialise la communication avec 16 colonnes et deux lignes LCD.clear(); // on efface l'écran LCD.print("fin d'action,"); // on écrit un message LCD.setCursor(0,1); //on passe à la ligne suivante LCD.print("Valise prete"); // on finit d'écrire Serial.println("emeteur pret - "); } }
-----