From 17f34671e0ffd89edd847051c9ebfa1dc1524857 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 11 Apr 2017 13:53:22 +0200 Subject: [PATCH] code module lora embarque --- LORA_nacelle.ino | 136 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+), 0 deletions(-) create mode 100644 LORA_nacelle.ino diff --git a/LORA_nacelle.ino b/LORA_nacelle.ino new file mode 100644 index 0000000..27adbca --- /dev/null +++ b/LORA_nacelle.ino @@ -0,0 +1,136 @@ +// Code contenu dans le module Lora Feather EMBARQUE dans la nacelle + + +#include +#include + +/* for feather m0 */ +#define RFM95_CS 8 +#define RFM95_RST 4 +#define RFM95_INT 3 + +#define TAILLE_RADIOPACKET 20 +#define LED 13 + +// Change to 434.0 or other frequency, must match RX's freq! +#define RF95_FREQ 434.0 +// Singleton instance of the radio driver +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); // peut être à enlever avec rasp.. + Serial.begin(9600); + delay(100); + //Serial.println("Feather LoRa TX Test!"); + // manual reset + digitalWrite(RFM95_RST, LOW); + delay(10); + digitalWrite(RFM95_RST, HIGH); + delay(10); + while (!rf95.init()) { + //Serial.println("LoRa radio init failed"); + while (1); + } + //Serial.println("LoRa radio init completed"); + // Defaults after init are 434.0MHz, modulation GFSK_Rb250Fd250, +13dbM + if (!rf95.setFrequency(RF95_FREQ)) { + //Serial.println("setFrequency failed"); + while (1); + + serialFlush(); + } + + //Serial.print("Set Freq to: "); Serial.println(RF95_FREQ); + // Defaults after init are 434.0MHz, 13dBm, Bw = 125 kHz, Cr = 4/5, Sf = 128chips/symbol, CRC on + // The default transmitter power is 13dBm, using PA_BOOST. + // If you are using RFM95/96/97/98 modules which uses the PA_BOOST transmitter pin, then + // you can set transmitter powers from 5 to 23 dBm: + rf95.setTxPower(23, false); +} + +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; + } + + + //Serial.println("Sending..."); delay(10); + + //ENVOI DES DONNEES AU SOL + if (nb_envoi==0){ + rf95.send((uint8_t *)radiopacket, TAILLE_RADIOPACKET); + rf95.waitPacketSent(); + //Serial.println("TX done"); delay(10); + digitalWrite(LED, HIGH); + nb_envoi++; + } + + + //RECEPTION DES REQUETES PROVENANT DU SOL + uint8_t buf[RH_RF95_MAX_MESSAGE_LEN]; + uint8_t len = sizeof(buf); + //Serial.println("Waiting for reply..."); delay(10); + if (rf95.waitAvailableTimeout(1000)) + { + // Should be a reply message for us now + if (rf95.recv(buf, &len)) + { + //ENVOI DE LA REQUETE VERS LA RASPBERRY + Serial.println((char*)buf); + + //Serial.print("RSSI: "); + //Serial.println(rf95.lastRssi(), DEC); + + } + else + { + //Serial.println("Receive failed"); + } + } + else + { + //Serial.println("No reply"); + } + digitalWrite(LED, LOW); + + delay(200); +} + + -- libgit2 0.21.2