La communication série entre le pc et l'arduino via RS232 à l'aide de c++
Je suis en train d'essayer de communiquer avec mon arduino duemilanove par l'intermédiaire d'un cordon RS232. Je veux simplement être en mesure d'envoyer un octet (ou char) à mon arduino à partir d'une application de bureau. L'Arduino est de le brancher sur l'USB, le port COM5 sur mon ordinateur. J'ai l'RS232 branché sur le port COM1, et puis j'ai les broches 2, 3 et 5 sur l'autre extrémité de la liaison RS232 connecté à la broche de l'arduino TX, RX et GND, respectivement.
J'ai trouvé un serial comm classe pour le c++ sur le lien suivant:
http://playground.arduino.cc/Interfacing/CPPWindows
J'ai ajouté l' .h et .rpc fichiers à partir de l'exemple ci-dessus en tant que Série.h et Serial.cpp (je pense que l'exemple utilise SerialClass.h et SerialClass.cpp je change juste les noms).
Sur mon arduino, j'ai le code suivant fonctionne: de l'
//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);
}
}
Et mon programme c++ est la suivante:
//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");
}
Lorsque j'utilise l'Arduino port série de l'observateur pour voir ce qui est imprimé, je suis très étrange valeurs qui ne correspondent pas à ce que je suis d'envoi (pour autant que je puisse dire).
Quand j'envoie "Bonjour Arduino!", l'arduino imprime le suivant:
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
Cela ne semble pas être la bonne hex pour "Bonjour Arduino!", mais je n'ai aucune idée de pourquoi il n'est pas correct. Quelqu'un a une idée de ce que je fais mal?
- Avez-vous mis COM1 dans 9600 vitesse ainsi? Sont stop/bits de parité de la même chose aussi?
- Yep et oui, i.imgur.com/CIt2Kog.png
- Il est spécifique du système d'exploitation.
- Suggérer de vous changer de code C++ ... Voir le.
Vous devez vous connecter pour publier un commentaire.
Arduino utilisé la logique TTL pour connexion Série. Il s'attend à des valeurs à 0 et 5V. RS232 différente de la tension V +V. Vous pouvez avoir besoin d'un convertisseur.
Euh... Non! pull up et pull down ne sont pas pour cette raison..
TTL = faible: 0, hauteur: 5V
RS232 = faible: +3:+15V, hauteur: -3:-15V
En conséquence.. Vous avez besoin d'un convertisseur de tension (et de l'onduleur), comme David Skogan correctement souligné.
Exemples:
Ou.. il suffit d'utiliser le port USB de l'Arduino, qui dispose déjà d'un FT232 sur elle.
Commentaire personnel: j'aimerais éviter solution 1...