Arduino sendet erst nach start des serial monitors

Hallo,

ich habe wie die Überschrift bereits sagt folgendes Problem:
Wenn mein Arduino vom Strom getrennt war und ich es einschalte so sollte es beginnen sekündlich eine Botschaft auf den Serial-Port zu legen. Das Passiert aber nicht (Tx) blinkt auch nicht. Meine C-Software die den Serialport öffnet und die Botschaften empfangen sollte erhält also nichts. Starte ich aber den Serial Monitor fängt der Arduino an zu senden auch wenn ich ihn wieder schließe, dann funktioniert auch meine C-Software. Selbst nach einem Reset vom Board funktioniert alles sofort, es ist nur wenn er vom Strom getrennt war.
Warum ist das so?
Was macht der Serial Monitor beim öffnen? Die Rx-LED leuchtet auch nicht kurz auf also empfängt er eigentlich nichts. Aber irgendwas muss ja passieren dass mein Arduino danach sendet.
Falls das wichtig ist den Auto-Reset habe ich mittels Widerstand zwischen 5V und Reset deaktiviert.

Vielen Dank für alle Infos

Und wir sollten jetzt hellsehen? :wink: :wink: :wink:
Bitte schick uns den Sketch. Ansonsten kann ich Dir nur sagen: "Weil der Sketch so programmiert wurde".
Grüße Uwe

Hallo,

"Was macht der Serial Monitor beim öffnen?" -> Er oeffnet den COM-Port am PC. Such mal in der Richtung in deinem Programm...

Grüße,
Jürgen

irgendwas muss ja passieren dass mein Arduino danach sendet.
Falls das wichtig ist den Auto-Reset habe ich mittels Widerstand zwischen 5V und Reset deaktiviert.

... und du bist sicher, dass kein Reset passiert ?
Bei mir und meinem UNO R3 funktionierte das mit dem 100 Ohm Widerstand nicht, hat trotzdem reset ausgelöst.

Was ist, wenn du in deinem setup() was eindeutiges einbaust, z.B.
delay(100) ; LED13 an; delay(50); LED13 aus; Serial.begin(9600) ; Serial.println("Init");
Die LED zeigt dir an, dass Reset ausgeführt wurde, Serial wird verzögert initialisiert...

meine C-Software

läuft auf dem PC ? ( windows, Linux ?)
Wäre evtl. auch interessant, wie diese sich mit SerialMonitor den COM Port teilt.
Eigentlich sollte SerialMonitor nicht gehen, wenn ein anderes Programm den Port offen hat ...

... und du bist sicher, dass kein Reset passiert ?
Bei mir und meinem UNO R3 funktionierte das mit dem 100 Ohm Widerstand nicht, hat trotzdem reset ausgelöst.

nein 100 Ohm funktionieren nicht 60 aber schon :wink: es ist ein 2 sekunden langer Startbildschirm auf dem LCD der seit dem Wiederstand beim starten der Kommunikation nicht mehr kommt :wink:

läuft auf dem PC ? ( windows, Linux ?)
Wäre evtl. auch interessant, wie diese sich mit SerialMonitor den COM Port teilt.
Eigentlich sollte SerialMonitor nicht gehen, wenn ein anderes Programm den Port offen hat ...

PC läuft mit windows 7
Teilen tut sich gar niemand etwas es geht nur eins habe ich ja auch geschrieben, der Arduino sendet nach dem Trennen vom Netz nichts, mein C-Programm empfängt auch nix. Wenn ich aber den serial monitor öffne fängt der Arduino zu senden an und sendet auch weiter wenn ich den serial Monitor wieder schließe (soll auch so sein)
jetzt empfange ich auch auf meinem C-Programm die Daten vom Arduino.

"Was macht der Serial Monitor beim öffnen?" -> Er oeffnet den COM-Port am PC. Such mal in der Richtung in deinem Programm...

Das macht mein Programm auch:

OpenCom(port,portname)

und sonst würde ich ja auch nichts empfangen nachdem der serial monitor zu ist. also was macht der serial monitor weiterhin außer den port öffnen, vielleicht noch irgendwas anderes?

also was macht der serial monitor weiterhin außer den port öffnen, vielleicht noch irgendwas anderes?

Er zieht die DTR-Leitung hoch und löst somit auf einem Standard-Arduino einen Reset aus. Da Du das ausschliesst, aber trotz Aufforderung noch keinen Code gezeigt hast, ist alles Weitere Rätselraten für uns. Immerhin konnten wir im letzten Post zwischen den Zeilen lesen, dass auch noch ein LCD am Arduino hängt. Müssten wir sonst noch etwas wissen?

Hallo Leute,
ich weiß der Post ist schon Uralt und trotzdem habe ich genau dasselbe beschriebene Problem.
Mein Arduino-Sketch läuft nach dem einspielen tadellos. Wird nun der Strom kurzzeitig abgezogen, werden keine Seriellen Daten mehr gesendet.

Ich habe um den Fehler nachzuvollziehen mal einen etwas abgewandelten Code aus den Beispielen der IDE angefügt.

String inputString = "";         // a String to hold incoming data
boolean stringComplete = false;  // whether the string is complete

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  
  // initialize serial:
  Serial.begin(9600);
  // reserve 200 bytes for the inputString:
  inputString.reserve(200);
}

void loop() {
  // print the string when a newline arrives:

  digitalWrite(LED_BUILTIN, LOW);
  delay(500);
  digitalWrite(LED_BUILTIN, HIGH);
  Serial.println("Hallo");
  delay(500);
  
  
  if (stringComplete) {
    Serial.println(inputString);
    // clear the string:
    inputString = "";
    stringComplete = false;
  }
}

/*
  SerialEvent occurs whenever a new data comes in the hardware serial RX. This
  routine is run between each time loop() runs, so using delay inside loop can
  delay response. Multiple bytes of data may be available.
*/
void serialEvent() {
  while (Serial.available()) {
    // get the new byte:
    char inChar = (char)Serial.read();
    // add it to the inputString:
    inputString += inChar;
    // if the incoming character is a newline, set a flag so the main loop can
    // do something about it:
    if (inChar == '\n') {
      stringComplete = true;
    }
  }
}

Ich hoffe so, dass Ihr noch irgendeine Idee habt.

Vielen Dank schon mal für Eure Mühe.

Erster Fehler: Du hast einen fremden Thread entführt
Zweiter Fehler: Du hast die Code Formatierungstags nicht benutzt.
Dritter Fehler: Du hast vergessen zu sagen welchen Arduino du verwendest.

combie:
Erster Fehler: Du hast einen fremden Thread entführt
Zweiter Fehler: Du hast die Code Formatierungstags nicht benutzt.
Dritter Fehler: Du hast vergessen zu sagen welchen Arduino du verwendest.

Zu deinem ersten Punkt, ja ich habe etwas zu einem alten Thread geschrieben, warum auch einen neuen machen, wenn es das gleiche Problem ist. Deine Logik erschließt sich mir nicht. Ich bitte um nachsehen da ich noch neu hier im Forum bin.

Zum zweiten entschuldige ich mich für meine Unwissenheit, die Codefunktion habe ich gerade erst entdeckt, ist mir vorhin nicht aufgefallen.

Zum dritten, da hast du natürlich total recht, das habe ich total vergessen.
Ich habe es mit einem Arduino Uno versucht.

noiasca:
Ich vermute deine Wahrnehmung ist falsch.

Nein, ich verwende nicht mal den Serial Monitor.
Wenn man meinen o.g. Code einspielt sieht man, dass der Arduino zyklisch Daten sendet (aufleuchten der TX LED). Zieht man nun den Strom ab und steck ihn wieder dran, sendet der Arduino erst wieder zyklisch wenn er einmal serielle Daten empfangen hat oder man neu einspielt oder der Serial Monitor gestartet wird.

Deine Logik erschließt sich mir nicht.

Muss sie ja auch nicht!

Beruht übrigens auf Gegenseitigkeit.

Beweis:
Wenn du dir mal den Schaltplan angesehen hättest, dann wüsstest du, dass die RX und TX LED nicht am ATMega328P angeschlossen sind, sondern am ATMega16U2.

Der 16U2 wird erst "wach" wenn du USB ansteckst und der COM Port angesprochen wird.
Also können auch erst dann die LEDs zucken.

Also:
Der ATMega328P des UNO sendet seriell, es ist nur keiner da, der zuhört

Ich vermute deine Wahrnehmung ist falsch.

Womit auch das bestätigt wäre.

und trotzdem habe ich genau dasselbe beschriebene Problem.

Und dieses ist damit widerlegt!
Du hast den Thread mit einem anderen Problem entführt.

combie:
Wenn du dir mal den Schaltplan angesehen hättest, dann wüsstest du, dass die RX und TX LED nicht am ATMega328P angeschlossen sind, sondern am ATMega16U2.

Damit hast du natürlich Recht. Ich bin so fest davon ausgegangen das der ATMega328P direkt an den RX / TX Pins liegt, dass ich nicht auf die Idee gekommen bin im Schaltbild nachzusehen.

Vielen Dank, damit hast du mir sehr geholfen.

combie:
Und dieses ist damit widerlegt!
Du hast den Thread mit einem anderen Problem entführt.

Ich denke der Autor wird das Nachsehen mit mir haben, nach 5 Jahren.

Mein Oma sagte öfter mal:

Der Weg in die Hölle, ist mit falschen Annahmen gepflastert.

Aber was solls...
Jetzt sind ja alle Klarheiten beseitigt!

IronEagle:
Ich denke der Autor wird das Nachsehen mit mir haben, nach 5 Jahren....
....Deine Logik erschließt sich mir nicht.

Dieser hier wahrscheinlich schon, war auch ein Gast. Allerdings muss man erstmal viel lesen bis man überhaupt zu deinem Problem kommt, dann muss man das auch noch lesen. Damit vergraulst du auf jedenfall potetizelle Helfer.

Zu Deinem Problem: Wenn ein Terminal Programm (ausser der Serielle Monitor) die COM Verbindung verliert, muss man sie auch wieder aufbauen. Der Serielle Monitor macht das automatisch.
Pin 0 und Pin 1 sind übrigens direkt mit Rx/Tx am 328P verbunden, falls dir das was hilft.

lg dony