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
OOP Fastled Klasse in Klasse
07.10.2019, 21:00
Beitrag #1
OOP Fastled Klasse in Klasse
Moin!

vielleicht kann mir hier jemand helfen, ich versuche endlich mal in OOP ein- bzw. durchzusteigen, was mir nie wirklich gelungen ist, weil es anfangs doch sehr theoretisch ist. Mein Gehirn ist aber eher der Praxis zugänglich.

Ich versuche für meine LED-Fackel das Problem der nested-loops in den Griff zu bekommen. Ich habe mir mal das Beispiel von
https://learn.adafruit.com/multi-tasking...y-solution
geschnappt und versuche, das testweise mit der Fastled-Bibiothek zu kombinieren, um LED's (bzw. Effekte) später besser zu kapseln.

Die Problematik derzeit ist, dass ich nur eine LED zum Blinken bekomme, siehe pix3. Die anderen (pix1 und pix2) werden offensichtlich überschrieben.

Ist jemand bereit mir kurz zu zeigen was ich berichtigen muss, damit der Sketch korrekt läuft (3 LED's mit unterschiedlichem Timing blinken), damit ich das analysieren und verstehen kann?

vielen Dank im Voraus!


Code:
#define FASTLED_ESP8266_DMA
#define FASTLED_INTERRUPT_RETRY_COUNT 0
#define FASTLED_ALLOW_INTERRUPTS 0
#include "FastLED.h"
#define NUM_LEDS 16
#define CHIPSET     WS2812B
#define STRIP_PIN    4 //LED-strip signal GPIO-PIN
#define COLOR_ORDER GRB


/*----------------------------------------------------------------*/

class Flasher// : public FastLED
    {
      int Pixel;       // the number of the Pixel
      long OnTime;     // milliseconds of on-time
      long OffTime;    // milliseconds of off-time
      int PixState;    // ledState used to set the LED
      unsigned long previousMillis;   // will store last time LED was updated
      CRGB leds[NUM_LEDS];
      
      public:
      Flasher(int pix, long on, long off)
        {
          Pixel = pix;
          OnTime = on;
          OffTime = off;
          PixState = 0;
          previousMillis = 0;
          FastLED.addLeds<CHIPSET, STRIP_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
        }

void Update()
{
  unsigned long currentMillis = millis();

  if((PixState == HIGH) && (currentMillis - previousMillis >= OnTime))
    {
      PixState = LOW;  // Turn it green
      previousMillis = currentMillis;  // Remember the time
      leds[Pixel].r = 0;
      leds[Pixel].g = 63;
      leds[Pixel].b = 0;
    }
    else if ((PixState == LOW) && (currentMillis - previousMillis >= OffTime))
    {
      PixState = HIGH;      // turn it red
      previousMillis = currentMillis;   // Remember the time
      leds[Pixel].r = 63;
      leds[Pixel].g = 0;
      leds[Pixel].b = 0;
    }
    FastLED.show();
   }
};

/*----------------------------------------------------------------*/
//CRGB leds[NUM_LEDS];
Flasher pix1(0, 300, 400);
Flasher pix2(3, 350, 350);
Flasher pix3(14, 200, 100);

/*----------------------------------------------------------------*/
void setup()
{

}
/*----------------------------------------------------------------*/

void loop()
{
  pix1.Update();
  pix2.Update();
  pix3.Update();
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.10.2019, 21:37
Beitrag #2
RE: OOP Fastled Klasse in Klasse
Ich glaube, es gibt einfacher zu überblickende Möglichkeiten, um in die OOP einzusteigen.

Es gibt da ein sehr gutes Buch "Der C++ Programmierer". Das kann ich aus eigener Erfahrung empfehlen.

Fange mit einfachen Sachen ohne große Nebenabhängigkeiten zu bestehenden (großen) Libs an, um erst mal ein Gefühl für OOP zu bekommen.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.10.2019, 15:54
Beitrag #3
RE: OOP Fastled Klasse in Klasse
Danke Tommy, für den Ratschlag mit dem Buch. Ich habe es mir bestellt, die Leseproben sehen gut aus.

Offensichtlich habe ich mich missverständlich ausgedrückt. Mein Anliegen ist primär, konkrete Hilfestellung bei meinem Code zu erlangen. Ich nehme an, dass das für den Ein- oder Anderen ein Klacks ist, mich allerdings erstmal weiter bringt. Sekundär komme ich beim Verständnis von OOP weiter, aber erstmal möchte ich nur stumpf "nachmachen".
Ich brauche immer etwas Sinnvolles das ich auch nutzen kann, ansonsten kommt es in meinem Resthirn nicht an. Soweit steige ich trotz Lektüre diverser Anleitungen nicht wirklich durch, denn das Thema ist mir zu theoretisch.

Aber ich kann auch nichts erzwingen, vielleicht ist meine Frage auch schlicht fehlplatziert.

Grüße von der Knalltüte
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.10.2019, 16:31
Beitrag #4
RE: OOP Fastled Klasse in Klasse
Das Thema ist als Einstieg in die OOP einfach zu komplex, besonders weil FastLed selbst schon OOP ist. Du müsstest also z.B. mit Vererbung anfangen, obwohl Du noch nicht mal die Grundlagen der OOP hinter Dir hast.
Da halte ich die Erfolgsaussichten für minimal.

Suche Dir eine einfachere Anwendung, bei der Du nicht auf vorhandene Klassen aufsetzen musst.

Z.B. die Steuerung einer RGB-LED oder eine OOP-Taster-Lib oder eine OOP-Blink-Lib

Damit kannst Du OOP von Anfang an lernen und hast die Chance erfolgreich zu sein.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Klasse in andere cpp übergeben Phila 9 804 27.04.2019 17:29
Letzter Beitrag: Tommy56
  Meine PushButton-Klasse Gorathan 5 604 26.04.2019 18:50
Letzter Beitrag: Tommy56
  Klasse(Object) übergeben harry1952 5 649 14.01.2019 20:18
Letzter Beitrag: Tommy56
  Noch ein Ucglibproblem bei Verwendung in Klasse da_user 5 1.344 07.03.2018 13:44
Letzter Beitrag: da_user
  Problem FastLED fliege_m 3 2.304 16.07.2017 16:56
Letzter Beitrag: Tommy56
  Verständnisfrage: Instanz innerhalb einer Klasse tuxedo0801 6 1.692 28.03.2017 19:40
Letzter Beitrag: georg01
  Frage zu FastLed First Light Wolfgang_2801 1 964 19.06.2016 16:57
Letzter Beitrag: hotsystems
  C++ string Klasse in Sketch benutzen? HaWe 4 2.320 01.05.2015 14:48
Letzter Beitrag: HaWe
  Klasse in Klasse instanzieren Smidoino 7 3.174 25.02.2015 11:22
Letzter Beitrag: Thorsten Pferdekämper
  Referenz eines Arrays in Klasse nutzen jensel 5 2.231 23.02.2015 11:46
Letzter Beitrag: Thorsten Pferdekämper

Gehe zu:


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