Integration LED Strip und Ring mit NeoPixel

Könntest du bitte zwei Dinge machen:

  1. Nach dem aufspielen, den Arduino für ein paar Sekunden das USB Kabel ausstecken und dann wieder anstecken.
  2. Wenn das nicht geholfen hat, dann bitte die folgende Zeile mal in den Loop eintragen.
    Serial.println(loopCountdown);
    Im seriellen Monitor müsste dann eine Zahl immer wieder runtergezählt werden.

Kurz zu der Frage: „ganz schön am arbeiten“

So ein Microcontroller läuft immer mit voller Leistung/Taktrate. Es ist also egal ob er viel zu tun hat oder ob er Däumchen dreht, auf die Lebensdauer hat das keinen Einfluss.
(Einzig wenn man die Stromspar Modi nutzt wird der Core abgeschaltet)

Überlasten kann man den Controller auch nicht, wenn man ihm mehr zu tun gibt als er erledigen kann, dann verzögert sich halt alles.

Deswegen kann es zum Beispiel bei ungünstigem Design dazu kommen, dass die Tasten verzögert sind oder die LEDs hängen.

1 „Gefällt mir“

Super, danke für deinen Input. So hab ich das auch eingeschätzt. Aber glauben und wissen sind zwei verschiedene Dinge.

Habe übrigens die ino Version von meiner Git Seite runtergeladen und getestet um sicher zu gehen. Bei mir läuft es sowohl auf dem Testaufbau als auch in einem fertigem TonUINO ohne Probleme.
Bin schon etwas neugierig warum es bei dir @ThomasK nicht funktioniert.

Edit: Habe gerade deine Ergänzung oben gesehen. Freut mich, dass es funktioniert.

@tON
Witzigerweise geht es auf meinen TestUino auch nicht.
Auf der aktiven Box, läuft es problemlos.

Auf der Testversion, bekomme ich nur meins ans laufen. Habe auch extra den Sketch neu zusammengebaut, deinen neu heruntergeladen, den vom Laptop geholt, an dem die funktionierende Version geflasht wurde., etc.
Bin ratlos.
Beim auflegen einer Karte dreht sich einmal grün im Kreis und dann gehen die LEDs aus.
Zweiten Arduino hab ich auch schon genommen, PIN passt…
Hast Du noch eine Idee?

High @tON,

ich habe mir deine Version aus github genommen und habe den „RotaryEncoder“ dazu gepatch.

In meinem Aufbau, also mit einem zufälligen KY-040 aus der KramKiste, funktioniert das super.
Vielleicht ist es nützlich für euch.

Danke für deine Erweiterung,
cheers, bye,
Marco

3 „Gefällt mir“

@MetalMonkey
Wie ist den die pin Belegung deines rotaryEncoder?
Mfg
Marco

Ich habe erstmal D5, D6 und A3 verwendet:
#define ENCODER_PIN_A 5
#define ENCODER_PIN_B 6
#define ENCODER_PUSH_BUTTON A3

Aber das ist ja flexible.

1 „Gefällt mir“

Danke, es läuft super

1 „Gefällt mir“

same here! :grin:

Vielen Dank für das Teilen Der Anpassung mit dem Neopixel! Ich hatte noch einen China-Klon rumliegen und es funktioniert (beim zweiten Versuch, s.o.) wunderbar.

Eine Frage:
#define LED_SR_Switch ist ja die Funktion, per Pause und up/down die LEDs auszuschalen, das funktioniert auch, aber wie verhält sich #define LED_SR_Powersafe, also was macht das? Sorry, falls ich es übersehen haben sollte!

Viele Grüße!

Freut mich, dass meine LED Integration bei dem einen oder anderen zum Einsatz kommt.

@barni: Das hört sich echt komisch an, warum es bei dem einen Aufbau klappt und bei dem anderen nicht. Ich habe bei der Fehlersuche die Variablen (bspw. loopCountdown) in der Konsole auswerfen lassen. Da ist mir irgendwann aufgefallen, dass manche Änderungen erst nach dem „vom Strom nehmen“ umgesetzt wurden und dann funktioniert hat. Woran das aber liegt und das wichtigere, wie man das Ändern kann, habe ich leider keine Ahnung.

@HomerJayS: Die Funktion „#define LED_SR_Powersafe“ ist noch nicht umgesetzt. Meine Idee war es, dass die Animation nur für einen kurzen Moment aktiviert werden und dann wieder ausgeschaltet werden. Wenn der Tonuino beim Abspielen in der Gegend rumsteht, müssen die Animationen durchlaufen. Dies wäre garnicht so schwer umzusetzen, da man nur den animationCountdown begrenzen muss, bin aber aus Zeitgründen noch nicht dazu gekommen.

@MetalMonkey: Weil mein Code das Ziel hatte unabhängig von anderen Erweiterungen zu funktionieren und es damit schnell eingebunden werden kann, hast du mich neugierig gemacht. Was genau steuerst du mit dem RotaryEncoder? Welchen Einfluss hat es auf die LEDs?

@tON
Vielen Dank für deinen Code, die beiden Boxen meiner Mädels sehen super aus!
Bei mir hat alles auf Anhieb geklappt und ea funktioniert sogar leicht modifiziert mit Poti.

1 „Gefällt mir“

hat das jemand auch schon für die Firmware von @stephan getestet?
Da ist allerdings ja schon was integriert.

Hallo @tON
Ich habe deine LED-Animation auch bei mir integriert und bin echt begeistert. Die Animationen laufen auf einem LED-Ring mit 12 LED’s von A-Z-Delivery. Sieht echt super aus. Ich hatte jedoch einen eigenartigen Effekt. Wenn ich die Animation bei laufender MP3-Wiedergabe über langen Druck Down/Pause abgeschaltet habe, reagierte der Tonuino auf keine Taste und keine Karte mehr. Wieder Einschalten der Animation ging auch nicht. Nur eine Trennung von der Stromversorgung , oder Reset über die Resettaste des Arduino führten zum Neustart. Wenn keine wiedergabe lief konnte man Die LED-Animation aus und wieder einschalten.
Ich habe dann in den Code folgende Zeilen eingefügt, die den MP-3 Player bei Ein oder Abschalten der Animation in Pause setzen. Nun funktioniert es.

//********************************************************************************
//                            LOOP
//********************************************************************************
void loop() {
  do {

 //************************ LED Animation *****************************

#ifdef LED_SR
// LED Strip und Ring
   #ifdef LED_SR_Switch    // Einstieg Abfrage Tasten zur Aktivierung / Deaktivierung LED Animationen
   
// *********** Enable led strip ***********  Vor Taste und Pause Taste langer Druck

    if ( (upButton.pressedFor(LONG_PRESS) || pauseButton.pressedFor(LONG_PRESS) ) && upButton.isPressed() && pauseButton.isPressed()) {
      lsrEnable = true ;
      if (isPlaying()) {      // Widergabe muss gestoppt werden, sonst hängt sich der Mp3-Player auf
          mp3.pause();
          setstandbyTimer();
        }
    }
    
// ***********Disable led strip **********  Zurück Taste und Pause Taste langer Druck

    if ( (pauseButton.pressedFor(LONG_PRESS) || downButton.pressedFor(LONG_PRESS) ) && pauseButton.isPressed() && downButton.isPressed()) {
      lsrEnable = false ;
      strip.clear();
      strip.show();
      if (isPlaying()) {      // Widergabe muss gestoppt werden, sonst hängt sich der Mp3-Player auf
          mp3.pause();
          setstandbyTimer();
        }
    }
  
   #endif                      // Ende Abfrage Tasten zur Aktivierung LED Animationen #ifdef LED_SR_Switch

     #ifdef LED_SR_Switch       // Ergebnis Tastenabfrage
     if (lsrEnable == true) {  // Wenn wahr, Animationen durchführen
     #endif


///////////////// Prüfung der einmaligen Animationen /////////////////

// ----------   Liedänderung erkennen und Animation aktivieren   ---------- //   

Und am Ende

// ----------   Countdown Zähler über den loop als Ersatz zur delay Funktion   ----------
if (loopCountdown != 0 ){ loopCountdown--;}

// ----------   Dadurch wird die Änderung der Lautstärke bzw. Track nur ein mal registiert   ----------
lastDetectedVolume = currentDetectedVolume;
lastDetectedTrack = currentDetectedTrack;

    #ifdef LED_SR_Switch

    }

    #endif

#endif                      // Ende Abfrage Aktivierung LED Animation #ifdef LED_SR

//*************************** Ende LED Animation ************************* 

//******************** Weiter im Loop *************************  

Man muss allerdings die wiedergabe dann über die Play Taste wieder starten.

Danke für die NeoPxel Integration!
Ist es normal das Play und Pause das gleiche Muster abspülen?

Füge mal
strip.clear(); // Danach nur ein Punkt

So wie unten gezeigt ein. Dann hast du bei Pause nur einen rotierenden Punkt, der die Farbe wechselt.

// ----------   Loop Animation: Musik pausiert   ---------- //  
if (lsrAnimationMode == 0 && loopCountdown == 0 && isPlaying() == false && knownCard == true)
{
  lsrLoopCountWait = 15; // Geschwindigkeit der Animation, je größer desto langsamer

  // Fabre definieren: hue Spektrum (Rainbow)
  strip.clear();   // Danach nur ein Punkt
  x=0;
  do
  {
    for (i = 0; i < strip.numPixels(); i++)
    {
      lsrColors = strip.ColorHSV(i * 65536 / strip.numPixels(), 255, 30);
      lsrColorR[i] = (lsrColors >> 16 & 0xFF);
      lsrColorG[i] = (lsrColors >> 8 & 0xFF);
      lsrColorB[i] = (lsrColors & 0xFF);

Danke für deine Hilfe. Funktioniert leider nicht richtig. Ich sehe den einzelnen Punkt nur ganz kurz dann wechselt die Animation zum gefüllten Rainbow Ring.

Da ist noch irgendwas faul bei dir. Bei mir funktioniert das so einwandfrei. Lies dir doch mal die Beiträge am Anfang dieses treads durch. Da wurde das mit strip.clear() schon mal gepostet.

Das klingt danach als ob die Bedingung für die Warteanimationen nach einem Durchlauf nicht mehr erfüllt ist? Probier vielleicht mal eine Debugmeldung und den „Warteaninationsloop“ einzubauen die das prüft?

Danke für deine Antwort. Kannst du mir Bitte weiterhelfen wie ich das hinbekomme?! :slight_smile:

Wenn ich Pause drücke sagt der Serielle Monitor:

=== setstandbyTimer()
0

kann über den Play/Pause Knopf die Wiedergabe auch nicht mehr starten.

 _____         _____ _____ _____ _____
|_   _|___ ___|  |  |     |   | |     |
  | | | . |   |  |  |-   -| | | |  |  |
  |_| |___|_|_|_____|_____|_|___|_____|

TonUINO Version 2.1
created by Thorsten Voß and licensed under GNU/GPL.
Information and contribution at https://tonuino.de.

=== loadSettingsFromFlash()
Version: 2
Maximal Volume: 25
Minimal Volume: 5
Initial Volume: 15
EQ: 1
Locked: 0
Sleep Timer: 0
Inverted Volume Buttons: 1
Admin Menu locked: 0
Admin Menu Pin: 1111
=== setstandbyTimer()
0
Firmware Version: 0x92 = v2.0
=== playShortCut()
3
Shortcut not configured!
Card UID: 67 A6 7A 5F
PICC type: MIFARE 1KB
Authenticating Classic using key A...
Reading data from block 4 ...
Data on Card :
 13 37 B3 47 02 02 02 1B DC 00 00 00 00 00 00 00

2
2
== playFolder()
=== disablestandby()
27 Dateien in Ordner 2
Album Modus -> kompletten Ordner wiedergeben
=== setstandbyTimer()
0