ESP32 - Taster Zeitschaltung

Gast #7215885
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
}
Gast #7216017
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...
Gast #7216046
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.
Gast #7216245
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.
Gast #7216374
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...
Gast #7216418
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!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren