- LiTime Speicher und Akkus         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 30 von 30

Thema: Bibliothek mit Referenzen

  1. #21
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.06.2019
    Beiträge
    130
    Anzeige

    Powerstation Test
    Zitat Zitat von HaWe Beitrag anzeigen
    1 globale Variable kann immer nur 1 Wert speichern, nicht verschiedene, und dasselbe gilt für jede lokale Variable.
    uiuiui, da hast du mich vollkommen falsch verstanden.

    Zitat Zitat von HaWe Beitrag anzeigen
    kA wie du das mit Referenzen für verschiedene Buttons lösen willst.
    Es geht darum aus einer Funktion mehrere Werte zurück zu geben.

    Code:
    void loop() {
    if (Kontakt01 == 1){...mach was...}
    if (Kontakt02 == 0){...mach was...}
    }
    
    int Kontakt01(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; 
      }
    //...usw...
    }
    Hier werden in Kontak01() bei jedem Durchlauf, aktuelle Var-Werte für den Kontakt01 zwischengespeichert.
    Die 3Stk "&Var" werden durch Entpreller() berechnet, dann die neuen Werte wieder in Kontakt01 gespeichert --- bis zum nächsten Durchlauf...
    Somit muss für jeden Eingangs-Kontakt/Taster eine eigene Funktion, als Zwischenspeicher(!), bestehen Kontakt01..0n() --- der einzige Wehrmutstropfen.
    Funktioniert aber sehr gut!


    --2--
    A| Nun möchte ich erst Entpreller() in eine Bib verschieben. Daher meine nervigen Fragen nach &Var (Referenz-Variablen).
    Und ob ich von einer Bib aus auf zB. die global Var zB. "KontPin" zugreifen kann.
    B| Danach bekommt jeder Kontakt0n() eine eigene Bib.
    C| Danach wollte ich mich mit Klassen, Objekten, Methoden beschäftigen. Sozusagen als Erweiterung und Verbesserung einer C-Bib.
    __________________________________________________ _
    | Sprache: C | Teensy 3.2 | Status: EwigerAnfaenger |

  2. #22
    HaWe
    Gast
    sry, deine Konstruktion verstehe ich nicht, ich würde es ganz anders machen - da muss dann jemand anders 'ran

  3. #23
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.06.2019
    Beiträge
    130
    Wie wäre dein Prinzip um meherer Kontakte gleichzeitig auf Zustandsänderung, Entprellung und neuem Zustand (ohne delay) zu überprüfen?

    Hierbei wird bei jedem loop-Durchlauf,
    1. auf Zustandsänderung geprüft; if((KontZustNeu = digitalRead(KontPin)) == EntprellStatus) return 3;
    2. wenn sich der Kontaktzustand ändert, wird das bei jedem loop-Durchlauf neu geprüft
    3. sollte sich der Kontaktzustand innerhalb von 5ms ändern, wird die Startzeit resetet
    4. sollten dann >=5ms keine Zustandänderungen passieren, wird je nach Zustand 0(LOW) oder 1(HIGH) zurück gegeben.
    5. und das für beliebig viele Kontakte und ohne delay()

    PS: Entprellzeit = 5ms ist eine globale Variable und als Beispiel zu verstehen
    __________________________________________________ _
    | Sprache: C | Teensy 3.2 | Status: EwigerAnfaenger |

  4. #24
    HaWe
    Gast
    ich würde alle Einzel-Variablen in einen struct type packen,
    dann mehrere Variablen von dem struct type davon im aktuellen Sketch erzeugen,
    und dann eine beliebige dieser struct-Variablen an eine spezielle Funktion aus der Lib by reference übergeben, die die Einzelwerte ändert,
    zB so

    Code:
    #include "structlib.h"
    
    // das folgende steht in der structlib.h
    /*
    
    #pragma once 
    
    
    typedef struct {  // struct type
       int var1=0;
       int var2=0;
       int var3=0;
    }   myBtnStruct;
    
    void modifyStruct(myBtnStruct & Btn) { 
    // erhält eine Variable vom struct type by reference und gibt deren Werte geändert zurück
       Btn.var1=1;
       Btn.var2=2;
       Btn.var3=3;
    }
    
    */
    
    void setup() {
       Serial.begin(115200);
       delay(1000);
       Serial.println();
       Serial.println("Serial() started");
    
       myBtnStruct btn1, btn2, btn3;  // erzeuge mehrere Variablen vom struct type
    
       // vor Funktionsaufruf
       Serial.println();
       Serial.println(btn1.var1);
       Serial.println(btn1.var2);
       Serial.println(btn1.var3);
    
       Serial.println();
    
      // nach Funktionsaufruf
    
       modifyStruct(btn1);
       Serial.println();
       Serial.println(btn1.var1);
       Serial.println(btn1.var2);
       Serial.println(btn1.var3);
    
       Serial.println();
    
    }
    
    
    void loop() {
    }
    Geändert von HaWe (06.05.2020 um 18:42 Uhr) Grund: vereinfacht

  5. #25
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.06.2019
    Beiträge
    130
    OhMann - irgendwie komme ich nicht weiter mit dem Verständniss um Bib.

    Um den Sketch klein zu halten, möchte erste einmal alle Funktionen aus einem Sketch in jeweilige Bib verteilen.
    Nun bekomme ich dauernd Fehlermeldungen, wenn ich aus einer Bib eine Sketch-Funktion aufrufen möchte.
    Geht das gar nicht?

    Später wollte ich von einer Bib aus eine andere Bib aufrufen usw.
    Ist eine Bib überhaupt dafür gedacht?

    Wie bereits geschrieben, steht im Netz leider nur sehr oberflächliches zu Bibliothken.
    __________________________________________________ _
    | Sprache: C | Teensy 3.2 | Status: EwigerAnfaenger |

  6. #26
    HaWe
    Gast
    Nun bekomme ich dauernd Fehlermeldungen, wenn ich aus einer Bib eine Sketch-Funktion aufrufen möchte.
    Geht das gar nicht?
    nein, das geht nicht, denn das .h/.cpp file der Library weiß ja nichts von deinem Sketch, also wie soll eine Library eine Sketch Funktion kennen?
    - anders herum geht es ntl schon.

    Später wollte ich von einer Bib aus eine andere Bib aufrufen usw.
    Ist eine Bib überhaupt dafür gedacht?
    sagen wir so: ja, das geht, wenn man es richtig macht.

    Die Funktionen etc der Library müssen nur sehr allgemein gehalten sein und in sich abgeschlossen sein.

  7. #27
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.06.2019
    Beiträge
    130
    Zitat Zitat von HaWe Beitrag anzeigen
    nein, das geht nicht, denn das .h/.cpp file der Library weiß ja nichts von deinem Sketch,
    Daher kann die Lib auch nicht auf globale Var. aus dem Sketch zugreigen.
    Anders herum schon? Könnte ich dann eine Lib aus "globalen Variablen" für den Sketch verwalten?

    Zitat Zitat von HaWe Beitrag anzeigen
    Die Funktionen etc der Library müssen nur sehr allgemein gehalten sein und in sich abgeschlossen sein.
    ... nicht sonderlich mächtig...
    Das würde bedeuten, wenn in 2 unterchiedlichen Lib ein und die gleiche LED angesteuert werden soll, müsste der Pin in jedem Lib separat deklariert werden. Oder?
    Ganz schön aufwendig (und Fhelerbehaftet).

    Zitat Zitat von HaWe Beitrag anzeigen
    sagen wir so: ja, das geht, wenn man es richtig macht.
    Wie?
    __________________________________________________ _
    | Sprache: C | Teensy 3.2 | Status: EwigerAnfaenger |

  8. #28
    HaWe
    Gast
    ich kann dir hier leider kein Tutorial bieten, versuche das Beispiel aus #24 zu verstehen, kopiere es, spiel damit herum und versuche deine Btn-Funktionen entsprechend umzuarbeiten. (Oder versuche meine Btn-Lib zu verstehen )

  9. #29
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.06.2019
    Beiträge
    130
    Ich vestehe das meine Fragen nerven - mich nervt das Thema, da kein Fortschritt.
    Hatte gedacht, dass Bibliotheken, Sketch flexiber machen - funktionierende Funktionen für weitere Sketch leichter verwendbar machen.
    ABER, auch ohne Bib klappts mit bestehenden Funktionen - copy/paste ist angesagt.

    Da ich derzeit keine wesentlichen Vorteile sehr, werde ich erst einmal die Bib´s zurück stellen!
    __________________________________________________ _
    | Sprache: C | Teensy 3.2 | Status: EwigerAnfaenger |

  10. #30
    HaWe
    Gast
    Lib-Funktionen müssen alle wesentlichen Variablen vom aufrufenden Sketch erhalten und sollten daher am besten auch in einer Structure gekapselt sein, wenn mehr als 1 Wert verändert wird - alles andere ist unübersichtlich, verwurschtelt und schlecht zu warten. Deine Funktionen und Variaben sind viel zu sehr ineinander verschachtelt, als dass man sie unproblematisch und sauber in eine Lib auslagern könnte: daher wäre IMO eine komplette Neuprogrammierung deiner btn-Funktionen und -Variablen notwendig, mit völlig gegeneinander abgeschlossenen Typen, Parametern und Scopes.
    Siehe Beisp. in #24.
    Wenn du das sauber trennen kannst, wäre eine solche Lib durchaus eine deutliche Erleichterung und Vereinfachung.
    Geändert von HaWe (06.05.2020 um 21:19 Uhr)

Seite 3 von 3 ErsteErste 123

Ähnliche Themen

  1. Arduino Bibliothek soll auf andere Bibliothek zugreifen
    Von RoboterSindCool im Forum Arduino -Plattform
    Antworten: 6
    Letzter Beitrag: 11.12.2016, 16:50
  2. C-Bibliothek für AVRs
    Von drew im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 23.04.2008, 18:52
  3. Referenzen, Parameter für TWI-Funktion
    Von Minifriese im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 11.01.2008, 21:54
  4. Referenzen
    Von JensSchyma im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 12.05.2007, 18:55
  5. DOS - Bibliothek
    Von hacker im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 14.04.2006, 02:54

Stichworte

Berechtigungen

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

LiTime Speicher und Akkus