Guten Tag,
ich nutze die Arduino IDE Version 2.3.6 CLI Version 1.2.0 unter Linux.
Die IDE hat keine Console zum debugen - printf("Fehler...") geht nicht.
Stattdessen wird Serial.print("String") vorgeschlagen, ich brauche aber die Serielle Schnittstelle zum Daten empfangen. mein Workaround wird vorlaeufig sein ein I2C LCD anzuschliessen und mit LCD.print() zu debugen. Ich würde aber lieber die Serielle Schnittstelle zu und wieder auf machen mit Serial.end() und wenn ich die Serielle Schnittstelle wieder brauche mit Serial.begin(9600) oeffnen. Aber wenn ich Serial.end() anwende läst sich die Serielle Schnittstelle nicht mehr oeffnen. Ich muss den uC neu booten. Was mache ich falsch? Oder ist diese Fähigkeit in der IDE/uC nicht mehr vorhanden?
Mit freundlichen Grüßen,
Daniel.
Das ist aus meiner Sicht doch richtig.
Damit beendest du die serielle Kommunikation und es geht nichts mehr.
Du kannst aber im Sketch mit Serial.begin(baud) wieder starten.
Erst einmal vielen Dank an alle die sich an diesem Beitrag beteiligen.
Um es kurz zu machen, ich habe die Lösung gefunden warum Serial.begin(9600) nach Serial.end() keine Verbindung aufgebaut hat. Das Problem war dass der uC zu wenig Zeit hatte. Ich zeuge Euch mal meine zwei Programme.
Zuerst das verwendete python3 Programm (nicht auf meinem Mist gewachsen):
import serial
import time
ser = serial.Serial('/dev/ttyUSB1', 9600, timeout=2)
if ser.isOpen():
print('Serial connection established!')
else:
print('Error: Failed to establish serial connection.')
def write(x):
ser.write(bytes(x, 'utf-8'))
def write_read(x):
ser.write(bytes(x, 'utf-8'))
time.sleep(2)
data = ser.readline().decode('utf-8')
return data
data = '1'
Antwort = write_read(data)
ser.close()
print('Data sent:', data)
print('Data get:', Antwort)
dieses soll eine 1 senden und dann auf eine Antwort warten. Man beachte den timeout=2;
Dann der Arduino code:
String x = "";
void setup() {
// initialize serial:
Serial.begin(9600);
Serial.setTimeout(1000);
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
// if there's any serial available, read it:
Serial.begin(9600);
delay(500);
while (Serial.available() > 0) {
x = Serial.readString();
delay(500);
Serial.end();
//laenge = x.length();
}
delay(500);
Serial.begin(9600);
delay(500);
Serial.write("Antwort");
delay(500);
Serial.end();
delay(500);
}
Was mir vollkommen unklar ist, was machst Du auf den seriellen Pins noch, dass die serielle abschalten soll?
Wie stelllst Du denn sicher, dass das python-Script nicht einfach irgendwas macht, was Du gar nicht willst, während Du auf TX irgendwas anderes machst, als echtes Serial.TX?
Du hast keinerlei Control; nix was sagt, das Du senden oder empfangen kannst.
Also: Warum muss die serielle abgeschalten werden und was passiert in der Zeit, bis die wieder eingeschalten ist?