Commit 1c8cfea43b1465f4e08631ad5cf966369f0b0936
1 parent
17f34671
code module lora terrestre
Showing
1 changed file
with
157 additions
and
0 deletions
Show diff stats
... | ... | @@ -0,0 +1,157 @@ |
1 | +// Feather9x_RX | |
2 | +// -*- mode: C++ -*- | |
3 | +// Example sketch showing how to create a simple messaging client (receiver) | |
4 | +// with the RH_RF95 class. RH_RF95 class does not provide for addressing or | |
5 | +// reliability, so you should only use RH_RF95 if you do not need the higher | |
6 | +// level messaging abilities. | |
7 | +// It is designed to work with the other example Feather9x_TX | |
8 | +#include <SPI.h> | |
9 | +#include <RH_RF95.h> | |
10 | + | |
11 | + //for feather m0 | |
12 | +#define RFM95_CS 8 | |
13 | +#define RFM95_RST 4 | |
14 | +#define RFM95_INT 3 | |
15 | + | |
16 | +//taille des paquets Lora envoyés à chaque émission | |
17 | +#define TAILLE_RADIOPACKET 20 | |
18 | + | |
19 | +// Change to 434.0 or other frequency, must match RX's freq! | |
20 | +#define RF95_FREQ 434.0 | |
21 | +// Singleton instance of the radio driver | |
22 | +RH_RF95 rf95(RFM95_CS, RFM95_INT); | |
23 | +// Blinky on receipt | |
24 | +#define LED 13 | |
25 | + | |
26 | + | |
27 | + | |
28 | +//Fonction vidage de buffer série | |
29 | +void serialFlush(){ | |
30 | + pinMode(LED, OUTPUT); | |
31 | + while(Serial.available() > 0) { | |
32 | + char t = Serial.read(); | |
33 | + } | |
34 | +} | |
35 | + | |
36 | +void RAZradiopacket(uint8_t radiopacket[TAILLE_RADIOPACKET]){ | |
37 | + int j; | |
38 | + for(j=0;j<TAILLE_RADIOPACKET;j++){ | |
39 | + radiopacket[j] = '0'; | |
40 | + } | |
41 | +} | |
42 | + | |
43 | + | |
44 | + | |
45 | +void setup() | |
46 | +{ | |
47 | +pinMode(LED, OUTPUT); | |
48 | +pinMode(RFM95_RST, OUTPUT); | |
49 | +digitalWrite(RFM95_RST, HIGH); | |
50 | +while (!Serial); | |
51 | +Serial.begin(9600); | |
52 | +delay(100); | |
53 | +//Serial.println("Feather LoRa RX Test!"); | |
54 | +// manual reset | |
55 | +digitalWrite(RFM95_RST, LOW); | |
56 | +delay(10); | |
57 | +digitalWrite(RFM95_RST, HIGH); | |
58 | +delay(10); | |
59 | +while (!rf95.init()) { | |
60 | +Serial.println("LoRa radio init failed"); | |
61 | +while (1); | |
62 | +} | |
63 | +Serial.println("Projet IMA Ballon atmospherique "); | |
64 | +// Defaults after init are 434.0MHz, modulation GFSK_Rb250Fd250, +13dbM | |
65 | +if (!rf95.setFrequency(RF95_FREQ)) { | |
66 | +Serial.println("setFrequency failed"); | |
67 | +while (1); | |
68 | +serialFlush(); | |
69 | + | |
70 | +} | |
71 | +Serial.print("Set Freq to: "); Serial.println(RF95_FREQ); | |
72 | +// Defaults after init are 434.0MHz, 13dBm, Bw = 125 kHz, Cr = 4/5, Sf = 128chips/symbol, CRC on | |
73 | +// The default transmitter power is 13dBm, using PA_BOOST. | |
74 | +// If you are using RFM95/96/97/98 modules which uses the PA_BOOST transmitter pin, then | |
75 | +// you can set transmitter powers from 5 to 23 dBm: | |
76 | +rf95.setTxPower(23, false); | |
77 | +//RAZradiopacket(radiopacket_tmp); | |
78 | +//RAZradiopacket(radiopacket); | |
79 | +} | |
80 | + | |
81 | + | |
82 | +int nb_envoi; | |
83 | +uint8_t radiopacket[TAILLE_RADIOPACKET] ="null"; //Chaîne contenant la requête à envoyer à la nacelle | |
84 | +uint8_t radiopacket_tmp[TAILLE_RADIOPACKET]="null"; | |
85 | + | |
86 | +void loop() | |
87 | + { | |
88 | + //DECLARATION VARIABLES ET INITIALISATION | |
89 | + char caractere_lu = 0; //caractere à lire | |
90 | + int caractere_dispo = 0; // nombre de caracteres dispo dans le buffer | |
91 | + int i_chaine = 0; //indique l'endroit où on doit écrire dans la chaîne | |
92 | + | |
93 | + memcpy(radiopacket_tmp,radiopacket,TAILLE_RADIOPACKET); | |
94 | + | |
95 | + //LECTURE REQUETE SUR PORT SERIE "SOL" | |
96 | + caractere_dispo = Serial.available(); | |
97 | + | |
98 | + while(caractere_dispo > 0) //tant qu'il y a des caractères à lire | |
99 | + { | |
100 | + caractere_lu = Serial.read(); //on lit le caractère | |
101 | + radiopacket[i_chaine] = caractere_lu; | |
102 | + Serial.print(caractere_lu); //puis on le renvoi à l’expéditeur tel quel | |
103 | + caractere_dispo = Serial.available(); //on relit le nombre de caractères dispo | |
104 | + i_chaine++; | |
105 | + } | |
106 | + radiopacket[i_chaine] = 0; // marquage fin du packet | |
107 | + | |
108 | + //si la donnée reçu est différente de la précédente | |
109 | + if(memcmp(radiopacket,radiopacket_tmp,TAILLE_RADIOPACKET)!=0){ | |
110 | + Serial.print("\nRequete differente\n"); | |
111 | + nb_envoi = 0; | |
112 | + } | |
113 | + | |
114 | + | |
115 | + //ENVOI REQUETE | |
116 | + if (nb_envoi==0){ | |
117 | + rf95.send((uint8_t *)radiopacket, sizeof(radiopacket)); | |
118 | + Serial.print("Envoi commande\n"); | |
119 | + nb_envoi++; | |
120 | + Serial.print("Nb_envoi:"); | |
121 | + Serial.println(nb_envoi); | |
122 | + //radiopacket[0] = '0'; | |
123 | + //RAZradiopacket(radiopacket); | |
124 | + } | |
125 | + | |
126 | + | |
127 | + | |
128 | + //LECTURE DONNEES VENANT DE LA NACELLE | |
129 | + if (rf95.available()) | |
130 | + { | |
131 | + // Should be a message for us now | |
132 | + uint8_t buf[RH_RF95_MAX_MESSAGE_LEN]; | |
133 | + uint8_t len = sizeof(buf); | |
134 | + if (rf95.recv(buf, &len)) | |
135 | + { | |
136 | + digitalWrite(LED, HIGH); | |
137 | + // RH_RF95::printBuffer("Received: ", buf, len); | |
138 | + Serial.print("Reception: "); | |
139 | + Serial.println((char*)buf); | |
140 | + serialFlush(); | |
141 | + | |
142 | + | |
143 | + | |
144 | + // Send a reply | |
145 | + //rf95.send(data, sizeof(data)); | |
146 | + //rf95.waitPacketSent(); | |
147 | + //Serial.println("Sent a reply"); | |
148 | + //digitalWrite(LED, LOW); | |
149 | + } | |
150 | + else | |
151 | + { | |
152 | + Serial.println("Receive failed"); | |
153 | + } | |
154 | + } | |
155 | + delay(200); | |
156 | +} | |
157 | + | ... | ... |