Hey Leute,
ich habe ein problem... ich möchte eine LED über ein Taster steuern, kein problem soweit nur ich möchte das er z.b. bei einer tasten-drück-dauer von 3000 millis schneller blinkt und wenn ich den taster nur einmal kurz anklick z.b 1000 millis dann soll die led wieder langsamer blinken.... zu mir ich bin Schüler und kann schon etwas nur bin ich kein profi .... über hilfe würde ich mich sehr freuen vllt ja auch mit erklärung
lg
P.S.: Ich würde es mit millis versuchen nur hab ich keine ahnung wie ich die funktion frage wie weit sie schon gezählt hat
wo ist der Beitrag mit der Küche und kochen, womit die Anwendung von millis() wunderschön erklärt wurde?
Edit:
Ich finde den Beitrag leider nicht mehr, war 1A anschaulich erklärt.
millis ist nur ein Zähler, der läuft permanent. Man benötigt eine Vergleichsvariable, einen Merker, mit der man eine Differenz abfragt. Wenn die Differenz erreicht ist, macht man seine Dinge, ansonsten eben nicht.
Man guckt also immer mal wieder auf die Uhr, wenn die Zeit ran ist macht man was, wenn nicht, dann eben nichts.
TarekBilinger:
... gibt es noch ander möglichkeiten mein programm zu erstellen?
Dein Programm ist dein Programm und das musst du selbst erstellen. Wir helfen dabei.
Ob du es in der Arduino-IDE oder in einem anderen, beliebigen Tool erstellst, sei dir überlassen.
Wie du millis verwendest, kannst du in zahlreichen Beiträgen nachlesen. Z.B. hier: BlinkWithoutDelay oder auch hier: millis und natürlich hier: Und nochmal.
Auch solltest du die Grundlagen (Basics) lernen, die jeder IDE beigefügt sind.
Zu millis():
Ist eigentlich ganz einfach. Du erstellst eine globale Variable unsigned long, z.b T oder Time oder sonst was...
Dann prüfst du den Button.
Ist der Button gedrückt, setzst du den Wert der Variable auf den Wert von millis:
Time = millis();
Millis() gibt dir bzw. der Variable die Millisekundenzeit, seit dem der Arduino bzw. das Programm läuft.
Danach müsstest du nur gucken wann der button nicht mehr gedrückt wird.
Dann vergleichst du Time mit millis() bzw. Subtrahierst die beiden und prüfst wie lange gedrückt wurde:
if((millis() - Time) == 3000) // millis() - Time ergibt die Differenz, Differrenz = gedrückte Zeit
Jetzt brauchst du eben noch eine Funktion, die deine LED zum leuchten/blinken bringt:
Am einfachsten wäre das wohl mit der delay() Funktion. Allerdings hast du damit das Problem, dass du wärend der Programmpause, das Programm/LED nicht mehr steuern kannst.
Deshalb:
guck dir das BlinkWithoutDelay() Beispiel an und benutze es:
Doc_Arduino:
Er muß den Taster auch noch entprellen.
Entweder zu Fuss oder nimm die Bounce2 Library.
... und auch noch die Signalflanke des Tasters auswerten. Beispiel duration.ino von Bounce2 macht das schon fast alles. Praktisch ist es, die Rückgabewerte zu verwenden:
if ( debouncer.update() ) {
if (debouncer.read()) {
TarekBilinger:
... ich möchte das er z.b. bei einer tasten-drück-dauer von 3000 millis schneller blinkt und wenn ich den taster nur einmal kurz anklick z.b 1000 millis dann soll die led wieder langsamer blinken.
Da Du nicht genau 3000 oder 1000 Millisekunden treffen kannst, könntest Du eine Schranke bei 2000 Millisekunden verwenden und nur auf kleiner oder größer abfragen. Alternativ würden auch Zeitfenster 500 bis 1500 und 2500 bis 3500 funktionieren. Aber das hängt natürlich davon ab, was Du eigentlich machen willst.