我額外使用了 SoftwareSerial.h 將 uart 通訊口獨立出來,以免跟 Arduino IDE 的監看視窗打架
並且我將 "接收端的地址+波段" 與 "數據" 分隔開來
發射端代碼(同樣發射一個byte)
#include "SoftwareSerial.h"
#define AUX 5
#define LED 13
SoftwareSerial mySerial(2, 3); // RX, TX
const byte address[] = {0xEA,0x00,0x0D};
byte data = 0xBB; //預計傳送數據為 BB
void waitAUX();
void sendData1Byte (const byte* address, byte data);
void setup() {
Serial.begin(9600);
mySerial.begin(9600);
pinMode(AUX,INPUT);
pinMode(LED,OUTPUT);
waitAUX();
Serial.println("Start.");
}
void loop() {
pinMode(LED,!digitalRead(LED));
sendData1Byte (address, data); //傳送 1 Byte 的數據
delay(1500);
}
// ===== 等待 Lora 晶片不繁忙 =====
void waitAUX(){
while(!digitalRead(AUX));
delay(10);
}
// ===== sendData1Byte =====
void sendData1Byte (const byte* address, byte data){
waitAUX();
for(int i = 0; i < 3; i++){
mySerial.write(address[i]);
delay(2);
}
mySerial.write(data);
delay(2);
mySerial.flush();
waitAUX();
}
接收端代碼(亦改為使用SoftwareSerial.h)
#include "SoftwareSerial.h"
#define AUX 5
#define LED 13
SoftwareSerial mySerial(2, 3); // RX, TX
void waitAUX();
byte incomingByte = 0;
void setup() {
Serial.begin(9600);
mySerial.begin(9600);
pinMode(AUX,INPUT);
pinMode(LED,OUTPUT);
waitAUX();
Serial.println("Start.");
}
void loop() {
if (mySerial.available() > 0) {
incomingByte = mySerial.read();
Serial.println(incomingByte); (0xBB 十進制為 187)
digitalWrite(LED,!digitalRead(LED));
Serial.flush();
}
}
// ===== 等待 Lora 晶片不繁忙 =====
void waitAUX(){
while(!digitalRead(AUX));
delay(10);
}
接收端的串列埠監看視窗
接收端由 SX1278 Tx 端擷取到的數據
可以發現,接收端的 SX1278 接收到數據後,會直接僅將數據由 SX1278 Tx 發送出來,前面的"接收端的地址+波段" 並不會囊括在內
我的 Youtube 頻道,一定要訂閱
我將定期推出程式語言的新手教學影片