Modifications

Sauter à la navigation Sauter à la recherche
4 029 octets ajoutés ,  30 octobre 2018 à 17:57
Ligne 83 : Ligne 83 :     
First, the script will includes all the needed libraries.
 
First, the script will includes all the needed libraries.
 +
 +
<syntaxhighlight lang="c">
 +
#include <SPI.h>
 +
#include <RH_RF69.h>
 +
</syntaxhighlight>
 +
 +
<syntaxhighlight lang="c">
 +
#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);
 +
</syntaxhighlight>
 +
 +
<syntaxhighlight lang="c">
 +
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");
 +
}
 +
</syntaxhighlight>
 +
 +
<syntaxhighlight lang="c">
 +
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
 +
  }
 +
}
 +
</syntaxhighlight>
 +
 +
<syntaxhighlight lang="c">
 +
void Blink(byte PIN, byte DELAY_MS, byte loops) {
 +
  for (byte i=0; i<loops; i++)  {
 +
    digitalWrite(PIN,HIGH);
 +
    delay(DELAY_MS);
 +
    digitalWrite(PIN,LOW);
 +
    delay(DELAY_MS);
 +
  }
 +
}
 +
</syntaxhighlight>
    
== Compile and upload ==
 
== Compile and upload ==
29 836

modifications

Menu de navigation