Forum: Mikrocontroller und Digitale Elektronik ESP32 - Taster Zeitschaltung


von Björn C. (Gast)


Lesenswert?

Hi,

ich habe mir einen ESP32 genommen, 3 Taster angeschlossen und 3 WS2812b 
LEDs.

Wenn ich einen Taster drücke, geht die entsprechende LED an.

Nun möchte ich aber, das die Zeit des Drückens gemessen wird, und beim 
Loslassen des Tasters die LED von orange auf rot umspringt.

Also:
Taster 1 wird für 5.76s gedrückt, LED 1 wird orange
Taster 1 wird losgelassen, LED 1 springt von orange auf rot, und 
leuchtet 5.76s, Danach geht sie aus.

Weiterhin:
Wenn einer der Taster gedrückt wurde, oder eine der LED orange/rot 
leuchtet, Sollen alle Taster abgeschaltet werden, also ein drücken der 
Taster soll keine Auswirkungen haben. Erst, wenn alle LEDs aus sind, 
können die Taster wieder betätigt werden.

Mein Problem ist, das ich zu wenig Ahnung in der Programmierung habe, 
und ich bis morgen früh, 10.10. 4Uhr fertig sein soll.

Das ganze ist ein Geschenk für einen Arbeitskollegen, der in Rente geht, 
und als Erinnerung eine Sprechstelle bekommt, die zumindest ein paar 
Funktionen bekommen soll...

wer kann mir weiterhelfen?
1
void loop(){
2
  if (digitalRead(18)==HIGH){
3
    pixels.setPixelColor(1, pixels.Color(255, 191, 0)); // Moderately bright yellow color.
4
    pixels.show();
5
}
6
7
if (digitalRead(19)==HIGH){
8
    pixels.setPixelColor(2, pixels.Color(255, 191, 0)); // Moderately bright yellow color.
9
    pixels.show();
10
}
11
12
if (digitalRead(21)==HIGH){
13
    pixels.setPixelColor(3, pixels.Color(255, 191, 0)); // Moderately bright yellow color.
14
    pixels.show();
15
}
16
}

von Brain 2.0 (Gast)


Lesenswert?

Björn C. schrieb:
> Mein Problem ist, das ich zu wenig Ahnung in der Programmierung habe,
> und ich bis morgen früh, 10.10. 4Uhr fertig sein soll.

Dann hättest du evtl. früher anfangen sollen.

Schau dir mal millis() an und dazu BlinkWithoutDelay als Beispiel.

von Björn (Gast)


Lesenswert?

Wenn ich jedoch erst gestern gesagt bekommen habe, das ich das tun soll, 
kann ich leider nicht früher anfangen...

Und wenn ich nicht alles hinbekomme, müssen die mit dem Leben, was sie 
bekommen...

von Brain 2.0 (Gast)


Lesenswert?

Björn schrieb:
> Wenn ich jedoch erst gestern gesagt bekommen habe, das ich das tun soll,
> kann ich leider nicht früher anfangen..

Ok, da magst du Recht haben.

von Mario M. (thelonging)


Lesenswert?

Brain 2.0 schrieb:
> Schau dir mal millis() an und dazu BlinkWithoutDelay als Beispiel.

Und zusätzlich noch 
https://www.mikrocontroller.net/articles/Statemachine

von Stefan F. (Gast)


Lesenswert?

Björn schrieb:
> Wenn ich jedoch erst gestern gesagt bekommen habe, das ich das tun soll,
> kann ich leider nicht früher anfangen...
> Und wenn ich nicht alles hinbekomme, müssen die mit dem Leben, was sie
> bekommen...

Ach was, wirklich? Wer hätte das gedacht.

Willst du uns damit sagen dass wir Schuld an der Misere sind?

Ich habe eher das Gefühl, dass es sich hier um eine verbummelte 
Hausaufgabe handelt.

von Manfred (Gast)


Lesenswert?

Stefan F. schrieb:
> Ich habe eher das Gefühl, dass es sich hier um eine verbummelte
> Hausaufgabe handelt.

Hausaufgabe nur indirekt, aber verbummelt kann man kaum bestreiten:
Beitrag "Sprechstelle für Arbeitskollegen"

Brain 2.0 schrieb:
> Schau dir mal millis() an und dazu BlinkWithoutDelay als Beispiel.

Im Gegenteil, hier ist delay das Mittel der Wahl, weil eine Blockierung 
ausdrücklich gewünscht wird:
Björn C. schrieb:
> Sollen alle Taster abgeschaltet werden, also ein drücken der
> Taster soll keine Auswirkungen haben.

Das heißt, wenn gedrückt, muß er sich die millis() vom µC merken und 
solange in einer Schleife bleiben, bis die Taste gelöst wird. Die 
gemerkten millis() werden von den aktuellen millis() abgezogen und ein 
delay mit diesem Wert gefüttert.

von Stefan F. (Gast)


Lesenswert?

Manfred schrieb:
> Das heißt, wenn gedrückt, muß er sich die millis() vom µC merken und
> solange in einer Schleife bleiben, bis die Taste gelöst wird.

Kann man machen, oder die pulseIn() Funktion benutzen.

von Björn (Gast)


Lesenswert?

Manfred schrieb:
> Stefan F. schrieb:
>
>> Ich habe eher das Gefühl, dass es sich hier um eine verbummelte
>> Hausaufgabe handelt.
>
> Hausaufgabe nur indirekt, aber verbummelt kann man kaum bestreiten:
> Beitrag "Sprechstelle für Arbeitskollegen"

Stimmt nicht ganz mit verbummelt...
Die zuerst gewünschte Schaltung mit Taster an, LED an war da schon 
vorhanden...

Nur die Erweiterung mit LED rot wenn Taster aus, mit Schaltzeit etcpp 
kam erst gestern auf...

> Brain 2.0 schrieb:
>
>> Schau dir mal millis() an und dazu BlinkWithoutDelay als Beispiel.
>
> Im Gegenteil, hier ist delay das Mittel der Wahl, weil eine Blockierung
> ausdrücklich gewünscht wird:

Genau - hab es jetzt auch hinbekommen, vielleicht nicht wie ein 
Meisterprogrammierer, aber es geht...

von Manfred (Gast)


Lesenswert?

Stefan F. schrieb:
>> Das heißt, wenn gedrückt, muß er sich die millis() vom µC merken und
>> solange in einer Schleife bleiben, bis die Taste gelöst wird.
> Kann man machen, oder die pulseIn() Funktion benutzen.

Upps, der ist ja interessant. War zwar nicht meine Frage, aber 
trotzdem danke!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.