Blame view

LORA_NACELLE.ino 2.77 KB
0e66794b   omahieux   Mise à jour des f...
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
  // Code contenu dans le module Lora Feather EMBARQUE dans la nacelle
  
  #include <SPI.h>
  #include <RH_RF95.h>
  
  //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);
  }