該程式碼中使用了 Serial.readBytes() 函式,並指定接收 2 Bytes
發送端(發送2 Bytes)
#include "SoftwareSerial.h"
#define LED 13
#define AUX 5
void waitAUX();
SoftwareSerial mySerial(2, 3); // RX, TX
byte incoming2Byte[2]={0xFF,0xFF}; /* buffer */
void setup() {
Serial.begin(9600);
mySerial.begin(9600);
pinMode(LED,OUTPUT);
pinMode(AUX,INPUT);
Serial.println("Start.");
}
void loop() {
waitAUX();
if (mySerial.available() > 0) { /*注意,這邊已改為 mySerial */
digitalWrite(LED,!digitalRead(LED));
mySerial.readBytes(incoming2Byte, 2); /* 將 2bytes 資料餵入 buffer */
Serial.print("incoming2Byte[0] : ");
Serial.println(incoming2Byte[0]); /* 第一個 byte 的數據 */
Serial.print("incoming2Byte[1] : ");
Serial.println(incoming2Byte[1]); /* 第二個 byte 的數據 */
Serial.flush();
mySerial.flush();
}
}
// ===== 等待 Lora 晶片不繁忙 =====
void waitAUX(){
while(!digitalRead(AUX));
delay(10);
}
接收端沿用之前的代碼如下
#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);
digitalWrite(LED,!digitalRead(LED));
Serial.flush();
}
}
// ===== 等待 Lora 晶片不繁忙 =====
void waitAUX(){
while(!digitalRead(AUX));
delay(10);
}
串列埠監看視窗
直接查看 SX1278 的 Tx 端口發送出來的數據
上方的接收端程式碼有個缺點,就是我們無法很簡易的將每一個 Byte 的資料獨立取出,這樣就失去了傳送多個 Bytes 的意義
故我修改了下程式碼,使其可以將 2Bytes 的資料獨立抓出來 (若有需要更多 Bytes 的獨立抓取,只要修改幾個小地方即可,在這我就不給出程式碼了)
改良版的接收端代碼(將收到的數據以 Byte 為單位獨立取出)
#include "SoftwareSerial.h"
#define AUX 5
#define LED 13
SoftwareSerial mySerial(2, 3); // RX, TX
void waitAUX();
byte incoming2Byte[2]={0x12,0x34}; /* buffer */
void setup() {
Serial.begin(9600);
mySerial.begin(9600);
pinMode(AUX,INPUT);
pinMode(LED,OUTPUT);
waitAUX();
Serial.println("Start.");
}
void loop() {
waitAUX();
if (mySerial.available() > 0) {
mySerial.readBytes(incoming2Byte, 2); /* 將 2bytes 資料餵入 buffer */
Serial.print("incoming2Byte[0] : ");
Serial.println(incoming2Byte[0]); /* 第一個 byte 的數據 */
Serial.print("incoming2Byte[1] : ");
Serial.println(incoming2Byte[1]); /* 第二個 byte 的數據 */
digitalWrite(LED,!digitalRead(LED));
Serial.flush();
}
}
// ===== 等待 Lora 晶片不繁忙 =====
void waitAUX(){
while(!digitalRead(AUX));
delay(10);
}
串列埠監看視窗
我將定期推出程式語言的新手教學影片