ESP32 - Taster Zeitschaltung

Gast #7215885
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
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.
Gast
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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 4 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.