bonjour a tous
je viens chercher de l'aide auprès de vous car je n'arrive pas a solutionner.
je fait un topo sur mon projet:
Une télécommande basé sur des modules nrf24L01 qui fonctionne très bien sur le principe de "j'envoie un message, le récepteur le reçoit et allume la sortie correspondante" --> sur ce point la base fonctionne.
maintenant le premier problème est le suivant:
je cherche n'utilisé qu'un seul bouton poussoir pour faire une action (un HIGH et ensuite un LOW) sur une sortie j'ai donc écrit un petit bout de code de manière à faire fonctionner le systeme sur ce principe.
tout se passe bien quand le récepteur reçois le message la sortie passe a 1.
Lorsque j'appuie sur le bouton une nouvelle fois le récepteur s'aiguille bien vers la partie else du code mais valide d'elle même la phrase en rouge du programme sans que je n'appuie sur le BP et je ne comprend pas pourquoi....
Mon deuxième soucis réside dans la création d'un accusé de réception (phrase en vers) qui devrait être renvoyé vers l’émetteur afin de me dire si oui ou non le message est arrivé au bout mais la aussi pour le moment l’émetteur me marque systématiquement message non reçu. pour la partie ELSE je souhaite aussi avoir une condition de temps à savoir par exemple 4 secondes pour etre sur d'avoir le temps de retour du message
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 void loop() { byte message[8]; if(Mirf.dataReady()){ Mirf.getData(message); // Réception du paquet if (strcmp((char*) message, "VPCPMNT") == 0) { digitalWrite(LEDRX, HIGH); delay(1100); digitalWrite(LEDRX, LOW); byte message[8] = "OK-MPAN"; Serial.println("envoie du message au recepteur !"); Mirf.send(message); while(Mirf.isSending()); // On attend la fin de l'envoi digitalWrite(interne, HIGH); delay(1100); digitalWrite(interne, LOW); Serial.println("fin de l'envoie"); delay (1100); int a; a = digitalRead(relaisp); if (a == 0) { digitalWrite(buzzer, HIGH); Serial.println("signalisation!"); delay(2100); digitalWrite(buzzer, LOW); digitalWrite(relaisp, HIGH); Serial.println("montée "); Serial.println("pret - "); delay (2100); } else { digitalWrite(buzzer, HIGH); Serial.println("signalisation !"); delay(1100); digitalWrite(buzzer, LOW); delay(2100); if (strcmp((char*) message, "VPCPMNT") == 0) { } Serial.println("validation !"); delay(1100); digitalWrite(buzzer, HIGH); delay(3000); digitalWrite(buzzer, LOW); digitalWrite(relaisp, LOW); Serial.println("descente "); delay(1100); Serial.println("pret "); } delay (2100); } } }
le code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 void loop() { // Lit l'état des boutons if (digitalRead(PIN_P) == LOW) { Serial.println("Signal P !"); LCD.begin(16,2); LCD.clear(); LCD.print("commande"); LCD.setCursor(0,1); LCD.print("envoie en cours"); delay(1100); byte message[8] = "VPCPMNT"; Serial.println("envoie du message au recepteur !"); Mirf.send(message); while(Mirf.isSending()); delay (100); Mirf.getData(message); if (strcmp((char*) message, "OK-MPAN")== 0 ) { LCD.begin(16,2); LCD.clear(); LCD.print("commande "); LCD.setCursor(0,1); LCD.print("reception ok"); Serial.println("message recu"); } else { LCD.begin(16,2); LCD.clear(); LCD.print("commande "); LCD.setCursor(0,1); LCD.print("erreur reception"); Serial.println("message non recu"); } delay (100);
est ce que quelqu'un peut me filer un bon coup de pouce?
les cartes utilisées sont une UNO et une nano
merci à tous
Partager