- 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
    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 |

  2. #2
    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.

  3. #3
    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. 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
  •  

LiFePO4 Speicher Test