IoT|硬體|通訊|Arduino 使用 SoftwareSerial Library 與電腦通訊


介紹

UART
Arduino 硬件在0 pin 1 pin 口支持串行通信(電腦通過 USB 連接),其實是使用了一個(內置芯片)稱為 UART 的芯片。這種硬件允許 ATmega 即使正在進行其他任務時也能通信,只要serial64 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;
    }
  }
}

留言

這個網誌中的熱門文章

IoT|硬體|樹莓派|外接麥克風及喇叭設置

成長|語文|學習-英文 持續更新!