Das mit dem Delay hast du schon sehr gut erkannt. Die theaterChase Funktion die du verwendest ist auch wie die Stepper.h Bibliothek blockierend. Und warum funktioniert es nicht mehr, wenn du das delay rausnimmst?
Wenn ich das Delay rausnehme wird das Lauflicht(zb.) nicht richtig ausgeführt. Wie sag ichs am besten:
Im Video der eine LED Effekt(colorWipe weiß) wo sich die 120LEDs in einem bestimmten Tempo der Reihe nach einschalten.
Bei diese Effekt kann ich zwar die Geschwindigkeit ändern, wie schnell alle an sind, sobald ich den delay entferne sind alle LEDs sofort an.
Und so verhält es sich mit jedem Effekt, ein Rainbow wandert dann nicht langsam über alle 12 LEDs sondern in Bruchteilen einer Sekunde.
Bei der Definition der Effekte, colorWipe ,Theaterchase etc bezieht sich das delay ja immer auf diesen Wert:
uint8,16,32 sind alles teile der adafruit liberary, was mich Wochenende auch schon interessierte.
Also auf die Frage:
Hab heute mal den Code der Stepper.h Bibliothek angesehen, und festgestellt, dass die ja gar nicht blockierend ist. Zumindest befindet sich da im Code gar kein Delay. Wenn du wissen willst wie man das macht, sag Bescheid.
BESCHEEEEEIIID!
Das mir die Delays überall nur schaden und möglichst nicht verwendet werden sollten war mir von Anfang an klar aber ich hätte es nat. nicht so gut in Worte fassen können wie du.
Bin für heute noch zu durch vom Arbeiten, hab schon für den anderen Text n halben Tag gebraucht... Daher morgen erst ne ausführlichere Antwort.
Nur zwei kurze Dinger die mir ins Auge gesprungen sind.
Hey kein Problem und kein streß, ich bin froh das du dir überhaupt die Zeit nimmst das irgendwie in mein Kopf zu prügeln.
irrecv.resume(); Sehr gute Idee den öfters einzusetzen. Denke das ist ne gute Lösung, eventl sogar die richtige. Ich würde diesen aber auch bei den unbenutzen Tasten einfügen. Sprich nach Zeile 98, 100.... usw. Du hast ihn zwar in Zeile 109 eingefügt, aber da betrifft er nur die Zeile direkt davor. Ist eine Eigenheit der If- Abfrage. Normal machst du ja geschweifte Klammern, musst du aber nicht. Du kannst die auch weglassen, dann gilt die nächste Zeile als das was ausgeführt wird, wenn die Bedingung erfüllt ist. In deinem Code wird also Zeile 99 bis 109 nur ausgeführt wenn Taste 6 gedrückt wurde. Ansonsten kommst du an den Codeteil gar nicht ran. Programmier mal auf die Taste 7 oder 8 mal was zum testen. Ich bin mir sehr sicher, dass da nix geht.
Ich finds übrigens ne gute Idee auch alle Tasten im Code aufzugreifen. Nicht das ein unbekanntes Signal Verwirrung stiftet.
Okay super das ich nicht vollkommen in die falsche Richtung arbeite.
Ich weiß nicht ob du es gesehen hattest aber ich hab den irrecv.resume(); Befehl unten bei den einzelnen Effekte eingefügt um es oben ebend übersichtlicher zu halten.
Somit sollte irrecv.resume(); ja nach jedem LED Effekt wieder aktiviert werden.
Genauso bin ich auch mit dem Orangenem Theaterchase für Motorlaufen verfahren. Ich habe es gar nicht mehr oben bei den Eingaben zu stehen sondern direkt beim void motorLaufen eingefügt.
Da das Orange ja nur für das öffnen/schließen da ist, startet es auch automatisch sobald motorlaufen aktiviert wird.
Ja habe ich auch schon mitbekommen das er nicht direkt einen Aus Befehl erteilt, mal ja mal nein. Theaterchase mit motorlaufen geht er danach aus, wenn ich ein theaterchase auf IR lege bleibt es an.
Ich möchte eigentlich beides für bestimmte Aufgabe, sollte nur wissen wie ich das genau steuer.
Hab heute mal den Code der Stepper.h Bibliothek angesehen, und festgestellt, dass die ja gar nicht blockierend ist. Zumindest befindet sich da im Code gar kein Delay. Wenn du wissen willst wie man das macht, sag Bescheid.
Könntest du mal testen ob das stimmt? Wenn ja müsstest du während der Motor läuft z.B. das Lauflicht über die FB starten können.
Ich würde erwarten, dass es geht, aber das der Motor während dem Lauflicht stoppt und die Schritte nach Abschluss des Lauflichts fertig laufen.
Damit hätte man schon mal die Hälfte der Miete.
Ja habs probiert aber während der Motor läuft(ohne LED, nur rein der Motor) geht nix, IR nimmt keine Befehle an, erst nachdem der Motor wieder still steht. Am KP selbiges.
Hab die IR mal komplett raus um nur über KP LED zu starten während der Motor läuft aber er blockiert definitiv.
Der Distanzsensor ebenso wie der Buzzer scheinen auch nicht blockierend zu sein. Wenn du an der Stelle mal das Theaterlicht auskommentierst müsste auch das gleichzeitig laufen.
Ja die zwei laufen absolut problemlos, gehen gleichzeitig an und auch gleichzeitig aus. Was meinst du mit "auskommentierst "? Dahinter // ? Ich dachte das wird vom Programm nicht berücksichtigt?
Oder soll ich es nur zum Buzzer hinzufügen, das hatte ich ja schon, also so wie es im Video zu sehen war, springt beides gleichzeitig an wenn der Sensor Alarm gibt.
Ich bin aber gerade ,dank eurer Hilfe versteht sich auf eine mega Idee gekommen , schon getestet läuft.

Das Theaterchase bezieht sich ja auf mehrere Aufgaben (öffnen , schließen, Alarm, led) Die Geschwindigkeit kann ich bei den Tasten Zeilen ändern aber die Dauer nur ganz unten im void theaterChase.
Hatte halt ein gesundes Mittelmaß für alle Effekte eingegeben aber der Alarm nervt mich jetzt schon(zeigt vor allem genau auf die Tür,sobald man rein oder rausgeht


).
Also Buzzer und LED springen zwar gleichzeitig an aber die LED blockiert das Buzzer "Aus" für die dauer ihrer Laufzeit.
Jetzt hab ich doch spaßeshalber mal ein void theaterChase1 erstellt(Betonung liegt auf der 1 am ende) und die Laufzeit komplett runtergeschraubt damit der Buzzer wirklich nur läuft wenn was im Weg ist.
Klappt einwandfrei, und der Standard theaterChase läuft für die anderen Funktionen wie vorher.
Warum der Distanz Alarm manchmal losgeht kann ich im Code auch nicht erkennen. Ich vermute, dass das Signal auf dem echoPin nicht ganz sauber ist und zufällig die Werte falsch interpretiert werden. Ich würde mal versuchen die Funktion nicht ganz so oft aufzurufen. Vielleicht ist das so wie es jetzt ist zu schnell, und die Auswertung überschreibt sich bei jedem Durchlauf selbst und bringt sich durcheinander.
Füg mal folgendes ein:
Code:
if (millis()%10 == 0){
//Den Distanzcode hier einfügen
}
Was macht diese Zeile? Das Stichwort ist "Modulo" bzw. "Division mit Rest" (Division mit Rest – Wikipedia) bzw. (Arduino - Modulo).
Wenn du den Wert der millis Funktion durch 10 teilst und kein Rest bleibt, dann wird der Code ausgeführt. Der Code läuft dann nur noch jede 10te Millisekunde. Die Messung ist dann nicht mehr so empfindlich. Du kannst den Wert auch ändern, wenn du <10 nimmst wirds öfter bzw. schneller, >10 wirds langsamer.
Könnte man mal ausprobieren.
Also erst mal hab den Code eingefügt aber ohne große Änderung.
%10 und <10 geht der Alarm trotzdem nach jedem LED Effekt an(nur bei den die manuell gestartet werden,bzw eigentlich nur bei dem weißen colorwipe( IR taste 0, KP Taste 1) bei einem grünen colorwipe auf IR 4 oder Öffnen schließen geht kein Alarm an.
Womit ich auch vorher schon die selbe Vermutung hatte. Unsauberes Signal bzw. wozu brauchte man einen Mantelstromfilter

Wenn die LEDs laufen kommen aus dem Buzzer schleifende Geräusche, als ob er Saft bekommt aber nicht genug für einen Ton.
Ja und wenn ich >10 einstelle geht der Alarm gar nicht mehr. Zumindest kann ich dann vorm Sensor tanzen und keine Reaktion
VORSCHAU: Alter wer soll da noch durchblicken?
Dann habe ich noch ein nicht blockierendes Beispiel für die Neopixel gefunden. Avoiding Using Delay in Arduino – NeoPixels | BitchWhoCodes | Stacey Mulcahy - a Microsoft Technical Evangelist
Okay also die Hausaufgabe ist heftig.
Hab schon etwas experimentiert aber das ist auch genau der Beispielsketch der nichtmal mit Delay bei mir läuft.
Angabe 120 Numpixels(oder 0-119, schon bemerkt) es leuchtet aber immer nur eine.
Er hat auf der Seite ja die unit16,32 definiert ,das schon mal gut aber die unit8 nicht.
Aber egal an dem Brocken habe ich noch etwas zu kauen, ich kriege das schon raus.
Momentan ist sein sketch ja noch kein Effekt bzw lauflicht ich denke mal ich muß die Werte nur richtig eintragen, denn so wie er dort ist macht er noch gar nix.
Zum Thema Motor nochmal abschließend: Er blockiert die anderen Aufgaben auf jeden Fall, wäre es jetzt an der Zeit nochmal von vorne anzufangen?
AccelStepper.h
