nach meiner heutigen Vorstellung- vielen Dank für die netten Feedback´s habe ich auch schon das erste Problem und komme einfach nicht weiter.
Das Projekt soll so aussehen: ich drücke einen Taster, LED1 geht an, bleibt z.B. 10 sek. an, danach aus. Das ganze geht von vorn los, wenn ich den Taster wieder drücke.
Das habe ich ja noch mit einem abgewandelten Sketch hinbekommen. Nun habe ich eine zweite LED eingebaut, die soll 1,5 sek. nach dem Tasterdruck ebenfalls an gehen und nach 0,5 sek. wieder aus. Auch das habe ich hinbekommen, aber LED1 geht nach der halben sek. ebenfalls mit aus, und das soll eben nicht sein, die soll erst nach den 10 sek. ausgehen. Ich bekomme das einfach nicht hin, ich weiß nicht was ich tun muß, damit das so geht.
Ich hänge mal den Sketch an, aber bitte nicht lachen, ich kann es noch nicht anders. Ich möchte auch keinen fertigen Sketch von euch, nur Tips, so nach dem Motto, da fehlt das und das, ich will das dann selber programmieren und dabei lernt man am besten.
int Zustand = 0;
int LED1 = 8;
int LED2 = 10;
int Taster = 9;
Delay ist so gut es geht in Sketches, die keine Lehrbeispiele sind zu vermeiden, da es ein blockierender Befehl ist. Heißt so viel wie: in der Zeit des Delays mach Dein Arduino nichts, außer warten. Er reagiert auf keine Sensoren, keine Eingaben, gar nichts......
Vielen Dank erstmal für die prompten Antworten, da ist viel Potential drin und ich kann ausprobieren.
Als Anfänger hangelt man sich nun mal an den Anfängerbeispielen lang um die ersten Erfolge zu feiern und da wird eben viel mit delay gearbeitet, aber ich werd mir die andere Methode angewöhnen, in der die Zeit gezählt wird und in der auch andere Aktionen ausgeführt werden können.
Ich halt euch auf dem Laufenden.
In den einfachen Beispielen hat das auch keine negativen Auswirkungen. Da wird eine Sache gezeigt und das wars. Eine komplizierte Zeitsteuerung würde da auch von anderen Sachen ablenken.
Wenn man dann aber versucht zwei solche Beispiele zusammenzufügen und die sollen nebeneinander laufen bekommt man Probleme
hab gestern Abend die von Theseus vorgeschlagene Variante an meinen Sketch drangehängt und nun funktioniert es, und bei dieser Anwendung auch kein Problem, wenn der Arduino während der Aktion blockiert ist.
Die Empfehlung von Eisebaer habe ich versucht umzusetzen, aber ich kapier das nicht, irgendwie hab ich da ein Brett vor dem Kopf. ich hab zwar einen Sketch geladen und den entsprechend nachgebaut und es hat auch funktioniert, aber abändern auf meine Bedürfnisse, das hab ich nicht hinbekommen. Was mir fehlt ist so eine Art Lexikon, in dem die Befehle kurz beschrieben sind und auf deren Bedeutung hingewiesen wird. Sowas hab ich nicht gefunden. Vielleicht hat jemand einen Link?
Aber ich wird mich weiter reinhängen und irgendwann platzt der Knoten, bestimmt.
Auch ein Buch kann beim Einstieg helfen. Ich kann Boxall: Arduino-Workshops oder Arduino-Praxiseinstieg-Professional-Thomas-Brühlmann empfehlen. Ich hatte Glück und sie waren in der städtischen Leihbibliothek vorrätig.
Auf Papier gedruckte und erklärte Programmbeispiele finde ich deutlich einfacher nachzuvollziehen und zu verstehen als alles nur auf dem Bildschirm zu sehen.
autoralf:
... aber ich kapier das nicht, irgendwie hab ich da ein Brett vor dem Kopf.
Das erinnert mich an Auf Kriegsfuss mit den millis mit vielen Hinweisen und Beispielen. Besonders schön finde ich den Nachtwächter, der ums Haus geht (siehe dort #28).
Mein derzeitiger Liebling zum Nachschlagen ist "C von A bis Z von Jürgen Wolf", was da in #3 verlinkt ist.
Dann habe ich mir Deine Aufgabenstellung genommen und so implementiert, wie ich das für ein größeres Projekt machen würde. Das sieht recht überkandidelt aus. Aber Du möchtest ja den Schritt machen von einem einfachen Beispiel hin zu einem richtigen Projekt.
Ein üblicher Bestandteil des "Brett vor dem Kopf" ist die Vorstellung, loop() würde den Programmablauf beschreiben. ( falsch )
Wenn man sich im Kopf angewöhnt, dass loop() nur beschreibt, was in einem beliebigen Moment gemacht werden soll, und dass man dazu ein paar Zustandsmerker braucht, ist man auf dem richtigen Weg.
Bei zeitabhängigen Steuerungen merkt man sich in der Regel, seit wann die Wartezeit läuft.(BlinkwithoutDelay)
Bei interaktiven Sachen, ob der jetzt gedrückte Taster schon erkannt und verarbeitet wurde, oder ob das ein neues Ereignis ist.
Ein üblicher Bestandteil des "Brett vor dem Kopf" ........
Och, da wüsste ich auch noch einen:
Man hat ein tolles Programm geschrieben, mit delay(), und das tuts auch prächtig.
Und jetzt soll da noch irgendwas anderes passieren.....
Als erstes auffällig ist, dass delay() andere Programmteile blockiert.
Also ist die erste naive, konsequente und leider auch falsche Idee, man müsste delay() durch etwas nicht blockierendes ersetzen. Auf Systemen mit präemptiven Multitasking würde das prächtig funktionieren, aber da sind wir mit unseren Arduinos eher nicht.
Es ist an der Zeit einiges von dem frisch gelerntem über Bord zu werfen und in anderen Strukturen zu denken.
In den meisten Fällen landet man bei einer schlichten Form des kooperativen Multitasking.
Ganze Horen von einfachen endlichen Automaten, werden sich tummeln.
Lang laufende Schleifen werden "ausgerollt".
Für ganz dringende Dinge gibts dann ja immer auch noch die Interrupts.
ziemlich viel Input (um mal mit dem Arduino Slang zu sprechen ). Das Brett wird immer dicker .
Ich habe mir nun auch noch das Buch, welches Theseus mir empfohlen hat, bestellt. Außerdem habe ich einige Seiten mit den Grundbegriffen und deren Bedeutung ausgedruckt. Aber es hat noch nicht "klick" gemacht.
Nun hab ich gerade ein Sketch zum Laufen bekommen, in dem eine LED ohne delay blinkt.
So sieht der aus:
byte ledPin = 11;
boolean value = HIGH;
unsigned long previousMillis = 0;
unsigned long interval = 500;
void setup()
{
pinMode(ledPin, OUTPUT);
}
void loop()
{
if (millis() - previousMillis > interval) {
previousMillis = millis();
value = !value;
digitalWrite(ledPin, value);
}
}
Das erste Problem ist schon, wie kann ich die Einschalt-und Ausschaltzeiten ändern? Jetzt blinkt es gleichmäßig?
Außerdem hab ich versucht eine zweite LED einzubinden, geht nicht... , und da red ich noch nicht mal von nem Einbinden eines Tasters...
Ralf
der momentan völlig verzweifelt die blinkende LED anstarrt...
Ich bin wahrscheinlich zu doof dazu, ich weiß nicht mal wo ich die Codeschnipsel einfügen muss, die ihr mir freundlicherweise geschrieben habt. Im Moment leuchtet die LED dauernd und ich bekomme beim Hochladen die unterschiedlichsten Fehlermeldungen.
Vielleicht gibt´s ja bei uns in der Volkshochschule nen Grundkurs für besonders blöde.
ich bekomme beim Hochladen die unterschiedlichsten Fehlermeldungen.
Das Raten bei nichtssagenden Posts haben wir alle im Selbststudium gelernt, da habe ich keinen Volkshochschul-Kurs für gefunden.
Uwe hat wohl mal eine Wahrsage-Glaskugel von einer entfernten Großtante geerbt, aber auf die ist in letzter Zeit nicht mehr so viel Verlass. (Seit Arduino Genuino heisst, wird sie wohl etwas trüb geworden sein. die Kugel, nicht die Tante)
Keine Ahnung, ob deine "unterschiedlichsten Fehlermeldungen" den gleichen oder unterschiedliche Gründe haben. Und welche(n), ist noch schwerer zu raten. Sorry.
Wenn du einen Blink Sketch mal wieder ans Laufen kriegst, kannst du ja mal ausprobieren, was bei vorsichtigen Änderungen passiert.
Ansonsten gilt: Fehlermeldungen sind besser als gar nichts. Haben oft sogar schwer verständlichen aber immerhin lesbaren Text.