diff --git a/LORA_NACELLE.ino b/LORA_NACELLE.ino new file mode 100644 index 0000000..68f4219 --- /dev/null +++ b/LORA_NACELLE.ino @@ -0,0 +1,112 @@ +// Code contenu dans le module Lora Feather EMBARQUE dans la nacelle + +#include +#include + +//constantes pour ce module feather +#define RFM95_CS 8 +#define RFM95_RST 4 +#define RFM95_INT 3 + +//taille des paquets Lora envoyés à chaque émission +#define TAILLE_RADIOPACKET 200 +#define LED 13 + +// Définition de la fréquence +#define RF95_FREQ 434.0 +// Configuration +RH_RF95 rf95(RFM95_CS, RFM95_INT); + +//Fonction vidage de buffer série +void serialFlush(){ + pinMode(LED, OUTPUT); + while(Serial.available() > 0) { + char t = Serial.read(); + } +} + +void setup() +{ + pinMode(RFM95_RST, OUTPUT); + digitalWrite(RFM95_RST, HIGH); + while (!Serial); + Serial.begin(9600); + delay(100); + digitalWrite(RFM95_RST, LOW); + delay(10); + digitalWrite(RFM95_RST, HIGH); + delay(10); + while (!rf95.init()) { + while (1); + } + // Defaults after init are 434.0MHz, modulation GFSK_Rb250Fd250 + if (!rf95.setFrequency(RF95_FREQ)) { + //Serial.println("setFrequency failed"); + while (1); + + serialFlush(); + } + + rf95.setTxPower(23, false); //Puissance d'émission à 23 dBm + +} + +//variables servant à ne pas envoyer deux fois la même chaîne +int nb_envoi; +uint8_t radiopacket[TAILLE_RADIOPACKET]="null"; //Chaîne contenant la requête à envoyer à la nacelle +uint8_t radiopacket_tmp[TAILLE_RADIOPACKET]="null"; + +void loop() +{ + //DECLARATION VARIABLES et INITIALISATION + char caractere_lu = 0; //caractere à lire + int caractere_dispo =0; // nombre de caracteres dispo dans le buffer + int i_chaine = 0; //indique l'endroit où on doit écrire dans la chaîne + + memcpy(radiopacket_tmp,radiopacket,TAILLE_RADIOPACKET); + + //LECTURE DES DONNEES A ENVOYER AU SOL + caractere_dispo = Serial.available(); + + while(caractere_dispo > 0) //tant qu'il y a des caractères à lire + { + caractere_lu = Serial.read(); //on lit le caractère + radiopacket[i_chaine] = caractere_lu; + //Serial.print(caractere_lu); //puis on le renvoi à l’expéditeur tel quel + caractere_dispo = Serial.available(); //on relit le nombre de caractères dispo + i_chaine++; + } + radiopacket[TAILLE_RADIOPACKET-1] = 0; // marquage fin du packet + + //si la donnée reçu est différente de la précédente + if(memcmp(radiopacket,radiopacket_tmp,TAILLE_RADIOPACKET)!=0){ + nb_envoi = 0; + } + + //ENVOI DES DONNEES AU SOL + if (nb_envoi==0){ + rf95.send((uint8_t *)radiopacket, TAILLE_RADIOPACKET); + rf95.waitPacketSent(); + digitalWrite(LED, HIGH); + nb_envoi++; + } + + + //RECEPTION DES REQUETES PROVENANT DU SOL + uint8_t buf[RH_RF95_MAX_MESSAGE_LEN]; + uint8_t len = sizeof(buf); + if (rf95.waitAvailableTimeout(1000)) + { + if (rf95.recv(buf, &len)) + { + //ENVOI DE LA REQUETE VERS LA RASPBERRY + Serial.println((char*)buf); + } + } + digitalWrite(LED, LOW); + + delay(200); +} + + + -- libgit2 0.21.2