Ich habe folgenden Sketch auf einem Arduino UNO laufen,
der Arduiono ist mit einem WIN 10 PC per USB (USB-SERIAL Ch340) verbunden.
Mit dem Programm "Serialsend.exe" möchte ich entweder eine "1" oder eine "0" an den Arduino senden, worauf dieser je nach empfangenen Byte eine Aktion (LED) ausführt.
Der Sketch funktioniert wenn ich die "0" oder "1" vom IDE Monitor schicke, aber leider nicht wenn ich es vom PC (mit Serialsend.exe) schicke.
So sieht das Ganze aus:
// Seriell auf RX ( oder USB ) reinkommende Daten per event auslesen und das Zeilenende erkennen
// serialEvent() ist nicht kompatible mit Arduino Esplora, Leonardo oder Micro
//
// Matthias Busse 17.12.2018 Version 1.0
constexpr uint8_t LED1= 11;
constexpr uint8_t LED2= 12;
String inputString=""; // Eingabe String Daten
bool stringComplete=false; // String abgeschlossen
void setup() {
pinMode (LED1, OUTPUT);
digitalWrite(LED1,LOW); //Led 1 OFF
pinMode (LED2, OUTPUT);
digitalWrite(LED2,LOW); //Led 2 OFF
Serial.begin(9600); // Baud
inputString.reserve(64); // 64 Byte Platz für den Seriellen Text
}
void loop() {
if(stringComplete) {
stringComplete=false;
if (inputString[0] == '0'){ // SerialSend.exe /baudrate 9600 /devnum 6 "0\n" vom PC
digitalWrite(LED1, HIGH); //Led 1 ON
delay(1000);
digitalWrite(LED1, LOW); //Led 1 OFF
}
if (inputString[0] == '1'){ // SerialSend.exe /baudrate 9600 /devnum 6 "1\n" vom PC
digitalWrite(LED2, HIGH); //Led 1 ON
delay(1000);
digitalWrite(LED2, LOW); //Led 2 OFF
}
inputString="";
}
}
void serialEvent() {
// Wird aufgerufen wenn an RX Daten angekommen sind, ausserhalb von loop().
// Ein delay() in loop() kann die Datenübernahme verzögern.
// Der Arduino RX Buffer ist standardmässig 64 Zeichen groß, kann aber ggf. vergrößert werden.
while(Serial.available()) { // bis alle Zeichen im RX Buffer ausgelesen sind
char inChar=(char)Serial.read(); // ein Zeichen im RX Buffer auslesen
if(inChar == '\n') { // String Ende erkennen
stringComplete=true;
}
else { // Zeichen anhängen
inputString+=inChar;
}
}
}// Seriell auf RX ( oder USB ) reinkommende Daten per event auslesen und das Zeilenende erkennen
// serialEvent() ist nicht kompatible mit Arduino Esplora, Leonardo oder Micro
//
// Matthias Busse 17.12.2018 Version 1.0
constexpr uint8_t LED1= 11;
constexpr uint8_t LED2= 12;
String inputString=""; // Eingabe String Daten
bool stringComplete=false; // String abgeschlossen
void setup() {
pinMode (LED1, OUTPUT);
digitalWrite(LED1,LOW); //Led 1 OFF
pinMode (LED2, OUTPUT);
digitalWrite(LED2,LOW); //Led 2 OFF
Serial.begin(9600); // Baud
inputString.reserve(64); // 64 Byte Platz für den Seriellen Text
}
void loop() {
if(stringComplete) {
stringComplete=false;
if (inputString[0] == '0'){ // SerialSend.exe /baudrate 9600 /devnum 6 "0\n" vom PC
digitalWrite(LED1, HIGH); //Led 1 ON
delay(1000);
digitalWrite(LED1, LOW); //Led 1 OFF
}
if (inputString[0] == '1'){ // SerialSend.exe /baudrate 9600 /devnum 6 "1\n" vom PC
digitalWrite(LED2, HIGH); //Led 1 ON
delay(1000);
digitalWrite(LED2, LOW); //Led 2 OFF
}
inputString="";
}
}
void serialEvent() {
// Wird aufgerufen wenn an RX Daten angekommen sind, ausserhalb von loop().
// Ein delay() in loop() kann die Datenübernahme verzögern.
// Der Arduino RX Buffer ist standardmässig 64 Zeichen groß, kann aber ggf. vergrößert werden.
while(Serial.available()) { // bis alle Zeichen im RX Buffer ausgelesen sind
char inChar=(char)Serial.read(); // ein Zeichen im RX Buffer auslesen
if(inChar == '\n') { // String Ende erkennen
stringComplete=true;
}
else { // Zeichen anhängen
inputString+=inChar;
}
}
}
Bitte um eure Hilfe.
Danke
Josef