- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 28

Thema: Tastenentprellung +++ Fehlerhaft

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    HaWe
    Gast
    du kannst, wie schon mal vorgeschlagen wurde, entweder einen C-Strukturtyp mit allen wesentlichen Variablen anlegen und dann für jeden Taster davon einen "Variablen-Ableger" erstellen oder eine C++ Klasse erstellen mit allen Variablen und Methoden, und davon für jeden Taster eine eigene Objekt-Instanz erstellen.
    Wenn du das selber schaffst, wirst du sicher viel lernen.
    Der einfachere Weg geht ntl über fertige Libs, denn du bist ntl nicht der erste, der sich darüber Gedanken macht - auch das wurde ja bereits vorgeschlagen.

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.06.2019
    Beiträge
    148
    GM!
    Kontaktentprellung klappt, auch mit mehereren Kontakten unabhängig.
    Nun versuche ich universelle Blocks aufzubauen - Bibliothekaufbau kommt zum Schluss.

    Bei static Variablen bin ich mir der Namesgebung unschlüssig.
    Kann es ein Problem geben, wenn ich die gleichen Var.Namen in unterschiedlichen Funktionsblöcken vergebe?
    Bsp: (beide Var "KontakPin" haben nichts miteiander zu tun)
    HTML-Code:
    int Funktion1() {
      static int KontaktPin;
      ...sonst was...
    }
    
    int Funktion2() {
      static int KontaktPin;
      ...sonst was...
    }
    __________________________________________________ _
    | Sprache: C | Teensy 3.2 | Arduino 2.x | Status: EwigerAnfaenger |

  3. #3
    HaWe
    Gast
    hallo,
    nein, in unterschiedlichen Funktionen dürfen die lokalen static Variablen heißen wie sie wollen, auch identisch, genauso als wären sie nicht static.

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.06.2019
    Beiträge
    148
    Passt!
    Beliebig viele Tasten/Kontakte verwendbar, nacheiender oder ~gleichzeitig~.
    Pro Taste/Kontakt wird ledigtlich der "Zwischenspeicher" TasteMi, TasteLi kopiert und umbennat.
    Entpreller() setzt die Entprellzeit (Bsp.5ms) aus Sicherheitsgründen hinter die letzte Zustandsänderung.

    HTML-Code:
    void loop() {
      switch(TasteLi(TasteLiPin)) {
        case 0: Ausgang(LEDrtPin, 0); TZ("T/LINKS auf -0- entprellt!"); break;
        case 1: Ausgang(LEDrtPin, 1); TZ("T/LINKS auf -1- entprellt!"); break;
        case 2: TZ("Meldung: T/LINKS IN Entprellung"); break;   
      }
    
      switch (TasteMi(TasteMiPin))  {
        case 0: Ausgang(LEDgePin, 0); TZ("T/MITTE auf -0- entprellt!"); break; 
        case 1: Ausgang(LEDgePin, 1); TZ("T/MITTE auf -1- entprellt!"); break;
        case 2: TZ("Meldung: T/MITTE IN Entprellung"); break;
      }
    }
    
    //Kontakt Zustandsänderung, nur FunktionsName ändern, Rest ist Universell
    int TasteLi(int KontPin) {  //Prüfung; gibt 4 Zustand zurück; 0...Entprellt+LOW, 1...Entprellt+HIGH, 2...IN Entprellung, 3...keine Zustandsänderung
      static unsigned long StartZeit = 0; 
      static int KontZustAlt = digitalRead(KontPin);
      static int EntprellStatus = digitalRead(KontPin); 
     return Entpreller(KontPin, StartZeit, KontZustAlt, EntprellStatus); 
    }
    
    //Kontakt Zustandsänderung, nur FunktionsName ändern, Rest ist Universell
    int TasteMi(int KontPin) {  //Prüfung; gibt 4 Zustand zurück; 0...Entprellt+LOW, 1...Entprellt+HIGH, 2...IN Entprellung, 3...keine Zustandsänderung
      static unsigned long StartZeit = 0;   
      static int KontZustAlt = digitalRead(KontPin);  
      static int EntprellStatus = digitalRead(KontPin); 
      return Entpreller(KontPin, StartZeit, KontZustAlt, EntprellStatus); 
    }
    
    //Kontakt-Entprellung; gibt 4 Zustände zurück; 0...Entprellt+LOW, 1...Entprellt+HIGH, 2...derzeit in Entprellung, 3...keine Zustandsänderung
    int Entpreller(int KontPin, unsigned long &StartZeit, int &KontZustAlt, int &EntprellStatus) {
      int KontZustNeu = 0;
      if((KontZustNeu = digitalRead(KontPin)) == EntprellStatus) {
        return 3; 
      }
      if(KontZustNeu != KontZustAlt) { 
        StartZeit = millis(); 
        KontZustAlt = KontZustNeu;
      }
      if(KontZustAlt == 0 && (millis() >= StartZeit + EntprellZeit)) 
        EntprellStatus = 0; 
      else if(KontZustAlt == 1 && (millis() >= StartZeit + EntprellZeit)) 
        EntprellStatus = 1; 
      else
        EntprellStatus = 2; 
      
      return EntprellStatus;
    }
    PS:
    Was haltet ihr von dem code?
    Wie kann ich das ganze jetzt in eine Bib. packen?
    Vermutlich kann nur Entpreller() ausgelagert werden - oder?
    __________________________________________________ _
    | Sprache: C | Teensy 3.2 | Arduino 2.x | Status: EwigerAnfaenger |

Ähnliche Themen

  1. ISR Fehlerhaft
    Von Zille im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 20.01.2014, 18:11
  2. Tastenentprellung-Wiki
    Von Finn91 im Forum C - Programmierung (GCC u.a.)
    Antworten: 0
    Letzter Beitrag: 03.03.2009, 20:37
  3. Schaltung fehlerhaft
    Von Atmelbeginne im Forum PIC Controller
    Antworten: 3
    Letzter Beitrag: 12.09.2008, 16:56
  4. Uartausgabe Fehlerhaft
    Von Picht im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 19.02.2007, 16:45
  5. [ERLEDIGT] Tastenentprellung mit Bascom
    Von milisan im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 23.11.2004, 06:06

Stichworte

Berechtigungen

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

Labornetzteil AliExpress