- Akku Tests und Balkonkraftwerk Speicher         
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 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 |

  2. #2
    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();
       }
    
    }

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

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

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

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.667
    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

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

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.667
    Das hat mit "static" erst mal nichts zu tun.
    Das Problem mit dieser Variablen offenbart einen generellen Denkfehler - Logikfehler, in der Struktur des Programms.
    Delay() hat seine Berechtigung. Wenn ich das weglassen will, geht das, aber dann muss der Programmcode in Teilstücke zerlegt werden, die einzeln abzuhandeln sind. Um die richtige Reihenfolge der Abarbeitung muss ich mich dann selber kümmern. Im Grunde ist am einfachsten, so etwas dann in Methoden und ein Objekt auszulagern, dann wird im Hauptprogramm nur eine Methode aufgerufen. Der Code ohne delay() ist dann im Objekt gekapselt. Damit macht sich vieles einfacher. Das einfach so in loop() und setup() unterzubringen ist später schlecht verwertbar.
    Komplizierte Dinge werden einfacher, wenn man einen Plan hat. Der wird leider seltenst gemacht.


    MfG

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

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

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

Solar Speicher und Akkus Tests