NeoPixel einzelne Pixel dimmen

Uint8_t bzw. byte ist implizit gecasted. D.h. bei Überlauf rotiert der Wert durch. 255 + 1 = 0 und 1 - 2 = 255.

Wenn Du das nicht willst, musst du vor Addition / Subtraktion abfragen, ob der Wert überlaufen würde.

Schau Dir nochmal mein interpret_ir() an.

Leider reagiert mir die Bar zu schnell.

Naja, das ist leichter zu beheben, als wenn es zu langsam wäre... Kannst ja 10x analogRead ausführen und einen Mittelwert bilden, das nimmt das Geflacker ein wenig raus.

Deine gesuchte increment Funktion ist so trivial, dass sie nicht extra implementiert ist.

Könnte man z.B. so lösen:

EVERY_N_MILLISECONDS(10) {i++};

Aus den bpm kannst Du die Periodenlänge berechnen. Mach noch eine Abfrage für obere und untere Limits rein, sowie eine variable Schrittlänge und Du hast, was Du willst.

Gruß

Helmuth

Korrektur: Schau Dir mal beat8 an, die erzeugt einen Sägezahn.

Hier mal konkret als umgebaute Version von beatsin8 mit allen denkbaren Parametern:

uint8_t beatsaw8( accum88 beats_per_minute, uint8_t lowest = 0, uint8_t highest = 255,
                            uint32_t timebase = 0, uint8_t phase_offset = 0)
{
  uint8_t beat       = beat8( beats_per_minute, timebase);
  uint8_t beatsaw    = beat + phase_offset;
  uint8_t rangewidth = highest - lowest;
  uint8_t scaledbeat = scale8( beatsaw, rangewidth);
  uint8_t result     = lowest + scaledbeat;
  return result;
}

Hallo Helmuth! Erstmal ein verspätetes, frohes Neues! :grin:

War die Semesterferien viel im Labor und am PC und bin ganz gut voran gekommen.

Ich habe jetzt eine eigene OP Schaltung und einen Tiefpass für das Mikrofon eingebaut.

Außerdem habe ich die VU-Meter Animation angepasst. Mit dem TP und den Änderungen ist die Dynamik jetzt deutlich besser. Die Bar habe ich optisch auch etwas weiter Richtung rot geschoben.

Vorher

Nachher

VielenDank für deine erneuten Anregungen. Ich werde mir die beatsaw8 nochmal ansehen. :) Etwas Optimierung ist ja nie verkehrt.

Aktuell fehlt nur noch das PCB, dann gehts an den ersten autarken Prototypen :) Ich freue mich riesig, dass es dank deiner Unterstützung so gut geklappt hat!

Liebe Grüße

Das sieht gut aus! Weiter so! Karma +.

Das 2. Video geht leider nicht.

Mit wievielen fps läuft das?

Wie hast Du den Filter (Spule + Kondensator?) dimensioniert?

Wünsche weiterhin ein kreatives Neues, Grüße,

Helmuth

Danke :) Hätte ich ohne dich so nicht geschafft! Und noch einmal einen separaten Dank dafür, dass du mich zum Wechsel zu FastLED gebracht hast. Möchte mir nicht ausmalen, wie es wäre, wenn ich das erst nach 1-2 Jahren gemacht hätte!

Das Video habe ich neu verlinkt :) Ist evtl. etwas überdramatisiert, aber nach dem letzten Test war ich etwas euphorisch ^^

Der Filter ist ein einfacher Tiefpass 1. Ordnung. 10k Widerstand und 470n Kondensator.

Ich habe mit einem Poti zwischen 0 und 10k getestet. Wollte eigentlich einen 350Hz Filter nehmen, aber mit 35Hz sieht es schöner aus.

Liegt evtl auch an der hohen Verstärkung. Der OP verstärkt 470-fach.

Ich hatte noch im Hinterkopf, dass es für die FPS berechnung eine Funktion in der FastLED gibt? Habe im netz leider nichts gefunden. Wie errechne ich die?

Möge die kreativität auch mit dir sein :D

Schickes Video.

Ich hatte noch im Hinterkopf, dass es für die FPS berechnung eine Funktion in der FastLED gibt?

Serial.println( LEDS.getFPS() );

Danke! :)

Krass, teilweise sind die FPS echt unterirdisch :o

  1. 220
  2. 20
  3. 230
  4. 16
  5. 12
  6. 12

Sieht aber nicht so schlimm aus wie ich finde :o

Na dann schau dir den Code der entsprechenden Animationen an und finde heraus, an welcher Stelle es schleift.

Grüße!

Hoppla, hatte die Pixel Ausgabe innerhalb der millis()-"Delays" :cold_sweat:

Bin jetzt durchgehend bei 230 FPS. Das sollte passen :D

Danke für den Hinweis! Bin immer offen für konstruktive Kritik und Anregungen. :)

Das klingt schon besser. Geht doch! ;)