Код застрял после инициализации с помощью 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 марта
@lostresearch, 👍1
Обсуждение1 ответ
Это может быть ваша среда, у меня здесь много проблем с радиочастотными помехами при передаче, соседний радиолюбитель и распространение Wi-Fi, похоже, усугубляют проблему. Я добился некоторого успеха в создании реле RFM69, но в основном перешел на Wi-Fi, используя модули ESP8266, поскольку они намного надежнее для связи.
Спасибо тебе, @Bra1n. На самом деле я сейчас в лаборатории. Мне удалось установить связь с радиоприемником RFM9x LoRa от Adafruit в той же самой среде, однако наш прототип RFM69 вообще не поддерживал связь huhuhu., @lostresearch
- Lora SX1278 через короткое время перестает принимать
- Использование библиотеки Arduino LMIC с возможностью прерывания
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
пожалуйста, никаких скриншотов текста... добавьте фактический текст ... некоторые люди здесь не могут просматривать изображения, @jsotola
Я удивлен, что вы получаете что-то надежное через преобразователь уровня на частоте 1 МГц. Там, где вы указали, что это не имеет отношения к делу, я удалил этот ответ. Никаких других предложений для вас нет., @timemage