Arduino wird nach SerialRead nicht mehr erkannt

Hallo zusammen,

ich habe eine bestimmt ultra dämlich Frage.

Mit LabView übertrage ich Daten über die serielle Schnittstelle auf einen Arduino UNO. Auf dem Arduino läuft ein Programm, welches die ankommenden Daten liest und entsprechend weiterverarbeitet. Ein Auszug:

  if (Serial.available() > 0) {
    while (Serial.available() > 0 && newData == false) {
        rc = Serial.read();

        if (recvInProgress == true) {
            if (rc != endMarker) {
                receivedChars[ndx] = rc;
                ndx++;
                if (ndx >= numChars) {
                    ndx = numChars - 1;
                }
            }
            else {
                receivedChars[ndx] = '\0'; // terminate the string
                recvInProgress = false;
                ndx = 0;
                newData = true;
            }
        }

        else if (rc == startMarker) {
            recvInProgress = true;
        }
    }

Möchte ich nun ein anderes Programm auf den Arduino laden erhalte ich folgende Fehlermeldung:

avrdude: ser_open(): can't open device "\.\COM9": Das System kann die angegebene Datei nicht finden.

Der Arduino wird im Gerätemanager erkannt und das Programm läuft fehlerfrei.
Ich vermute, dass der Serial.read() Befehl die Kommunikation mit dem PC verhindert.
Etwas vergleichbares habe ich erlebt, als ich Daten vom Arduino auf ein anderes Gerät per UART gesendet habe. Es konnte erst ein neues Programm hochgelden werden, als die UART Verbindung unterbrochen wurde.

Gibt es einen Möglichkeit, wie ich wieder auf den Arduino zugreifen kann?

Gruß

Die serielle Abfrage belegt deine Verbindung zur USB-Schnittstelle.
Wenn du zum richtigen Zeitpunkt den Reset drückst, kannst du den wieder flashen.
Immer mal öfter probieren.

Hallo HotSystems,

besten Dank für Deine Antwort!
Das mit dem Reset versuche ich nun schon eine Weile, ohne Erfolg. Gibt es vielleicht noch einen anderen Weg oder kann ich den Arduino entsorgen?

Bei den Beispielen gibt es auch ein Sketch "ReadASCIIString", wo die Serial.read() Funktion verwendet wird. Eigentlich kann ich mir nicht vorstellen, dass das dann der übliche Weg ist.

Gruß

Hi

Oft hilft es auch schon, wenn man das Terminal, Welches gerade dem Arduino lauscht, schließt.
Wobei ich unter Linux das Problem habe, daß ich den 'Serial-Monitor' schließen muß, bevor ich auf den Arduino erneut zugreifen kann, unter Windows der Monitor aber geöffnet bleiben kann.

MfG

Heiko78:
Hallo HotSystems,

besten Dank für Deine Antwort!
Das mit dem Reset versuche ich nun schon eine Weile, ohne Erfolg. Gibt es vielleicht noch einen anderen Weg oder kann ich den Arduino entsorgen?

Bei den Beispielen gibt es auch ein Sketch "ReadASCIIString", wo die Serial.read() Funktion verwendet wird. Eigentlich kann ich mir nicht vorstellen, dass das dann der übliche Weg ist.

Gruß

Du kannst den noch per ISP programmieren.
Das geht mit einem 2.Arduino

Bei einem UNO steht die Nutzung der Seriellen keinem Upload entgegen.
Das funktioniert, völlig egal welches Programm auf dem Uno läuft

Du solltest vor dem hochladen Labview beenden, weil wenn dies die serielle Schnittstelle geöfnet hat, kann die IDE nicht darauf zugreifen

Das ist natürlich war!
Eine zeitgleiche Nutzung, für beides, ist nicht möglich.

Hallo,

vielen Danke für Eure Antworten. Das Problem saß, wie schon einige vermutet haben, mal wieder vor dem Rechner. Ich habe vergessen, die Übertragung in Labview mit VISA:Close zu beenden. Demnach wurde die serielle Übertragung nicht freigegeben, obwohl das Labview Programm schon beendet wurde.

Sorry!