- 3D-Druck Einstieg und Tipps         
Seite 1 von 2 12 LetzteLetzte
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 Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    78
    Beiträge
    2.180
    ich meine, ich stelle mir manchmal auch durchaus sportliche aufgaben (siehe mein outdoor-projekt) - aber warum verwendest du nicht die bounce-library?
    gruß inka

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    923
    //Tastenabfrage
    int TasteZustandAlt = 0; // Tastenzustand einmalig initialisieren

    Bei der Zeile stimmt ohne "static" schon der Kommentar nicht.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.06.2019
    Beiträge
    148
    Hallo Inka, danke für den Hinweis
    Ich würde den Prozess gerne verstehen... wenn ich diese Logik verstehe, bin ich schon mal einen großen Schritt weiter...
    .. und nach Möglichkeit keine zusätzliche Lib einfügen; #include "OneButton.h" ... und mehrer Tastereingänge unabhängig abfragen

    (vielleicht befinde ich mich auch auf dem Holzweg


    Zitat Zitat von Holomino Beitrag anzeigen
    Bei der Zeile stimmt ohne "static" schon der Kommentar nicht.
    Hallo Holomio.
    "static" innerhalb des loop?
    Ist doch eine einmalige Initialisierung - oder was meinst du?
    __________________________________________________ _
    | Sprache: C | Teensy 3.2 | Arduino 2.x | Status: EwigerAnfaenger |

  4. #4
    HaWe
    Gast
    die loop() ist eine "verkappte" while() / for( ;; ) -Schleife in einer unsichtbaren main() Funktion, in der eine Funktion loop() wiederholt aufgerufen wird - wenn hier Variablen nicht static sind, werden alle Variablenwerte beim erneuten loop()-Durchlauf vergessen.


    Code:
    void setup() { }
    
    void loop() { }
    
    
    int main() {
       setup();
       for( ;; ) {
          loop();
       }
    
    }

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.06.2019
    Beiträge
    148
    ahaaa! Danke!
    Dachte loop() = main()

    Mit
    static int TasteZustandAlt = 0;
    funktioniert es überhaupt nicht.
    __________________________________________________ _
    | Sprache: C | Teensy 3.2 | Arduino 2.x | Status: EwigerAnfaenger |

  6. #6
    HaWe
    Gast
    dann liegt der Fehler evtl woanders.
    Aber deklariere es mal testweise global:
    static int TasteZustandAlt = 0;

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.06.2019
    Beiträge
    148
    Klappt leider auch nicht.
    Bleibt dann in einer Dauerschleife mit der Serial.print-Ausgabe: TZ(1); im us-Takt hängen.
    __________________________________________________ _
    | Sprache: C | Teensy 3.2 | Arduino 2.x | Status: EwigerAnfaenger |

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.682
    Blog-Einträge
    1
    Ich habe mal ein paar Sekunden den Code angeschaut, deshalb hier zunächst eine Anmerkung, diesen "Tastenzustand einmalig initialisieren" machst Du in loop(), das ist dann nicht einmalig. "int TasteZustandAlt;" außerhalb von setup() und loop(), also global deklarieren. Dann in setup() "int TasteZustandAlt = 0", dann ist es einmalig. Ich fürchte der ganze Code ist nicht so recht durchdacht. Programmablaufpläne können Abhilfe schaffen, zunächst aufzuzeigen, was man tun will. In dem Vorgang der PAP-Erstellung geht man den gesamten Programmablauf theroretisch durch und anhand des PAP kann man sehen, ob das dann alles funktioniert. Es sind dort auch schon Logikfehler zu erkennen. Nachher setzt man den PAP in Progroammcode um.


    MfG

  9. #9
    HaWe
    Gast
    wenn man
    static int TasteZustandAlt = 0;
    als lokale Variable in loop() (oder in irgendeiner beliebigen anderen wiederholt aufgerufenen Funktion) im Funktionskopf definiert und initialisiert, wird es nur 1x einmalig bei der ersten Loop-Runde initialisiert, danach nicht mehr: ab dann behält der Wert bei jeder neuen Runde den letzten Wert der vorherigen Runde.

    In diesem Falle funktioniert es aber ja auch nicht mit einer globalen Deklaration, daher liegt der Fehler woanders im Code.

  10. #10
    HaWe
    Gast
    natürlich funktioniert es lokal definiert nicht ohne static, das hatten wir doch schon ausgiebig besprochen!
    Globale Variablen aber sind quasi automatisch static, bzw. hier stellt sich das Problem nicht, denn static hat für globale Variaben eine andere Bedeutung (betr. den file scope, was hier nicht stört, wenn es auch global als static definiert würde).
    Man könnte auch sagen, lokale static Variablen sind globale Variablen mit einem auf eine spezielle Funktion lokal eingeschränkten scope.

    PS,
    da ja Arduino C++ nutzt und nicht ANSI C:
    hier gibt es zusätzlich "static" auch für class-Attribute

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

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

Stichworte

Berechtigungen

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

12V Akku bauen