Domanda

Sto cercando di comunicare con il mio Arduino Duemilanove tramite un cavo RS232. Voglio semplicemente essere in grado di inviare un byte (o un char) al mio Arduino da un'applicazione desktop. L'Arduino si collega a USB Com5 sul mio computer. Ho il RS232 collegato a com1, e poi ho dei perni 2 3 e 5 dall'altra parte della RS232 collegati a Arduino Pin TX, RX e GND, rispettivamente.

Ho trovato una classe di comm serial per C ++ al seguente link:

http://playground.arduino.cc/interfacing/cppwindows

Ho aggiunto i file .h e .cpp dall'esempio di cui sopra come serial.h e serial.cpp (penso che l'esempio utilizza serialclass.h e serialclass.cpp, cambia solo i nomi).


.

Sul mio Arduino, ho il seguente codice in esecuzione:

// ARDUINO
char incomingByte = 0;

void setup() {
        Serial.begin(9600);
}

void loop() {

        // send data only when you receive data:
        if (Serial.available() > 0) {
                // read the incoming byte:
                incomingByte = Serial.read();

                // say what you got:
                Serial.print("I received: ");
                Serial.println(incomingByte, HEX);
        }
}
.


.

E il mio programma C ++ è il seguente:

// C++
#include <iostream>
#include <Windows.h>
#include "Serial.h"

using namespace std;

int main(void)
{
    Serial port("COM1");

    char* msg = "Hello Arduino!";
    int msgLen = strlen(msg);
    bool writeSuccess = port.WriteData(msg, msgLen);

    cout << "\n\n";
    system("PAUSE");
}
.


.

Quando utilizzo il Viewer Serial Port Arduino per vedere cosa viene stampato, sto ottenendo valori molto strani che non corrispondono a quello che sto inviando (per quanto posso dire).

Quando mando "Ciao Arduino!", Arduino stampa il seguente:

I received: FFFFFFAB
I received: 3A
I received: 3A
I received: A
I received: FFFFFFFA
I received: FFFFFFEB
I received: 6D
I received: 37
I received: 15
I received: 2D
I received: 23
I received: 21
I received: FFFFFFBD
I received: 0
.

Questo non sembra essere l'esagono corretto per "ciao Arduino!", ma non ho idea del motivo per cui non è corretto. Qualcuno ha idea di ciò che sto facendo male?

È stato utile?

Soluzione

Arduino ha utilizzato la logica TTL per la connessione seriale.Si aspetta valori a 0 e 5 V.RS232 ha utilizzato una tensione diversa -v in + V.Potrebbe essere necessario un convertitore.

Altri suggerimenti

Ehm ... no! Tirare su e tirare giù non sono per questo motivo ..

    .
  • TTL= BASSA: 0V, ALTO: 5V

  • rs232= basso: +3: + 15v, alto: -3: -15V

Di conseguenza .. Hai bisogno di un convertitore di tensione (e dell'inverter), come David Skogan ha indicato correttamente.

Esempi:

    .
  1. Utilizzando componenti discreti (ha una funzione di eco automatico, vale a dire sul PC vedrai i dati che invii): http://project.irone.org/simple-rs232-TTL-Level-Converter.html o http://circuit-diagram.hqew.net/simple-TTL $ 2DRS232-Level-Converter-using-transistor_2757.html
  2. Circuito comune con un max232 (o equivalente) e quattro condensatori
  3. Invece di utilizzare un convertitore USB-RS232 utilizzare una USB-UART, utilizzando ad esempio un FT232 o qualcosa del genere. Questo non ha bisogno di alcuna interfaccia
  4. o .. Basta usare la porta USB su Arduino, che ha già un FT232 su di esso.

    Commento personale: eviterei la soluzione 1 ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top