Commit 0e66794bc4e5d297dbe8b90ee17d7fc850fb6732

Authored by omahieux
1 parent ab97b27f

Mise à jour des fichiers Readme,lora_NACELLE,lora_terrestre

Showing 1 changed file with 112 additions and 0 deletions   Show diff stats
LORA_NACELLE.ino 0 → 100644
... ... @@ -0,0 +1,112 @@
  1 +// Code contenu dans le module Lora Feather EMBARQUE dans la nacelle
  2 +
  3 +#include <SPI.h>
  4 +#include <RH_RF95.h>
  5 +
  6 +//constantes pour ce module feather
  7 +#define RFM95_CS 8
  8 +#define RFM95_RST 4
  9 +#define RFM95_INT 3
  10 +
  11 +//taille des paquets Lora envoyés à chaque émission
  12 +#define TAILLE_RADIOPACKET 200
  13 +#define LED 13
  14 +
  15 +// Définition de la fréquence
  16 +#define RF95_FREQ 434.0
  17 +// Configuration
  18 +RH_RF95 rf95(RFM95_CS, RFM95_INT);
  19 +
  20 +//Fonction vidage de buffer série
  21 +void serialFlush(){
  22 + pinMode(LED, OUTPUT);
  23 + while(Serial.available() > 0) {
  24 + char t = Serial.read();
  25 + }
  26 +}
  27 +
  28 +void setup()
  29 +{
  30 + pinMode(RFM95_RST, OUTPUT);
  31 + digitalWrite(RFM95_RST, HIGH);
  32 + while (!Serial);
  33 + Serial.begin(9600);
  34 + delay(100);
  35 + digitalWrite(RFM95_RST, LOW);
  36 + delay(10);
  37 + digitalWrite(RFM95_RST, HIGH);
  38 + delay(10);
  39 + while (!rf95.init()) {
  40 + while (1);
  41 + }
  42 + // Defaults after init are 434.0MHz, modulation GFSK_Rb250Fd250
  43 + if (!rf95.setFrequency(RF95_FREQ)) {
  44 + //Serial.println("setFrequency failed");
  45 + while (1);
  46 +
  47 + serialFlush();
  48 + }
  49 +
  50 + rf95.setTxPower(23, false); //Puissance d'émission à 23 dBm
  51 +
  52 +}
  53 +
  54 +//variables servant à ne pas envoyer deux fois la même chaîne
  55 +int nb_envoi;
  56 +uint8_t radiopacket[TAILLE_RADIOPACKET]="null"; //Chaîne contenant la requête à envoyer à la nacelle
  57 +uint8_t radiopacket_tmp[TAILLE_RADIOPACKET]="null";
  58 +
  59 +void loop()
  60 +{
  61 + //DECLARATION VARIABLES et INITIALISATION
  62 + char caractere_lu = 0; //caractere à lire
  63 + int caractere_dispo =0; // nombre de caracteres dispo dans le buffer
  64 + int i_chaine = 0; //indique l'endroit où on doit écrire dans la chaîne
  65 +
  66 + memcpy(radiopacket_tmp,radiopacket,TAILLE_RADIOPACKET);
  67 +
  68 + //LECTURE DES DONNEES A ENVOYER AU SOL
  69 + caractere_dispo = Serial.available();
  70 +
  71 + while(caractere_dispo > 0) //tant qu'il y a des caractères à lire
  72 + {
  73 + caractere_lu = Serial.read(); //on lit le caractère
  74 + radiopacket[i_chaine] = caractere_lu;
  75 + //Serial.print(caractere_lu); //puis on le renvoi à l’expéditeur tel quel
  76 + caractere_dispo = Serial.available(); //on relit le nombre de caractères dispo
  77 + i_chaine++;
  78 + }
  79 + radiopacket[TAILLE_RADIOPACKET-1] = 0; // marquage fin du packet
  80 +
  81 + //si la donnée reçu est différente de la précédente
  82 + if(memcmp(radiopacket,radiopacket_tmp,TAILLE_RADIOPACKET)!=0){
  83 + nb_envoi = 0;
  84 + }
  85 +
  86 + //ENVOI DES DONNEES AU SOL
  87 + if (nb_envoi==0){
  88 + rf95.send((uint8_t *)radiopacket, TAILLE_RADIOPACKET);
  89 + rf95.waitPacketSent();
  90 + digitalWrite(LED, HIGH);
  91 + nb_envoi++;
  92 + }
  93 +
  94 +
  95 + //RECEPTION DES REQUETES PROVENANT DU SOL
  96 + uint8_t buf[RH_RF95_MAX_MESSAGE_LEN];
  97 + uint8_t len = sizeof(buf);
  98 + if (rf95.waitAvailableTimeout(1000))
  99 + {
  100 + if (rf95.recv(buf, &len))
  101 + {
  102 + //ENVOI DE LA REQUETE VERS LA RASPBERRY
  103 + Serial.println((char*)buf);
  104 + }
  105 + }
  106 + digitalWrite(LED, LOW);
  107 +
  108 + delay(200);
  109 +}
  110 +
  111 +
  112 +
... ...