Ich versuche, Daten über die serielle Verbindung (USB) von meinem PC (Ubuntu 14.04) zu einem Arduino Uno zu senden. Der Arduino sollte die empfangenen Daten zu Testzwecken anzeigen. (Ich bin glücklich, wenn ich etwas bekomme ...)C++ libserial serielle Verbindung zu Arduino
Ich benutze libserial, um die Daten zu senden, aber das Arduino erhält nichts. Mit Hilfe der Arduino IDE konnte ich die Daten erfolgreich an den Arduino senden. Mit normalen Konsolenbefehlen ist es auch möglich, die Daten zu senden.
Hier ist mein Arduino Code:
#include <LiquidCrystal.h>
#include <SoftwareSerial.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
String inputString = ""; // a string to hold incoming data
boolean stringComplete = false; // whether the string is complete
void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("connecting...");
inputString.reserve(200);
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
lcd.setCursor(0, 0);
lcd.print("successful connected");
}
void loop() {
lcd.setCursor(0, 1);
// print the string when a newline arrives:
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(inputString);
delay(500);
}
void serialEvent() {
if (Serial.available()) {
// get the new byte:
char inChar = (char)Serial.read();
// add it to the inputString:
inputString += inChar;
}
}
Und dies der C++ Code (auf der PC-Seite):
//Libserial: sudo apt-get install libserial-dev
#include <SerialStream.h>
#include <iostream>
#include <unistd.h>
using namespace LibSerial;
using namespace std;
int main(int argc, char** argv)
{
SerialStream my_serial_stream;
//
// Open the serial port for communication.
//
my_serial_stream.Open("/dev/ttyACM0");
my_serial_stream.SetBaudRate(SerialStreamBuf::BAUD_9600);
//my_serial_stream.SetVTime(1);
//my_serial_stream.SetVMin(0);
my_serial_stream.SetCharSize(SerialStreamBuf::CHAR_SIZE_8);
my_serial_stream.SetParity(SerialStreamBuf::PARITY_NONE);
my_serial_stream.SetFlowControl(SerialStreamBuf::FLOW_CONTROL_NONE);
my_serial_stream.SetNumOfStopBits(1);
int i = 0;
while(i<=5) {
usleep(1500000);
if (!my_serial_stream.good()) {
my_serial_stream << i << "\n" << endl;
cout << i << endl;
}
else {
cout << "serial is not good" << endl;
}
i++;
}
my_serial_stream.Close();
cout << "ready" << endl;
return 0;
}
Haben Sie irgendwelche Ideen, warum dies nicht funktioniert?
Danke!
Hat der PC die Daten senden? Schließen Sie es an einen anderen PC oder einen anderen seriellen Anschluss am selben PC an und verwenden Sie minicom o.ä., um zu sehen, ob der PC-Code tatsächlich Daten sendet. Dann interpretieren Sie die Daten, um sicherzustellen, dass Sie gesendet haben, was Sie senden wollten. Es ist auch oft hilfreich, eine Portierungsschicht zu schreiben, die die Arduino- und PC-Linux-Inhalte abstrahiert, so dass Sie Ihre Anwendungslogik auf einem PC oder etwas einfacher zu Debuggen als ein Arduino testen können. Wenn Sie wissen, dass die Logik funktioniert, starten Sie auf dem Arduino. – user4581301
Danke! Mit Hilfe von Minicom habe ich das Problem gefunden .... Ich werde die "Lösung" posten. –