Robofun 機器人論壇

標題: (急問)Arduino如何利用Rx、Tx接發RS232訊號 [打印本頁]

作者: PeaceIn    時間: 2012-5-28 14:16
標題: (急問)Arduino如何利用Rx、Tx接發RS232訊號
各位好:
想一起和大家討論,如何利用Arduino
Uno的腳位Rx、Tx來接發RS232訊號呢?

我已經有用一個範例程式測試過,如下:
void setup()
{
  Serial.begin(9600); //串列埠功能使用初始化
}

void loop()
{
  char c;
  c = Serial.read();   //讀取電腦經由串列埠傳送的資料
  Serial.println("HiHi");   //將收到的資料再回傳給電腦
  delay(1000);         //延遲1秒
}


另外硬體連接方式如下:
Uno USB孔接電腦COM16
Uno Rx、Tx腳位分別連接RS232之Tx、Rx,之後將RS232連接電腦COM8

測試方法如下:

利用arduino-1.0,
程式"成功"燒入進去後(此時連接在COM16),
然後連接上RS232腳位,
打開Serial Monitor,
看到螢幕成功顯示"HiHi"後,在Tools欄將Serial Port改成COM8,
此時若也成功顯示"HiHi",則表示Rx、Tx腳位可發送RS232訊號(此時Tx燈閃爍)。

測試結果:
程式成功燒入進去,打開Serial Monitor,看到螢幕成功顯示"HiHi",
但在接上RS232腳位,將Serial Port改成COM8時,
Serial Monitor顯示的卻變成是亂碼。

結果討論:
由測試顯示,Uno至少可以傳送RS232訊號,但讀值卻是不正確的,
且此時驗亦無法知道如何接收RS232訊號。

所以~~~想請教大家:
如何成功利用Rx、Tx腳位"傳送"及"接收"RS232訊號並正確顯示出來呢?

感恩大家
作者: sinocgt    時間: 2012-5-28 17:31
你是不是要寫成這樣?
就是收到甚麼就回傳甚麼.

void setup() {

    Serial.begin(9600); // start serial communication at 9600bps
}

void loop() {
  char ser_char;
    if( Serial.available() > 0) { // if data is available to read
     ser_char = Serial.read(); // read it and store it in 'ser_char'
     Serial.write(ser_char);
    }
}
作者: PeaceIn    時間: 2012-6-4 18:43
試了一下,改成COM8時還是出現亂碼呢,
但有趣的是如果輸入前加上90909...(多長都可以),XXXX,90909...(多長都可以),
中間的數值就會顯示正常呢!!! 怎麼去掉這問題呢?(有檢查過線路都接的很穩)。
但這還只是單方向而已(Tx),有辦法RX也可以傳送正常嗎??
感恩sinocgt^^
作者: mzw2008    時間: 2012-6-4 23:22
USB出來是模擬成虛擬的COM, 當然可以直接接電腦

但若是直接接RXTX...那是TTL 訊號規格...需要MAX232之類的IC才能轉換成能直接接電腦COM的訊號規格
會出現亂碼是正常的
作者: PeaceIn    時間: 2012-6-12 16:41
感恩大家的回覆!!! 目前已準備買RS232轉TTL,
我會試著努力後再和大家說明結果,感恩~~^^
作者: PeaceIn    時間: 2012-7-22 17:00
目前打算直接將伺服馬達寫為接收HIGH&LOW,RS232轉TTL為備案^^




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2