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似乎也沒有幫助 - 我仍然看到亂碼文本。
雖然這個問題肯定有一些軟件開發角度,但它可能更適合於[http://electronics.stackexchange.com/] – NJones
好吧謝謝,繼續並刪除這篇文章然後。我會查看electronics.stackexchange.com –
如果您收到亂碼字符,通常表示波特率不匹配。 – TJD