私の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をリセットすることはどちらの助けにもならない - 私はまだ文字化けしたテキストを得る。
この質問に対するソフトウェア開発の角度は間違いありませんが、おそらく[http://electronics.stackexchange.com/]の方が適しています。 – NJones
大変ありがとうございます。この投稿を削除してください。私はelectronics.stackexchange.com –
を調べます。文字が文字化けしている場合は、通常、ボーレートの不一致を示します。 – TJD