#include #include #include //Déclaration des constantes #define RFM95_CS 5 //M5 LoRa #define RFM95_DIO0 36 //M5 LoRa RH_RF95 rf95(RFM95_CS, RFM95_DIO0); uint8_t state; uint8_t txbuf[RH_RF95_MAX_MESSAGE_LEN]; uint8_t rxbuf[RH_RF95_MAX_MESSAGE_LEN]; uint8_t rxlen=RH_RF95_MAX_MESSAGE_LEN; uint8_t RxSeq; //Constantes d'états #define E0 0 #define E1 1 #define E2 2 #define E3 3 //Constante de type #define TYPE_DATA 1 #define TYPE_ACK 2 //Constate d'adresse #define LOCAL_ADDR 0 //Constantes d'infos champ de trame #define F_S_ADDR 0 //Adresse source #define F_D_ADDR 1 //Adresse destination #define F_TYPE 2 //Type #define F_NUM_SEQ 3 //Numéro de séquence #define F_MIN_PAYLOAD 4 //Indice du debut de payload #define F_MAX_PAYLOAD 5 //Indice de fin de payload #define TAILLE_ACK 4 //Taille de la trame void setup() { M5.begin(); M5.Power.begin(); Serial.println("====Recepteur CAP4===="); M5.Lcd.println("====Recepteur CAP4===="); delay(3000); if(!rf95.init()){ Serial.println("Echec de la mise en place"); M5.Lcd.println("Echec de la mise en place"); } else{ Serial.println("Mise en place reussie !!!"); M5.Lcd.println("Mise en place reussie !!!"); rf95.setModemConfig(RH_RF95::Bw125Cr45Sf128); rf95.setFrequency(867.8); state=E0; //Serial.println("Boucle principale"); //M5.Lcd.println("Boucle principale"); RxSeq=255; delay(1000); } } void loop() { switch(state){ case E0: //Serial.println("Mode Reception"); //M5.Lcd.println("Mode Reception"); rf95.setModeRx(); state=E1; break; case E1: if(rf95.recv(rxbuf, &rxlen)){ if((rxbuf[F_TYPE]==TYPE_DATA) && (rxbuf[F_D_ADDR]==LOCAL_ADDR)){ //Réception d'un ACK et pour le récepteur state=E2; } else{ state=E0; } } break; case E2: if(RxSeq!=rxbuf[F_NUM_SEQ]){ M5.Lcd.printf("===Message Recu===\n"); M5.Lcd.printf("Recu de [%02X]\n",rxbuf[F_S_ADDR]); RxSeq=rxbuf[F_NUM_SEQ]; Serial.printf("[%d] ", RxSeq); M5.Lcd.printf("[%d] ", RxSeq); Serial.printf("DATA de %d octets :", rxlen); M5.Lcd.printf("DATA de %d octets :", rxlen); Serial.println(); M5.Lcd.println(); for(int i=0;i