diff --git a/2k17/Arduino_DUE_LoRa/Arduino_DUE_LoRa.ino b/2k17/Arduino_DUE_LoRa/Arduino_DUE_LoRa.ino new file mode 100644 index 0000000..614d143 --- /dev/null +++ b/2k17/Arduino_DUE_LoRa/Arduino_DUE_LoRa.ino @@ -0,0 +1,149 @@ +#include +#include +#include + +//correspond au modele de la trame +//la station est définie sur 1 octet (poid faible) +#define MAX_STATION 0x03 +uint16_t temp_IS=0; +uint16_t temp_H=0; +bool res; + +//structure de la trame (établie en fonction de notre protocole) +typedef struct +{ + uint16_t IS; + uint16_t TS; + uint16_t TD; + uint16_t D1; + uint16_t D2; + uint16_t D3; +}trame; + +trame tab_trames[MAX_STATION]; //tableau des trames par micro-statiton + +void setup() +{ + Serial.begin(9600); + Serial1.begin(9600); + Serial.println("Passerelle LoRa :"); + +//on démarre une instance de LoRa avec en parametre une fréquence et on bloque si on ne peux pas se connecter + do + { + res = LoRa.begin(868E6); + if(res == false) + { + Serial.println("Le LoRa ne peux pas établir de connexion!"); + } + } + while(res == false); +} + +void loop() +{ + trame traitement_trame; + int packetSize = LoRa.parsePacket(); //On range dans cette variable la taille du packet + uint16_t trame_recu[6]; + int id; + int i=0; + if (packetSize > 0) + { + Serial.println("Réception des trames :"); + while (LoRa.available()) //on se met sur écoute et on lit le paquet qu'on cast en char + { + trame_recu[i]=LoRa.read() << 8; + trame_recu[i] |= LoRa.read(); + Serial.print(trame_recu[i]);// read sert a lire les données du registre du LoRa + Serial.print("."); + i++; + } + + Serial.println(" "); + + /*cas acceptés: + * temp_IS != traitement_trame.IS && temp_H != traitement_trame.H + * temp_IS != traitement_trame.IS && temp.H == traitement_trame.H + * temp_IS == traitement_trame.IS && temp.h != traitement_trame.H + * cas reffusé : + * temp_IS == traitement_trame.IS && temp.h == traitement_trame.H + */ + if(tab_trames[trame_recu[0]-1].IS == trame_recu[0] && tab_trames[trame_recu[0]-1].TS == trame_recu[1]) + { + Serial.println("trame déja recu"); + } + else + { + //on stocke les valeurs reçue de la trame dans la structure + traitement_trame.IS=trame_recu[0]; + traitement_trame.TS=trame_recu[1]; + traitement_trame.TD=trame_recu[2]; + traitement_trame.D1=trame_recu[3]; + traitement_trame.D2=trame_recu[4]; + traitement_trame.D3=trame_recu[5]; + + //On remplace les valeurs temp pour pouvoir les comparer avec les futures trames + temp_H = traitement_trame.TS; + temp_IS = traitement_trame.IS; + tab_trames[temp_IS-1]=traitement_trame; + + envoyer_trame(temp_IS-1); + } + } +} + + +/* + * fonction envoyer par TX/RX les trames recues precedemment + * On convertit en string le tableau de trame puis on le concatene + * avec les en-tetes basique du protocole HTTP + * + * CODE : + * + * Variables : + * création d'une en_tete String + * incréments + * tab_trames + * tableau de caractères + * IMPOSSIBILITE : print ou write peux afficher les strings, + * cependant on utilisera un char pour la surdéfinition de print + * + * Instructions : + * for(i=0;i