Устройство LoRa Sx1278 не получает и не отправляет данныеC++

Программы на C++. Форум разработчиков
Anonymous
Устройство LoRa Sx1278 не получает и не отправляет данные

Сообщение Anonymous »

У меня есть два устройства.
  • LoRa sx1278 с Arduino mega 2560 (Устройство 1, отправитель).
  • LoRa sx1278 с Arduino UNO (Устройство 2, приемник).
Когда я загружаю приведенный ниже код в оба, иногда они работают правильно, а иногда схема зависает, LoRa не отправляет/не получает и внезапно останавливается, хотя в аппаратное обеспечение не вносилось никаких изменений.
Это рабочий процесс:

Устройство 1: отправляет 5 сообщений, а затем переключается в режим приема для получения данных.

Устройство 2: принимает 5 сообщений, а затем переключается в режим отправки данных.
Устройство 1 код:
#include
#include

const long frequency = 433E6; // LoRa frequency (adjust according to your region)

int sendCount = 0; // To count sent messages
bool isSending = true; // Flag for sending/receiving state

void setup() {
Serial.begin(9600);
while (!Serial);

if (!LoRa.begin(frequency)) {
Serial.println("Starting LoRa failed!");
while (1);
}
Serial.println("LoRa Sender/Receiver");

// Initially, set the node to send messages
switchToSending();
}

void loop() {
if (isSending) {
sendMessages(5); // Send 5 messages
switchToReceiving(); // Switch to receiving after sending
} else {
receiveMessages(); // Receive counter messages
}
}

void sendMessages(int count) {
for (int i = 0; i < count; i++) {
String message = "Message " + String(i + 1);
LoRa.beginPacket();
LoRa.print(message);
LoRa.endPacket();
Serial.println("Sent: " + message);
delay(1000); // Delay between messages
}
sendCount += count;
}

void receiveMessages() {
int packetSize = LoRa.parsePacket();
if (packetSize) {
// Read received packet
String receivedMessage = "";
while (LoRa.available()) {
receivedMessage += (char)LoRa.read();
}
Serial.println("Received: " + receivedMessage);

// Process the received message
if (receivedMessage.startsWith("Counter")) {
Serial.println("Received counter message from Receiver.");
}
}
}

void switchToSending() {
Serial.println("Switching to sending mode...");
isSending = true;
}

void switchToReceiving() {
Serial.println("Switching to receiving mode...");
isSending = false;
}

Код устройства 2:
#include
#include

const long frequency = 433E6; // LoRa frequency (adjust according to your region)

int receivedMessageCount = 0; // Counter for received messages
int counter = 0; // Counter to track messages sent back to the transmitter
bool isSendingCounter = false; // Flag to determine if the receiver should start sending counter messages

void setup() {
Serial.begin(9600);
while (!Serial);

if (!LoRa.begin(frequency)) {
Serial.println("Starting LoRa failed!");
while (1);
}
Serial.println("LoRa Receiver/Sender");
}

void loop() {
if (!isSendingCounter) {
receiveMessages(); // In receiving mode, waiting for 5 messages
} else {
sendCounterMessage(); // Start sending counter messages after receiving all 5
}
}

void receiveMessages() {
int packetSize = LoRa.parsePacket();
if (packetSize) {
// Read received packet
String receivedMessage = "";
while (LoRa.available()) {
receivedMessage += (char)LoRa.read();
}

// Print received message
Serial.println("Received: " + receivedMessage);
receivedMessageCount++; // Increment received message count

// Check if all 5 messages are received
if (receivedMessageCount >= 5) {
Serial.println("All 5 messages received. Switching to counter sending mode...");
isSendingCounter = true; // Switch to sending counter messages
counter = 0; // Reset counter
}
}
}

void sendCounterMessage() {
String message = "Counter " + String(counter);
LoRa.beginPacket();
LoRa.print(message);
LoRa.endPacket();
Serial.println("Sent: " + message);
counter++;
delay(1000); // Delay between counter messages

// After sending 5 counter messages, switch back to receiving mode
if (counter >= 5) {
isSendingCounter = false;
receivedMessageCount = 0; // Reset received message count
Serial.println("Switching back to receiving mode...");
}
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... nding-data

Вернуться в «C++»