2011-12-03 7 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)); 
} 

これらはCutedigi RS-232チップを使用するピンであるので、私は、それぞれ0と1にRXおよびTXピンを変え。さて、ターミナルウィンドウを開いて文字を入力すると、記号や文字が文字化けします(¾_ò_òòËÌßÌËßÌÊÌòyofyofsæóÙöÇ æü æなど)。

例コードウェブサイトによると、abcdefgと入力すると、端末ウィンドウにはABCDEFGと表示されます。

なぜこの場合ですか? sketchに指定されているように、ボーレートを9600に設定しましたが、まだ問題が発生しています。 Arduinoをリセットすることはどちらの助けにもならない - 私はまだ文字化けしたテキストを得る。

+1

この質問に対するソフトウェア開発の角度は間違いありませんが、おそらく[http://electronics.stackexchange.com/]の方が適しています。 – NJones

+0

大変ありがとうございます。この投稿を削除してください。私はelectronics.stackexchange.com –

+0

を調べます。文字が文字化けしている場合は、通常、ボーレートの不一致を示します。 – TJD

答えて

2

私は問題が何かを理解しました。

2つのDCEデバイスを一緒に接続しようとしていたことが判明しました。つまり、ヌルモデムアダプタがケーブルのTX/RXピンを交換する必要がありました。以前は、単純なジェンダーチェンジャーを使用していましたが、これが私の問題を引き起こしていました。

このような問題が発生している場合は、ヌルモデムアダプタを入手してみてください。

関連する問題