NEOpix-auszurMitte.ino


Bastelseite Display + Antriebe Sensoren C++


Neopixel

... und hier die Beschreibung und den Sketch dazu:

Demo 01
Teil 1 vom Sketch

Vor dem 1. Teil liegt die Initialisierung der Bibliotheken, Definition der Anschlusses am Arduino und der Anzahl der LEDs als Festlegung.

Der erste Teil zeigt in ROT eine LED in der Mitte des Bandes, die nach beiden Seiten sich gleichzeitig auseinander bewegt und die rote Lichtspur hinterläßt. Dies war für mich der Einstieg.

So kam die Idee der Funktion "zurMitte" zustande. Ich wollte den Sketch kürzen, indem ich nur die Farbangaben zur Funktion mit eingebe. Damit wurde von beiden Seite eine LED gestartet, die zur Mitte hin läuft und eine Leuchtspur hinterläßt. Als Schlusspunkt die letzte LED in der Mitte noch angesprochen und fertig: das ganze Band leuchtet!


So rufe ich die Funktion nur noch mit  zurMitte(Rot, Grün, Blau);  auf. Für die einzelnen Farbwerte nimmt man die RGB-Werte von 0 bis 255. Woher weiss ich welche Farbe welchen Wert hat?

Im Web gibt es einige Seiten dafür:
 www.farb-tabelle.de...
 www.mediaevent.de/.../farbcodes
Umrechner HTML-Farbcodes, Hex-/ RGB-Farbwerte: 
technikblog.gerhard-kerner.at/...
Farbnamen / RGB / HEX Vergleich:
  www.markusbader.de/tricky/...

... um nur ein paar Beispiele zu zeigen.

NameFarbeRotGrünBlau
Rot Farbe  25500
Grün Farbe 02550
Blau Farbe 00255
Gelb Farbe 2552550
Cyan Farbe 0255255
Magenta Farbe 2550255
Weiß Farbe 2552550

Teil 2 vom Sketch

In diesem Teil geht es um die Umkehrung von Teil 1: "ausMitte". Der Aufruf der Funktion lautet
  ausMitte(LEDs, Rot, Grün, Blau);  

Wie man gleich sehen kann, hat die Funktion einen Übergabewert mehr: LEDs. Dies ist die Hälfte der Gesamtanzahl des Neopixel-Bandes. Nein, ich habe nur 47 LEDs zum Ansteuern, aber so werden die LEDs von außen alle angesprochen. Die RGB-Farbangaben sind gleich wie bei Teil 1.

Als erstes wird die mittlere LED (Nummer 23 bei mir, dad die Zählung bei Null beginnt) angeschaltet. Davon ausgehend wird eine nach der anderen nach außen hin angesprochen - bis danze Band leuchtet.


Teil 3 vom Sketch

Dieser Teil ist der interessantere: Funktion "aus Mitte" wird nun etwas ausgereitzt! Da wir die Anzahl der anzusprechenden LEDs angeben, können wir somit festlegen, wieviele LEDs eigentlich leuchten sollen.

Ich beginne mit "24" als Eingabe, und veringere jeweils um eins. So wird nach jeder Seite hin nach außen eine LED weniger mit der Farbe angesprochen. Es bleibt immer eine LED mit der alten Farbe leuchtend stehen, bis alle Farben mit immer weniger LEDS leuchten.


Sketch NEOpix-auszurMitte.ino


Hier der Sketch mit den 3 Teilen:



// NEOpix-auszurMitte.ino   März 2021 geändert HBX
#include 
#ifdef __AVR__
#include  // Required for 16 MHz Adafruit Trinket
#endif

// AnschlussPin am Arduino - Widerstand 470 Ohm - DataIN-Neopixel
#define PIN        8 // Welcher AnschlussPin am Arduino?

// Wieviele NeoPixels soll der Arduino ansteuern?
#define AnzahlNEO 47 // Anzahl der NeoPixel?

Adafruit_NeoPixel pixels(AnzahlNEO, PIN, NEO_GRB + NEO_KHZ800);
#define VerweilZeit 50 // Time (in milliseconds) to pause between pixels

void setup() {
  pixels.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
  pixels.clear(); // Set all pixel colors to 'off'
}

void loop() {

  for (int i = 0; i < 24; i++) {
    pixels.setPixelColor(23 + i, pixels.Color(255, 0, 0));
    pixels.setPixelColor(23 - i, pixels.Color(255, 0, 0));
    pixels.show();
    pixels.setPixelColor(23, pixels.Color(255, 0, 0)); //  ROT
    pixels.show();
    delay(VerweilZeit);
  }
  
  // zurMitte(Wert für Rot, Wert für Grun, Wert für Blau);
  zurMitte(255, 0, 0);   // ROT
  zurMitte(0, 255, 0);   // GRÜN
  zurMitte(0, 0, 255);   // BLAU
  zurMitte(255, 255, 0); // GELB     ( Rot + Grün )
  zurMitte(0, 255, 255); // CYAN     ( Grün + Blau )
  zurMitte(255, 0, 255); // MAGENTA  ( Rot + Blau )
  delay(3000);
  
  // ausMitte(LEDanzahl, Wert für Rot, Wert für Grun, Wert für Blau);

  ausMitte(24, 255, 0, 0);   // ROT
  ausMitte(24, 0, 255, 0);   // GRÜN
  ausMitte(24, 0, 0, 255);   // BLAU
  ausMitte(24, 255, 255, 0); // GELB     ( Rot + Grün )
  ausMitte(24, 0, 255, 255); // CYAN     ( Grün + Blau )
  ausMitte(24, 255, 0, 255); // MAGENTA  ( Rot + Blau )
  delay(3000);

 for (int a = 0; a < 3; a++) {
  ausMitte(24, 255, 0, 0);   // ROT
  ausMitte(23, 0, 255, 0);   // GRÜN
  ausMitte(22, 0, 0, 255);   // BLAU
  ausMitte(21, 255, 255, 0); // GELB     ( Rot + Grün )
  ausMitte(20, 0, 255, 255); // CYAN     ( Grün + Blau )
  ausMitte(19, 255, 0, 255); // MAGENTA  ( Rot + Blau )
  ausMitte(18, 255, 0, 0);   // ROT
  ausMitte(17, 0, 255, 0);   // GRÜN
  ausMitte(16, 0, 0, 255);   // BLAU
  ausMitte(15, 255, 255, 0); // GELB     ( Rot + Grün )
  ausMitte(14, 0, 255, 255); // CYAN     ( Grün + Blau )
  ausMitte(13, 255, 0, 255); // MAGENTA  ( Rot + Blau )
  ausMitte(12, 255, 0, 0);   // ROT
  ausMitte(11, 0, 255, 0);   // GRÜN
  ausMitte(10, 0, 0, 255);   // BLAU
  ausMitte(9, 255, 255, 0); // GELB     ( Rot + Grün )
  ausMitte(8, 0, 255, 255); // CYAN     ( Grün + Blau )
  ausMitte(7, 255, 0, 255); // MAGENTA  ( Rot + Blau )  
  ausMitte(6, 255, 0, 0);   // ROT
  ausMitte(5, 0, 255, 0);   // GRÜN
  ausMitte(4, 0, 0, 255);   // BLAU
  ausMitte(3, 255, 255, 0); // GELB     ( Rot + Grün )
  ausMitte(2, 0, 255, 255); // CYAN     ( Grün + Blau )
  ausMitte(1, 255, 0, 255); // MAGENTA  ( Rot + Blau )    
  delay(3000);
 }
}

// ------------------- Funktion "ausMitte" -----------------------------
void ausMitte (int x, int FarbeR, int FarbeG, int FarbeB) {
  for (int i = 0; i < x; i++) {
    pixels.setPixelColor(23, pixels.Color(FarbeR, FarbeG, FarbeB));
    pixels.setPixelColor(23 + i, pixels.Color(FarbeR, FarbeG, FarbeB));
    pixels.setPixelColor(23 - i, pixels.Color(FarbeR, FarbeG, FarbeB));
    pixels.show();
    delay(VerweilZeit);
  }
}  // ------------------Ende void "ausMitte"

// ------------------- Funktion "zurMitte" -----------------------------
void zurMitte (int FarbeR, int FarbeG, int FarbeB) {
  for (int i = 0; i < AnzahlNEO; i++) {
    pixels.setPixelColor(i, pixels.Color(FarbeR, FarbeG, FarbeB));
    pixels.setPixelColor(AnzahlNEO - i, pixels.Color(FarbeR, FarbeG, FarbeB));
    pixels.show();
    delay(VerweilZeit);
  }
  pixels.setPixelColor(23, pixels.Color(FarbeR, FarbeG, FarbeB));
  pixels.show();
}  // ---------------- Ende void "zurMitte"


OLED-Display

Die Befehle vom OLED-Display findet man auf der Startseite vom OLED-Display selbst.



Übersicht Anfang 3 Potis


brixelweb.de