INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Libs mit peristenten Variablen
03.11.2017, 19:19 (Dieser Beitrag wurde zuletzt bearbeitet: 03.11.2017 19:20 von Gerri3d.)
Beitrag #1
Libs mit peristenten Variablen
Ich versuche eine Lib zu schreiben, deren Klasse mit mehreren Instanzen benötigt wird. Da die Instanzen keine statischen variablen besitzen, sollten die Werte unabhängig voneinander persistent sein. Leider ändern sich meine Werte nicht.

Diese Lib ist mein ertser Versuch. Libs in Arduino selbst zu basteln:
.*h File
Code:
#ifndef SystemTools_h
#define SystemTools_h

#include <Arduino.h>

class SystemTools{
    
    private:
        unsigned long _onOffCountB;
        unsigned long _onOffCountB_Tmp;
        unsigned long _ET;
        bool _startTmp;
        unsigned long _onOffCountP;
        unsigned long _onOffCountP_Tmp;        
                
    public:
    SystemTools(){;};
    // ++++++++++++++++++ raising edge ++++++++++++++++++++++++++++
    bool R_Trigg(bool start);
    // +++++++++++++++++++++++++ Timer On Delay +++++++++++++++++++++++
    bool TimerOnDelay (bool start, unsigned long PT,unsigned long TimeStamp);
    // +++++++++++++++++++++++++ Blink +++++++++++++++++++++++
    bool Blink (unsigned long PtHalf,unsigned long TimeStamp);
    // +++++++++++++++++++++++++ Blink Pulse+++++++++++++++++++++++
    bool BlinkPulse (unsigned long PtHalf,unsigned long TimeStamp);
};

#endif
.*cpp File
Code:
#include <Arduino.h>
#include <SystemTools.h>


// ++++++++++++++++++ Constructor ++++++++++++++++++++++++++++
//SystemTools::SystemTools();
// ++++++++++++++++++ raising edge ++++++++++++++++++++++++++++
bool SystemTools::R_Trigg(bool start)
{
  if (!start){
    _startTmp = false;
    return false;
  }

  if (start &! _startTmp){
    _startTmp = true;
    return true;
  }
  else
  {
    return false;
  }
}
// +++++++++++++++++++++++++ Timer On Delay +++++++++++++++++++++++
bool SystemTools::TimerOnDelay (bool start, unsigned long PT,unsigned long TimeStamp){
  if (R_Trigg(start)){
    _ET = TimeStamp;  
  }
  
  if(!start) {return false;}
  
  return ( (_ET+PT-5) < (TimeStamp) ) ? true : false;
   // -number for cycle delay
}
// +++++++++++++++++++++++++ Blink +++++++++++++++++++++++
bool SystemTools::Blink (unsigned long PtHalf,unsigned long TimeStamp){

    
  if (TimerOnDelay(_onOffCountB == _onOffCountB_Tmp, PtHalf/2, TimeStamp ) )
  {
    _onOffCountB++;
  }
  else{
    _onOffCountB_Tmp = _onOffCountB;
  }

  if(_onOffCountB%2){
    return true;
  }
  return false;  
}
// +++++++++++++++++++++++++ Blink Pulse+++++++++++++++++++++++
bool SystemTools::BlinkPulse (unsigned long PtHalf,unsigned long TimeStamp){
        
  if (TimerOnDelay(_onOffCountP == _onOffCountP_Tmp, PtHalf, TimeStamp ) )
  {
    _onOffCountP++;    
    Serial.println("RE:" + String(TimeStamp));
    return true;
  }
  else{
    _onOffCountP_Tmp = _onOffCountP;
    //Serial.println("NOT:" + String(TimeStamp));  
  }
  return false;  
}
_________________________________________________________________
.*h File
Code:
#ifndef WS2801_M_h
#define WS2801_M_h
#include <Arduino.h>
#define pixel 31
class WS2801_M{

            
    public:
        struct color {
            uint8_t red;
            uint8_t green;
            uint8_t blue;
        };
        
        WS2801_M(){;};
    
        // ++++++++++++++++++ raising edge ++++++++++++++++++++++++++++
        void Off(color* buf);
        // ++++++++++++++++++++++ GLOW PIXEL +++++++++++++++++++++++++
        void Glow(color* buf, bool res, bool trig);
        
    private:
        uint8_t _red;
        uint8_t _green;    
        uint8_t _blue;
};
#endif
.*cpp File[/b
Code:
#include "Arduino.h"
#include "WS2801_M.h"
// +++++++++++++++++++++++++  clear all +++++++++++++++++++
void WS2801_M::Off(color* buf) {
  color colTmp ={0,0,0};     
  for (int i = 0; i < pixel; i+=3) {
    buf[i] = colTmp;
  }
}
// ++++++++++++++++++++++ GLOW PIXEL +++++++++++++++++++++++++
void WS2801_M::Glow(color* buf, bool res, bool trig) {
    if(res) {
    _red = 0;
    _green = 0;    
    _blue = 0;
    }
    if (trig)
    {        
        if(_red < 254)
            {_red++; Serial.println("INC RED , VAL: " +String(_red));}
        else
            {_red=0;}
    
        for (int i=0; i<pixel; i++){
            buf[i].red = _red;    // red
            buf[i].green = _green; // green
            buf[i].blue = _blue; // blue
        }
    }
}
_________________________________________________________________
[b].*ino File[/b
Code:
#include <WS2801_M.h>
#include <SystemTools.h>
#include <SPI.h>

// class instances

WS2801_M ws1;
SystemTools systemTools1;

WS2801_M::color buf[pixel] = {0};

void setup()
{
  SPI.begin();  // initialize SPI hardware
  Serial.begin(9600);
}
//================================================================
//=========================== LOOP ===============================
//================================================================
void loop()
{
  unsigned long TimeStamp = millis();
  ws1.Glow(&buf[0], false, (systemTools1.BlinkPulse(20, TimeStamp))); //trigg

  SPI.transfer( buf, (pixel + 1) * 3  );
}


[b]Interessant ist, dass die lib SystemTools korrekt funktioniert, dh dass es da keine Probleme mit dem inkrementieren der Variablenwerte gibt.


Natürlich freut mich neben Lösungsvorschlägen auch, wie man den Code weiter verbessern sollte.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.11.2017, 22:57
Beitrag #2
RE: Libs mit peristenten Variablen
Haben Dir die Antworten, die Du nebenan bekommen hast nicht gefallen?

Hier wirst Du auch keine anderen bekommen. Außerdem ist Crossposting verpönt, da einerseits die vielen Dir helfenden im anderen Forum dadurch von Dir als doof hingestellt werden und anderseits die Informationen fragmentiert werden.

Und Tschüß
Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle von mir veröffentlichten Codes unterliegen der GPL Version 3
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.11.2017, 07:20
Beitrag #3
RE: Libs mit peristenten Variablen
alles klar nun, im die variablen müssen auch im Constructor initialisiert werden.

Code:
// .*h
#ifndef WS2801_M_h
#define WS2801_M_h
#include <Arduino.h>
#define pixel 31
class WS2801_M{        
    private:
        uint8_t _red;
        uint8_t _green;    
        uint8_t _blue;
        
    public:            
        WS2801_M()
        {
            _red = 0;
            _blue = 0;
            _green = 0;
        };
        // ++++++++++++++++++ Struct ++++++++++++++++++++++++++++
        struct color {
            uint8_t red;
            uint8_t green;
            uint8_t blue;
        };
        // ++++++++++++++++++ raising edge ++++++++++++++++++++++++
        void Off(color* buf);
        // ++++++++++++++++++++++ GLOW PIXEL ++++++++++++++++++++
        void Glow(color* buf, bool res, bool trig);
        

};
#endif
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Rechenoperation mit Variablen Arduino-Bini 12 4.386 13.01.2025 13:46
Letzter Beitrag: Xplain
  Millis mit Variablen Axel D 2 1.424 21.11.2024 12:08
Letzter Beitrag: Xplain
  Variablen von 2 Arduinos zusammenzählen heeman 18 6.229 26.11.2023 18:52
Letzter Beitrag: Tommy56
  Problem mit Variablen und Arrays fv1895 6 2.571 25.07.2023 18:35
Letzter Beitrag: fv1895
  Compilerfehler nach Umzug der Libs in lokalen Ordner mega-hz 11 3.717 06.07.2023 21:07
Letzter Beitrag: mega-hz
  MQTT, mehrere Subscribe in globale Variablen speichern Manny 14 4.098 27.11.2022 16:03
Letzter Beitrag: Tommy56
  Variablen Namen hochzaehlen in for-Schleife? name_(i) was not declared in this scope gutschy 4 2.452 30.08.2022 16:15
Letzter Beitrag: gutschy
  Variablen ändern klappt nicht Kai_himself 6 2.717 02.02.2022 07:53
Letzter Beitrag: miq19
  LED über Variablen steuern ? Nicole 25 5.525 15.01.2022 19:23
Letzter Beitrag: hotsystems
  Unterroutine-Aufruf mit Variablen mega-hz 26 5.853 17.06.2021 16:02
Letzter Beitrag: Tommy56

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste