- fchao-Sinus-Wechselrichter AliExpress         
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
    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

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    31.03.2014
    Beiträge
    165
    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);
    }
    }

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    872
    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)

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    31.03.2014
    Beiträge
    165
    Danke für die Antwort und Korrektur, werde das heute Nachmittag ausprobieren

    In diesem Fall bleibt es bei den PullUp-Widerständen. Das heisst, es liegt im Ruhezustand der Schaltung über diese PullUp-Widerstände zunächst immer HIGH an den Eingängen des Arduino an. Mit if (state == LOW) reagiert der ATMEL bzw. der Sketch auf die fallende Flanke.
    Frage für mich zum Verständnis: Würde es dasselbe Resultat ergeben, wenn ich den Sketch so belasse, wie er ursprünglich war if (state == HIGH) , dafür aber die Widerstände beschalte als PullDown? Dadurch würde an den Eingängen im Ruhezustand zunächst immer LOW, und erst bei Tasterbetätigung HIGH anliegen. Das würde dem ursprünglichen Sketch und meinem Anliegen auch entsprechen, oder?
    Also entweder PullUp und if (state == LOW) , oder PullDown und if (state == HIGH) ?


    Andi

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.065
    Zuerst einmal, bitte Code immer in Codetags schreiben, so wie es bei Holomino ist. Dadurch wird der Post lesbarer/übersichtlicher.


    Bei diesem Code reagierst du mit dem "if (state=...)" auf eine Flanke sondern auf einen Zustand.

    Ich weiß nicht welche Funktion du gerne hättest.

    Abfrage mit "if (state=...)" reagierst du auf einen Zustand. Bei jedem Durchlauf des Programms wird der Status geprüft und angesprungen.
    Bedeutet das jedes mal bei einem Low (wenn auf state==low geprüft wird) den jeweiligen Ausgang setzt.

    Wenn du auf eine Flanke reagieren möchtest, benötigst du den aktuellen und den letzten Zustand. Die Flanke dauert genau einen Programmdurchlauf.
    Hier in Pseudocode:
    Code:
    if (Status_aktuell==low && Status_alt==high)
    {
    Programm wird ausgeführt wenn fallende Flanke
    }
    Status_alt = Status_aktuell
    Zu deiner Frage

    Du kannst im Programm das high gegen ein low oder den Widerstand und den Taster tauschen. Ich verwende häufig (eigentlich immer wenn nötig) die internen Widerstände. Dadruch prüfe ich auf Low-Zustand.

    MfG Hannes

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    31.03.2014
    Beiträge
    165
    Danke für die Antwort.

    Betreffs "...immer in Codetags schreiben..." Ich weiss nicht, wie das gemacht wird (sorry)

    Andi

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.655
    Zitat Zitat von Andi#87 Beitrag anzeigen
    .. "...immer in Codetags schreiben..." Ich weiss nicht, wie das gemacht wird (sorry) ..
    Das geht etwa so.

    1) Code (z.B. copy&paste) in das Editor-Fenster einfügen.

    ......Bild hier  

    Text markieren (drüber streifen mit gedrückter Maustaste), dann auf den "Lattenzaun" oben in der Werkzeug(kiste)leiste klicken; siehe oben | Code einfügen [CODE] |

    ......Bild hier  

    Danach abspeichern - oder mal ansehen. Sieht so aus:

    ......Bild hier  

    OK ? War das verständlich ?
    Ciao sagt der JoeamBerg

Ähnliche Themen

  1. Antworten: 6
    Letzter Beitrag: 07.11.2011, 17:24
  2. Taster als Schalter aber mit Reset Funktion
    Von BacT im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 27.11.2010, 14: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, 13: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, 08: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, 21:07

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress