- SF800 Solar Speicher Tutorial         
Ergebnis 1 bis 10 von 10

Thema: Hilfe bei einem Code Teil

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    Hallo littlekenny,

    Viele Wege führen zum Ziel, deshalb hier mal eine Möglichkeit:

    Pseudocode:

    wenn Taste gedrückt ist dann
    Zaehler = Zahler +1 ansonsten Zaehler = 0
    wenn Zaehler = 20 dann Aktion ausführen

    Das Programm prüft also ob die Taste gedrückt ist
    wenn ja, wird ein Zaehler hochgezählt,
    wenn nicht, dann wird der Zaehler auf 0 gesetzt.
    Wenn der Zaehlerstand einen bestimmten Wert erreicht, dann soll etwas ausgelöst werden,
    aber nur einmal. Zum Beispiel das Senden
    Wenn die Taste weiter gedrückt gehalten wird, zaehlt der Zaehler immer weiter hoch,
    aber es wird nichts mehr ausgeführt.

    Jetzt kommt das Problem: diese kleinen Prozessoren sind "sau schnell"
    der Zaehler wird vermutlich hundertausende Male hochzählen bis Du die Taste
    wieder losgelassen hast. Das wäre kein Problem, dann muss man halt der Abfragewert entsprechend hoch setzen, das ist aber eine schlechte Lösung.

    Eleganter machen wir das jetzt so.

    Wir packen in unsere Hauptschliefe eine Verzögerung von z.B "einer" Millisekunde
    Nun wissen wir, das der Zaehler maximal jede Millisekunde hochlaufen kann.
    Somit haben wir eine recht präzisen Wert für die Abfrage.
    Das Prellen einer Taste, wo der Schaltkontakt grade schließt dauert so 20ms (bei schlechten Tasten)
    Also ist unser Abfragewert mit 20 recht gut gewählt.
    Wir müssen nun mindestens die Taste 20ms gedrückt halten, bis etwas ausgelöst wird.

    Im Code würde das nun so aussehen.
    Code:
    int button_1;
    int button_2;
    int zaehler_b1;
    int zaehler_b2;
    int status;
    
    void loop(void)
    {
    
      status = digitalRead(button_1);
      if (status == 0)    // wenn Taste gedrückt ist (pin ist low)
      {
        zaehler_b1++;           // eins hochzaehlen
        if (zaehler_b1 == 20)   // wurde die Taste mindestens 20ms gedrückt dann
        {
          // senden
        }
      } else zaehler_b1 = 0;    // Taste wurde losgelassen, also zaehler auf 0 setzen
    
      status = digitalRead(button_2);
      if (status == 0)    // wenn Taste gedrückt ist (pin ist low)
      {
        zaehler_b2++;
        if (zaehler_b2 == 20)   // wurde die Taste mindestens 20ms gedrückt dann
        {
          // senden
        }
      } else zaehler_b2 = 0;    // Taste wurde losgelassen, also zaehler auf 0 setzen
    
      delay(1);    // nur 1 Millisekunde warten
    
    }
    Geändert von Siro (29.03.2018 um 20:46 Uhr)

Ähnliche Themen

  1. Ein Teil zum Einrasten - Wie bei einem Schrank
    Von Dj EKI im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 4
    Letzter Beitrag: 08.02.2018, 12:28
  2. Manchester Code von einem PIN dekodieren / HMS100T
    Von frank-wob im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 04.10.2012, 16:39
  3. Hilfe bei Code
    Von AndreasMüler im Forum Software, Algorithmen und KI
    Antworten: 4
    Letzter Beitrag: 29.06.2010, 11:22
  4. Hilfe bei Programmierung von einem Menü mit einem 3310 Disp.
    Von sc00p im Forum Software, Algorithmen und KI
    Antworten: 0
    Letzter Beitrag: 19.06.2008, 14:29
  5. Brauche Hilfe bei ASM-Code
    Von sebastianh im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 3
    Letzter Beitrag: 14.03.2005, 20:33

Berechtigungen

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

Solar Speicher und Akkus Tests