带有Arduino的SX1278 LoRa无法发送或接收超过1个字节

时间:2020-10-10 13:02:02

标签: arduino lora

我正在用LoRa进行一个项目,该项目需要控制4个伺服器,但是通过LoRa通讯,所以我发送了它,就像第一个伺服器应该发送0-180的值,对于下一个伺服器我发送了181-361并继续4个伺服!但是不幸的是,它无法发送255个值,而我猜这是1个字节,如果我尝试发送255个以上的值(例如256个),它将接收为0,而257接收为1,然后继续。有没有通过初始化命令来增加它的命令或方法?因为我知道Lora可以发送到63个字节,所以我将在下面附加代码(用简单的代码简化):

发件人代码(TX)(Arduino UNO):

    #include <SPI.h>
    #include <LoRa.h>
    
    int val = 256;
    void setup() {
      Serial.begin(9600);
      while (!Serial);
    
      Serial.println("LoRa Sender");
    
      if (!LoRa.begin(433E6)) {
        Serial.println("Starting LoRa failed!");
        while (1);
      }
    }
    
    void loop() {
      Serial.print("Sending packet: ");
    
      // send packet
      LoRa.beginPacket();
      LoRa.print(val);
      LoRa.endPacket();
    
      delay(500);
    }

接收器代码(RX)(Arduino Mega):

   #include <SPI.h>
   #include <LoRa.h>
   
   #define LORA_SS 53
   #define LORA_RST 9
   #define LORA_DIO0 8
   String val;
   
   void setup() {
     pinMode(LORA_SS, OUTPUT);
     digitalWrite(LORA_SS, HIGH);
   
     LoRa.setPins(LORA_SS, LORA_RST, LORA_DIO0);
     Serial.begin(9600);
     
     while (!Serial);
   
     Serial.println("LoRa Receiver");
   
     if (!LoRa.begin(433E6)) {
       Serial.println("Starting LoRa failed!");
       while (1);
     }
   }
   
   void loop() {
     // try to parse packet
     int packetSize = LoRa.parsePacket();
     if (packetSize) {
       // received a packet
       Serial.print("Received packet '");
   
       // read packet
       while (LoRa.available()) {
         val = LoRa.read();
        
       }
      
       Serial.print(val.toInt());
       // print RSSI of packet
       Serial.print("' with RSSI ");
       Serial.println(LoRa.packetRssi());
     }
   }

接收器的输出:

Received packet '0' with RSSI -5

1 个答案:

答案 0 :(得分:0)

您在val中的int val = LoRa.read();仅在while循环内有一个scope。因此,当您在范围之外访问它时,您将获得0。

val的声明移到while循环之外。

int val;
while (LoRa.available()) {
   val = LoRa.read();
}
Serial.print(val.toInt());