sanweb:
Ist also mein optisches empfinden, wenn man die beiden Stripes beobachtet, wie es tatsächlich sich verhält kann ich nicht beurteilen, da ich keinerlei Messmethoden zur Verfügung hätte ...
Das menschliche Auge sieht Farben und Helligkeit nicht linear. Was Deine Pflanzen "sehen", ist davon unabhängig.
Eigentlich möchtest Du eine lange Rotphase mit einem weichen Übergang beim Wechsel. Dazu braucht man unterschiedliche Intervalle:
// https://forum.arduino.cc/index.php?topic=713848.msg4796724#msg4796724
// Arduino Nano WS2812B Lauflicht FastLED Sketch
#include <FastLED.h>
#define LED_PIN 11
#define NUM_LEDS 120
#define LED_TYPE WS2812B
#define COLOR_ORDER GRB
#define BRIGHTNESS 200
#define LED_GRUPPE 6
#define ROTZEIT 10000
CRGB leds[NUM_LEDS];
uint32_t jetzt;
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
LEDS.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS);
FastLED.setBrightness(BRIGHTNESS);
FastLED.clear();
FastLED.show();
}
void loop() {
jetzt = millis();
animation();
herzschlag();
}
void animation() {
static uint32_t vorhin = jetzt;
static uint32_t intervall = 10;
static byte gb = 0;
static byte led = 0;
if (jetzt - vorhin >= intervall) {
vorhin = jetzt;
intervall = 10;
for (byte j = 0; j < LED_GRUPPE; j++) {
leds[j] = CRGB(255, 255, 255);
}
leds[led] = CRGB(255, gb, gb);
if (led + 1 < LED_GRUPPE) {
leds[led + 1] = CRGB(255, 255 - gb, 255 - gb);
} else {
leds[0] = CRGB(255, 255 - gb, 255 - gb);
}
if (gb < 255) {
gb++;
if (gb == 255) intervall = ROTZEIT;
} else {
gb = 0;
led + 1 < LED_GRUPPE ? led++ : led = 0;
}
for (byte j = LED_GRUPPE; j < NUM_LEDS; j++) {
leds[j] = leds[j - LED_GRUPPE];
}
leds[28] = CRGB(0, 0, 0);
leds[29] = CRGB(0, 0, 0);
leds[30] = CRGB(0, 0, 0);
leds[31] = CRGB(0, 0, 0);
leds[88] = CRGB(0, 0, 0);
leds[89] = CRGB(0, 0, 0);
leds[90] = CRGB(0, 0, 0);
leds[91] = CRGB(0, 0, 0);
FastLED.show();
}
}
void herzschlag() {
static uint32_t vorhin = jetzt;
static uint32_t intervall = 222;
if (jetzt - vorhin >= intervall) {
vorhin = jetzt;
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}
}
Durch die Verwendung von millis() könnte der Nano auch noch spannende Informationen auf ein Display schreiben. Stattdessen habe ich einen "Herzschlag" eingebaut.