RS-232-Kommunikation mit einem Arduino Duemilanove und dem Cutedigi RS-232-Schnittstelle

Ich habe einige Mühe, meinen Arduino microcontroller zu Lesen RS-232 Signale. Mein Projekt verlangt von mir das Lesen von Daten wird ausgegeben Luftqualität überwachen.

Meine Komponenten:

Um zu testen, ob die serielle Kommunikation richtig funktioniert, fand ich einige Beispiel-code auf der Arduino website. Dies ist der genaue code, den ich verwende:

//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));
}

Ich habe die RX und TX pins 0 und 1 bzw., weil das sind die pins, die Cutedigi RS-232-chip verwendet. Nun, wenn ich öffnen Sie ein terminal-Fenster und geben Zeichen, ich bekomme unlesbare Zeichen und Buchstaben (wie diese: ¾_ò_òòËÌßÌËßÌÊÌòyofyofsæóÙöÇ æü æ).

Entsprechend dem Beispiel-code Webseite, wenn ich Typ abcdefg, das terminal-Fenster anzeigen soll ABCDEFG.

Warum sollte dies der Fall sein? Ich hab die baud-rate auf 9600, wie angegeben, in der Skizze, aber ich bin noch immer Probleme. Zurücksetzen des Arduino scheint nicht zu helfen - ich bekomme immer noch unleserlicher text.

  • Zwar gibt es definitiv einige software-Entwicklung Winkeln auf diese Frage, es ist wahrscheinlich eine bessere Passform für [electronics.stackexchange.com/]
  • okay danke, gehen Sie voran und entfernen Sie diese post dann. Ich werde schauen in electronics.stackexchange.com
  • Wenn Sie unlesbare Zeichen, dass in der Regel zeigt eine Baudrate überein.
  • Entweder das, oder die Synchronisation auf das startbit wird ausgelöst durch Lärm. Ich würde hinzufügen eine debounce-Schleife, oder eine kleine retest für "if (digitalRead(rx) == LOW)" nach der Hälfte etwas pause.
InformationsquelleAutor Tushar Garg | 2011-12-03
Schreibe einen Kommentar