Код застрял после инициализации с помощью RFM69

Я работаю над RFM69, подключенным к Arduino Uno. В настоящее время я смог инициализировать RFM69, используя код, который я изменил из Интернета. Однако моя часть Приемника всегда сталкивается с ошибкой. Иногда он не выполняется, а иногда застревает в цикле инициализации. Вчера моему Передатчику удалось нормально работать, но сегодня иногда я также наблюдал ту же проблему с моим Приемником.

Вот моя проводка.

Код, который я использую как для передатчика, так и для приемника

#include <SPI.h>
#include <RH_RF69.h>

/************ Настройка радио ***************/

// Переключитесь на 434.0 или другую частоту, должна соответствовать частоте RX!
#define RF69_FREQ 434.0

#define RFM69_CS 10
#define RFM69_INT 2
#define RFM69_RST 9
#define LED 13

// Одноэлементный экземпляр радиоприемника
RH_RF69 rf69(RFM69_CS, RFM69_INT);

int16_t packetnum = 0;  // счетчик пакетов, мы увеличиваем на xmission

void setup() 
{
  Serial.begin(9600);
  //while (!Serial) { задержка (1); } // подождите, пока откроется последовательная консоль, удалите, если не привязан к компьютеру

  pinMode(LED, OUTPUT);     
  pinMode(RFM69_RST, OUTPUT);
  //digitalWrite(RFM69_RST, НИЗКИЙ);
  //с этого момента я добавил его
  digitalWrite (RFM69_RST, HIGH);
  delay (100);
  digitalWrite (RFM69_RST, LOW);
  delay (100);

  Serial.println("LoRa Daughter Board (RFM69) - Transmitter");
  Serial.println();

  // ручной сброс
  digitalWrite(RFM69_RST, HIGH);
  delay(10);
  digitalWrite(RFM69_RST, LOW);
  delay(10);
  
  if (!rf69.init()) {
    Serial.println("RFM69 Initialization Failed!");
    while (1);
  }
  Serial.println("RFM69 Initialization Success!");
  // Значения по умолчанию после инициализации: 434,0 МГц, модуляция GFSK_Rb250Fd250, +13 дБм (для модуля с низким энергопотреблением)
  // Нет шифрования
  if (!rf69.setFrequency(RF69_FREQ)) {
    Serial.println("setFrequency failed");
  }

  // Если вы используете высокомощный RF69, например RFM69HW, вы * должны * установить мощность передачи с помощью
  // флаг ishighpowermodule устанавливается следующим образом:
  //rf69.setTxPower(20, true); // диапазон от 14-20 для мощности, 2-й аргумент должен быть истинным для 69HCW

  // Ключ шифрования должен быть таким же, как на сервере
  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("RFM69 Frequency: ");  Serial.print((int)RF69_FREQ);  Serial.println(" MHz");
}



void loop() {
  delay(1000);  // Подождите 1 секунду между передачами, здесь также можно "спать"!

  char radiopacket[20] = "Hello World #";
  itoa(packetnum++, radiopacket+13, 10);
  Serial.print("Sending "); Serial.println(radiopacket);
  
  // Отправить сообщение!
  rf69.send((uint8_t *)radiopacket, strlen(radiopacket));
  rf69.waitPacketSent();

  // Теперь ждите ответа
  uint8_t buf[RH_RF69_MAX_MESSAGE_LEN];
  uint8_t len = sizeof(buf);

  if (rf69.waitAvailableTimeout(500))  { 
    // Теперь для нас должно быть ответное сообщение   
    if (rf69.recv(buf, &len)) {
      Serial.print("Got a reply: ");
      Serial.println((char*)buf);
      Blink(LED, 50, 3); // мигание светодиода 3 раза, 50 мс между миганиями
    } else {
      Serial.println("Receive failed");
    }
  } else {
    Serial.println("No reply, is another RFM69 listening?");
  }
}

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);
  }
}

Вот скриншоты результатов Снимок сделан вчера: 16 марта

Снимок сделан сегодня: 17 марта

, 👍1

Обсуждение

пожалуйста, никаких скриншотов текста... добавьте фактический текст ... некоторые люди здесь не могут просматривать изображения, @jsotola

Я удивлен, что вы получаете что-то надежное через преобразователь уровня на частоте 1 МГц. Там, где вы указали, что это не имеет отношения к делу, я удалил этот ответ. Никаких других предложений для вас нет., @timemage


1 ответ


-1

Это может быть ваша среда, у меня здесь много проблем с радиочастотными помехами при передаче, соседний радиолюбитель и распространение Wi-Fi, похоже, усугубляют проблему. Я добился некоторого успеха в создании реле RFM69, но в основном перешел на Wi-Fi, используя модули ESP8266, поскольку они намного надежнее для связи.

,

Спасибо тебе, @Bra1n. На самом деле я сейчас в лаборатории. Мне удалось установить связь с радиоприемником RFM9x LoRa от Adafruit в той же самой среде, однако наш прототип RFM69 вообще не поддерживал связь huhuhu., @lostresearch