2011-12-03 30 views
2

我在使Arduino微控制器讀取RS-232信號時遇到了一些麻煩。我的項目需要我讀取空氣質量監測器輸出的數據。使用Arduino Duemilanove和Cutedigi RS-232接口的RS-232通信

我的部件:

要測試的串行通信是否正常工作,我發現Arduino的網站上的一些示例代碼。這是我運行確切的代碼:

//Created August 23 2006 
//Heather Dewey-Hagborg 
//http://www.arduino.cc 

#include <ctype.h> 

#define bit9600Delay 84 
#define halfBit9600Delay 42 
#define bit4800Delay 188 
#define halfBit4800Delay 94 

byte rx = 0; 
byte tx = 1; 
byte SWval; 

void setup() { 
    pinMode(rx,INPUT); 
    pinMode(tx,OUTPUT); 
    digitalWrite(tx,HIGH); 
    digitalWrite(13,HIGH); //turn on debugging LED 
    SWprint('h'); //debugging hello 
    SWprint('i'); 
    SWprint(10); //carriage return 
} 

void SWprint(int data) 
{ 
    byte mask; 
    //startbit 
    digitalWrite(tx,LOW); 
    delayMicroseconds(bit9600Delay); 
    for (mask = 0x01; mask>0; mask <<= 1) { 
     if (data & mask){ // choose bit 
      digitalWrite(tx,HIGH); // send 1 
     } 
     else{ 
      digitalWrite(tx,LOW); // send 0 
     } 
     delayMicroseconds(bit9600Delay); 
    } 
    //stop bit 
    digitalWrite(tx, HIGH); 
    delayMicroseconds(bit9600Delay); 
} 

int SWread() 
{ 
    byte val = 0; 
    while (digitalRead(rx)); 
    //wait for start bit 
    if (digitalRead(rx) == LOW) { 
     delayMicroseconds(halfBit9600Delay); 
     for (int offset = 0; offset < 8; offset++) { 
      delayMicroseconds(bit9600Delay); 
      val |= digitalRead(rx) << offset; 
     } 
     //wait for stop bit + extra 
     delayMicroseconds(bit9600Delay); 
     delayMicroseconds(bit9600Delay); 
     return val; 
    } 
} 

void loop() 
{ 
    SWval = SWread(); 
    SWprint(toupper(SWval)); 
} 

我改變RX和TX引腳分別爲0和1,因爲這些是在Cutedigi RS-232芯片使用的管腳。現在,當我打開一個終端窗口並鍵入字符時,出現亂碼和符號(如:¾_ò_òòËÌßÌËßÌÊÌòyofyofsæóÙöÇ æü æ)。

根據示例代碼網站,如果我輸入abcdefg,終端窗口應顯示ABCDEFG

爲什麼會這樣?我已經將波特率設置爲9600,如sketch中所述,但我仍然遇到問題。重置Arduino似乎也沒有幫助 - 我仍然看到亂碼文本。

+1

雖然這個問題肯定有一些軟件開發角度,但它可能更適合於[http://electronics.stackexchange.com/] – NJones

+0

好吧謝謝,繼續並刪除這篇文章然後。我會查看electronics.stackexchange.com –

+0

如果您收到亂碼字符,通常表示波特率不匹配。 – TJD

回答

2

我想出了問題所在。

事實證明,我試圖將兩個DCE設備連接在一起,這意味着需要一個空調制解調器適配器來交換電纜上的TX/RX引腳。以前,我使用的是簡單的性別改變器,但這是導致我的問題的原因。

嘗試獲得一個空調制解調器適配器,如果你有這樣的問題。