IoT|硬體|通訊|Arduino 使用 SoftwareSerial Library 與電腦通訊
介紹
UART
Arduino 硬件在0 pin 和1 pin 口支持串行通信(電腦通過 USB 連接),其實是使用了一個(內置芯片)稱為 UART 的芯片。這種硬件允許 ATmega 即使正在進行其他任務時也能通信,只要serial的64 byte緩存有其他的空間。
SoftwareSerial
使用 SoftwareSerial Library 可以在 Arduino 的任何數字引腳上進行通信,因此軟件端口數可以擴展,並且波特率可達115200bps。有個叫Mikal Hart的傢伙編寫了NewSoftSerial library,這個庫改進了SoftwareSerial Library,優點更多,因此之後的版本都是基於這個庫的。這種其實是軟件模擬通信的,具有很多局限性。
範例程式:選擇不同 baud rate 與設備通訊
#include <SoftwareSerial.h>
SoftwareSerial DLSerial(10, 11); // RX,TX
int cammand;
int baudChoose;
void setup() {
Serial.begin(9600);
DLSerial.begin(9600);
}
void loop() {
String s = "";
while (Serial.available()) {
char c = Serial.read();
if (c != '\n') {
s += c;
}
delay(5); // 沒有延遲的話 UART 串口速度會跟不上Arduino的速度,會導致資料不完整
}
String value;
if (s != "") {
cammand = (s.substring(0, 2)).toInt();
value = (s.substring(3, 22));
switch (cammand) {
case 10: // 'baud':
Serial.println(F("you choose [9600]"));
Serial.end();
DLSerial.end();
delay(500);
Serial.begin(9600);
DLSerial.begin(9600);
break;
case 11: // 'baud':
Serial.println(F("you choose [19200]"));
Serial.end();
DLSerial.end();
delay(500);
Serial.begin(19200);
DLSerial.begin(19200);
break;
}
}
}
留言
張貼留言