Я пытаюсь связаться с моим arduino duemilanove через шнур RS232. Я просто хочу иметь возможность отправлять байт (или символ) на мой Arduino из настольного приложения. Arduino подключается к USB COM5 на моем компьютере. Я подключил RS232 к COM1, и затем у меня есть контакты 2, 3 и 5 на другом конце RS232, подключенные к контактам Arduino TX, RX и GND, соответственно.
Я нашел класс последовательной связи для C ++ по следующей ссылке:
http://playground.arduino.cc/Interfacing/CPPWindows
Я добавил файлы .h и .cpp из приведенного выше примера как Serial.h и Serial.cpp (я думаю, что в примере используются SerialClass.h и SerialClass.cpp, я просто изменяю имена).
На моем arduino у меня работает следующий код:
// 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);
}
}
И моя программа на С ++ выглядит следующим образом:
// 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");
}
Когда я использую средство просмотра последовательного порта Arduino, чтобы увидеть, что печатается, я получаю очень странные значения, которые не соответствуют тому, что я отправляю (насколько я могу судить).
Когда я посылаю «Hello Arduino!», Arduino печатает следующее:
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
Это не правильный гекс для «Hello Arduino!», Но я понятия не имею, почему это не правильно. Кто-нибудь знает, что я делаю не так?
Arduino использовал логику TTL для последовательного соединения. Ожидаются значения при 0 и 5 В. RS232 использовал другое напряжение от -V до + V. Вам может понадобиться конвертер.
Эмм … Нет! подтягивать и опускать не по этой причине ..
TTL = низкий: 0 В, высокий: 5 В
RS232 = низкий: +3: + 15 В, высокий: -3: -15 В
Следовательно … Вам нужен преобразователь напряжения (и инвертор), как правильно указал Дэвид Скоган.
Примеры:
Или .. просто используйте USB-порт на Arduino, на котором уже установлен FT232.
Личный комментарий: я бы избежал решения 1 …