- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 12

Thema: Auslösen der Taster-Funktion?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    31.03.2014
    Beiträge
    173

    Auslösen der Taster-Funktion?

    Hallo zusammen,

    ich habe einen Sketch nachgebaut, bei dem 8 Taster an den Ausgängen eine definierte Schaltzeit ausgeben (z.B. 400 msek), unabhängig davon, wie kurz oder wie lange ich einen jeweiligen Taster drücke. Das ganze funktioniert auch. Allerdings löst die Funktion erst dann aus, wenn ich den Taster wieder loslasse. Wenn ich den Taster z.B. 1 min drücke, passiert da gar nichts. Ich möchte aber gern, dass die Funktion genau dann auslöst, wenn ich den Taster runterdrücke (nicht erst dann, wenn ich ihn wieder loslasse).
    Die Taster-Kontakte schliessen gegen GND, gegen Plus liegen jeweils Widerstände (Pull-Up).

    Könnt Ihr mir bitte sagen, woran das liegt? Ist das im Programm begründet? Oder liegt das an der Beschaltung der Taster (Pull-Up oder besser Pull-Down)? Wie kann ich das ändern?


    Andi

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von White_Fox
    Registriert seit
    04.10.2011
    Beiträge
    1.473
    Ich verstehe zwar kaum was du meinst, du schreibst ziemlich wirr.

    Aber ich nehme an daß du die steigende Flanke eines Digitaleingangs auswertest und eigentlich lieber die fallende Flanke auswerten willst.

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    Zitat Zitat von Andi#87 Beitrag anzeigen
    Ist das im Programm begründet? Oder liegt das an der Beschaltung der Taster (Pull-Up oder besser Pull-Down)? Wie kann ich das ändern?
    Hallo,
    dazu solltest Du Programm und Schaltplan zeigen.

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.070
    Es ist so wie White_Fox bereits schrieb.

    Du erkennst die steigende Flanke, du musst umstellen auf fallende Flanke. Das ist ein rein softwaretechnisches Problem. Poste den Code und den Plan.

    MfG Hannes

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.12.2017
    Beiträge
    169
    Vielleicht bin ich am Thema vorbei, aber wenn Du den Taster nur entprellen willst, dann hilft dir vielleicht dieser Link: https://elektro.turanis.de/html/prj059/index.html

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    31.03.2014
    Beiträge
    173
    Es sind 8 PullUp-Widerstände, die fest an +5V anliegen, die jeweils damit verbundenen 8 Taster schliessen bei Tasterbetätigung gegen GND.

    Hier ist der Sketch:



    #include <ButtonDebounce.h>
    #include <millisDelay.h>


    //Establish output time
    const unsigned long Debounce_Delay = 10;
    const unsigned long Out_Delay = 400;

    //Establish output pin numbers
    int Out_1 = 11;
    int Out_2 = 12;
    int Out_3 = A0;
    int Out_4 = A1;
    int Out_5 = A2;
    int Out_6 = A3;
    int Out_7 = A4;
    int Out_8 = A5;

    //Establish ButtonDebounce instances
    ButtonDebounce btn1(2,Debounce_Delay);
    ButtonDebounce btn2(3,Debounce_Delay);
    ButtonDebounce btn3(4,Debounce_Delay);
    ButtonDebounce btn4(5,Debounce_Delay);
    ButtonDebounce btn5(6,Debounce_Delay);
    ButtonDebounce btn6(7,Debounce_Delay);
    ButtonDebounce btn7(8,Debounce_Delay);
    ButtonDebounce btn8(9,Debounce_Delay);

    //Establish millisDelay instances
    millisDelay Out1_Delay;
    millisDelay Out2_Delay;
    millisDelay Out3_Delay;
    millisDelay Out4_Delay;
    millisDelay Out5_Delay;
    millisDelay Out6_Delay;
    millisDelay Out7_Delay;
    millisDelay Out8_Delay;

    void setup()
    {
    //Establish buttonDebounce callbacks
    btn1.setCallback(btn1_Changed);
    btn2.setCallback(btn2_Changed);
    btn3.setCallback(btn3_Changed);
    btn4.setCallback(btn4_Changed);
    btn5.setCallback(btn5_Changed);
    btn6.setCallback(btn6_Changed);
    btn7.setCallback(btn7_Changed);
    btn8.setCallback(btn8_Changed);

    //Set output pinouts
    pinMode(Out_1,OUTPUT);
    pinMode(Out_2,OUTPUT);
    pinMode(Out_3,OUTPUT);
    pinMode(Out_4,OUTPUT);
    pinMode(Out_5,OUTPUT);
    pinMode(Out_6,OUTPUT);
    pinMode(Out_7,OUTPUT);
    pinMode(Out_8,OUTPUT);

    //Initialize outputs
    digitalWrite(Out_1,LOW);
    digitalWrite(Out_2,LOW);
    digitalWrite(Out_3,LOW);
    digitalWrite(Out_4,LOW);
    digitalWrite(Out_5,LOW);
    digitalWrite(Out_6,LOW);
    digitalWrite(Out_7,LOW);
    digitalWrite(Out_8,LOW);
    }

    void loop()
    {
    //Check output delays for completion
    if (Out1_Delay.justFinished())
    {digitalWrite(Out_1,LOW);}
    if (Out2_Delay.justFinished())
    {digitalWrite(Out_2,LOW);}
    if (Out3_Delay.justFinished())
    {digitalWrite(Out_3,LOW);}
    if (Out4_Delay.justFinished())
    {digitalWrite(Out_4,LOW);}
    if (Out5_Delay.justFinished())
    {digitalWrite(Out_5,LOW);}
    if (Out6_Delay.justFinished())
    {digitalWrite(Out_6,LOW);}
    if (Out7_Delay.justFinished())
    {digitalWrite(Out_7,LOW);}
    if (Out8_Delay.justFinished())
    {digitalWrite(Out_8,LOW);}

    //Check buttons pressed
    btn1.update();
    btn2.update();
    btn3.update();
    btn4.update();
    btn5.update();
    btn6.update();
    btn7.update();
    btn8.update();
    }

    // ButtonDebounce callbacks
    void btn1_Changed(int state)
    {
    if (state == HIGH)
    {
    digitalWrite(Out_1,HIGH);
    Out1_Delay.start(Out_Delay);
    }
    }

    void btn2_Changed(int state)
    {
    if (state == HIGH)
    {
    digitalWrite(Out_2,HIGH);
    Out2_Delay.start(Out_Delay);
    }
    }

    void btn3_Changed(int state)
    {
    if (state == HIGH)
    {
    digitalWrite(Out_3,HIGH);
    Out3_Delay.start(Out_Delay);
    }
    }

    void btn4_Changed(int state)
    {
    if (state == HIGH)
    {
    digitalWrite(Out_4,HIGH);
    Out4_Delay.start(Out_Delay);
    }
    }

    void btn5_Changed(int state)
    {
    if (state == HIGH)
    {
    digitalWrite(Out_5,HIGH);
    Out5_Delay.start(Out_Delay);
    }
    }

    void btn6_Changed(int state)
    {
    if (state == HIGH)
    {
    digitalWrite(Out_6,HIGH);
    Out6_Delay.start(Out_Delay);
    }
    }

    void btn7_Changed(int state)
    {
    if (state == HIGH)
    {
    digitalWrite(Out_7,HIGH);
    Out7_Delay.start(Out_Delay);
    }
    }

    void btn8_Changed(int state)
    {
    if (state == HIGH)
    {
    digitalWrite(Out_8,HIGH);
    Out8_Delay.start(Out_Delay);
    }
    }

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    899
    Wenn der Taster beim Drücken auf Low gezogen wird und Du auf das Low reagieren willst, ist es auch sinnvoll, in den Funktionen
    Code:
    void btnX_Changed(int state)-Funktionen
    (mit X= 1..8 )
    auf LOW zu prüfen

    Code:
    if (state == LOW)

Ähnliche Themen

  1. Antworten: 6
    Letzter Beitrag: 07.11.2011, 18:24
  2. Taster als Schalter aber mit Reset Funktion
    Von BacT im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 27.11.2010, 15:18
  3. Probleme mit Taster zum Auslösen des externen Interrupts
    Von Jaccaranda im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 11
    Letzter Beitrag: 10.03.2010, 14:28
  4. Funktion gibt Funktion zurück... nächstes Problem
    Von Jaecko im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 19.12.2008, 09:51
  5. Mit Taster 1 auswählen und Taster 2 bestäti. " Menü aus
    Von Luppi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 07.04.2006, 22:07

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen