Das ist mir schon klar. Deshalb trenne ich die SS wenn ich beim Uno eine Programmänderung hochlade. Ich bin jedoch der Meinung, dass die USB keine Rolle spielt, wenn ich den SM nicht nutze.
Nun habe ich beide Arduinos von den USB's getrennt, aber das Verhalten ändert sich nicht.
Man kann doch die Pins 0 und 1 sonst auch für andere Zwecke nutzen, wenn man USB nicht verwendet.
Die Schaltung hat keinen weiteren Sinn, außer, dass ich den Umgang mit der SS kennenlernen möchte.
vG
fredyxx
Im Schaltbild vom Uno sind die Pins 0 und 1 auf jeden Fall mit denen vom zweiten Controller verbunden, das ist das IC neben dem USB-Stecker. Und beide Controller hängen an der selben Stromversorgung sind also immer beide an, egal ob das Board über USB oder anders versorgt wird.
Aber wenn das kein Problem ist, dann ist ja gut.
- - - Aktualisiert - - -
Ansonsten hat der Code natürlich einige Probleme:
Sendet in jedem Loop Durchlauf ein "ja", bis wieder was empfangen wird, denn Blinken ändert sich ja nicht dadurch, dass es mit etwas verglichen wird.Code:void loop() { if (Serial.available()) { // ... } if (Blinken == "ja") { digitalWrite(ausgang, HIGH); Serial.println("ja"); // B sendet an A ein ja }
Das kann ich in dem Schaltbild auch so erkennen. Aber es gibt ja kein Verbot, 0 und 1 nicht zu verwenden, nur eben nicht gleichzeitig mit USB.Im Schaltbild vom Uno sind die Pins 0 und 1 auf jeden Fall mit denen vom zweiten Controller verbunden, das ist das IC neben dem USB-Stecker. Und beide Controller hängen an der selben Stromversorgung sind also immer beide an, egal ob das Board über USB oder anders versorgt wird.
Aber dein letzter Hinweis ist gut. Das werde ich mal ändern. Das hatte ich bisher übersehen.
- - - Aktualisiert - - -
Danke, das war's.
Nun kommen am Mega auf dem SM die ja's und nein's völlig gleichmäßig, was vorher nicht der Fall war. Was da ankam war ziemlich durcheinander.
Außerdem klappt es nun auch wenn die USB's gesteckt sind.
Selbst wenn ich am Uno-Programm den SM öffne ist noch alles ok, solange ich aus dem Programm keine anderen Sendebefehle gebe und das ist ja dann auch verständlich!!
Danke und Gruß
fredyxx
Diese Art von Fehler ist übrigens der Grund, warum ich dem readStringUntil sehr skeptisch gegenüberstehe.
Wenn mal viel mehr ankommt als gedacht, empfängt der Arduino bis der Speicher voll ist und er stehen bleibt.
Was wäre die Alternative?
Also wenn man sich mal anschaut, wie readStringUntil in der Arduino IDE implementiert ist
dann kann man sich etwas ähnliches auch selber bauen.Code:String Stream::readStringUntil(char terminator) { String ret; int c = timedRead(); while (c >= 0 && c != terminator) { ret += (char)c; c = timedRead(); } return ret; }
Auch das da verwendete timedRead ist keine Gehirnchirugie
Man kann das also recht einfach dem eigenen Protokoll anpassen und dabei auch mitzählen, wie viele Zeichen man schon gelesen hat. Schickt einem da einer zuviel, schmeißt man es einfach weg. Kommt nach der eingelesenen Zeile noch was und man hat das eingentlich nicht erwartet, kann man das auch behandeln.Code:int Stream::timedRead() { int c; _startMillis = millis(); do { c = read(); if (c >= 0) return c; } while(millis() - _startMillis < _timeout); return -1; // -1 indicates timeout }
Man kann auch "spionieren", was da noch kommt. Es gibt auch ein Serial.peek(). Das arbeitet wie read(), löscht das Zeichen aber nicht aus dem Schnittstellenpuffer.
Lesezeichen