// Cansat-Belgium - Mission 1 - Radio Receiver // // RFM69HCW Receiver --to--> Serial connexion // // Send the following data to the serial connexion: // [DATA](len=38,RSSI=-60):15853|7778505|22.96|98842.41|21.92; // [DATA](len=,RSSI=) // // Based on RadioHead69_RawDemo_RX // // -*- mode: C++ -*- // Example sketch showing how to create a simple messageing client // with the RH_RF69 class. RH_RF69 class does not provide for addressing or // reliability, so you should only use RH_RF69 if you do not need the higher // level messaging abilities. // It is designed to work with the other example rf69_server. // Demonstrates the use of AES encryption, setting the frequency and modem // configuration #include #include /************ Radio Setup ***************/ // Change to 434.0 or other frequency, must match RX's freq! #define RF69_FREQ 433.0 #if defined (__AVR_ATmega32U4__) // Feather 32u4 w/Radio #define RFM69_CS 8 #define RFM69_INT 7 #define RFM69_RST 4 #define LED 13 #endif #if defined(ARDUINO_SAMD_FEATHER_M0) // Feather M0 w/Radio #define RFM69_CS 8 #define RFM69_INT 3 #define RFM69_RST 4 #define LED 13 #endif #if defined (__AVR_ATmega328P__) // Feather 328P w/wing #define RFM69_INT 3 // #define RFM69_CS 4 // #define RFM69_RST 2 // "A" #define LED 13 #endif #if defined(ESP8266) // ESP8266 feather w/wing #define RFM69_CS 2 // "E" #define RFM69_IRQ 15 // "B" #define RFM69_RST 16 // "D" #define LED 0 #endif #if defined(ESP32) // ESP32 feather w/wing #define RFM69_RST 13 // same as LED #define RFM69_CS 33 // "B" #define RFM69_INT 27 // "A" #define LED 13 #endif /* Teensy 3.x w/wing #define RFM69_RST 9 // "A" #define RFM69_CS 10 // "B" #define RFM69_IRQ 4 // "C" #define RFM69_IRQN digitalPinToInterrupt(RFM69_IRQ ) */ /* WICED Feather w/wing #define RFM69_RST PA4 // "A" #define RFM69_CS PB4 // "B" #define RFM69_IRQ PA15 // "C" #define RFM69_IRQN RFM69_IRQ */ // Singleton instance of the radio driver RH_RF69 rf69(RFM69_CS, RFM69_INT); int16_t packetnum = 0; // packet counter, we increment per xmission void setup() { Serial.begin(115200); //while (!Serial) { delay(1); } // wait until serial console is open, remove if not tethered to computer pinMode(LED, OUTPUT); pinMode(RFM69_RST, OUTPUT); digitalWrite(RFM69_RST, LOW); Serial.println("[INFO] CanSat Belgium Radio Receiver (Radio to Serial)!"); // manual reset digitalWrite(RFM69_RST, HIGH); delay(10); digitalWrite(RFM69_RST, LOW); delay(10); if (!rf69.init()) { Serial.println("[ERROR] RFM69 radio init failed"); while (1); } Serial.println("[INFO] RFM69 radio init OK!"); // Defaults after init are 434.0MHz, modulation GFSK_Rb250Fd250, +13dbM (for low power module) // No encryption if (!rf69.setFrequency(RF69_FREQ)) { Serial.println("[ERROR] setFrequency failed"); } // If you are using a high power RF69 eg RFM69HW, you *must* set a Tx power with the // ishighpowermodule flag set like this: rf69.setTxPower(20, true); // range from 14-20 for power, 2nd arg must be true for 69HCW // The encryption key has to be the same as the one in the server uint8_t key[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08}; rf69.setEncryptionKey(key); pinMode(LED, OUTPUT); Serial.print("[INFO] RFM69 radio @"); Serial.print((int)RF69_FREQ); Serial.println(" MHz"); } void loop() { if (rf69.available()) { // Should be a message for us now uint8_t buf[RH_RF69_MAX_MESSAGE_LEN]; uint8_t len = sizeof(buf); if (rf69.recv(buf, &len)) { if (!len) return; buf[len] = 0; Serial.print("[DATA](len=" ); Serial.print(len); Serial.print(",RSSI="); Serial.print(rf69.lastRssi(), DEC); Serial.print(")"); Serial.print((char*)buf); // Data send by remote is supposed to contains the \r\n // Send a reply! uint8_t data[] = "ACK"; rf69.send(data, sizeof(data)); rf69.waitPacketSent(); Blink(LED, 50, 1); //blink LED 1 times, 50ms between blinks } } else { Blink(LED, 50, 3); //blink LED 3 times, 50ms between blinks } } void Blink(byte PIN, byte DELAY_MS, byte loops) { for (byte i=0; i