Hi
Sorry das mit nicht gelöst habe ich nicht gewusst bzw. Ich weiß gar nicht wo das geht ?
Ich hatte aber ein Feedback gegeben.
Wäre aber echt super wenn du mir trotzdem noch einmal helfen würdest.
Wünsche allen ein schönes Wochenende
Gruß
Hi
Sorry das mit nicht gelöst habe ich nicht gewusst bzw. Ich weiß gar nicht wo das geht ?
Ich hatte aber ein Feedback gegeben.
Wäre aber echt super wenn du mir trotzdem noch einmal helfen würdest.
Wünsche allen ein schönes Wochenende
Gruß
Evtl. musst du dich bis morgen gedulden.
Aber das bekommen wir hin.
Keine Angst das habe nicht übersehen, alles lesen bringt Licht in die Dunkelheit ;)
Hi
Das wäre ja wirklich prima ![]()
![]()
![]()
Vielen lieben Dank
Nur Lauflicht
// Forensketch 10 Sekunden Pixel Lauflicht
// based on https://forum.arduino.cc/t/ir-sensor-zu-auslosen-led-stripe/1249286/16
// Erster Stand: Lauflicht ohne delay()
#include <Adafruit_NeoPixel.h>
constexpr byte irPin {2}; // Pin, an dem der IR-Sensor angeschlossen ist ( von D0 auf Digital 2 aufn Board)
constexpr byte pixelPin {7}; // Hier wird angegeben, an welchem digitalen Pin die WS2812 LEDs bzw. NeoPixel angeschlossen sind
constexpr byte NUMPIXELS {60}; // Hier wird die Anzahl der angeschlossenen WS2812 LEDs bzw. NeoPixel angegeben
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, pixelPin, NEO_GRB + NEO_KHZ800);
void setup()
{
Serial.begin(115200);
Serial.println(F("\r\nStart...\r\n"));
pixels.begin();
}
void loop()
{
pixelLauflicht(20);
}
void pixelLauflicht(const uint32_t delayTime)
{
static byte myPixel = 0;
static uint32_t lastmillis = 0;
uint32_t myTime = millis();
if (myTime - lastmillis > delayTime)
{
pixels.clear();
if ((myTime - lastmillis > (delayTime * 2)) ||
(myPixel > NUMPIXELS - 1))
{
myPixel = 0;
}
pixels.setPixelColor(myPixel, pixels.Color(255, 000, 0));
pixels.show();
myPixel++;
lastmillis = myTime;
}
}
Nur ONBOARD(!) LED wenn der Sensor auslöst.
Es kann sein, dass die LED AUS oder auch AN geht, wenn der Sensor eine entsprechende Aktion bemerkt.
Achtung: Ich hab die Hysterese recht klein gestellt in der Hoffnung dass es passt.
Der Sensor hat einen einstellbaren Widerstand - mit dem kannst Du ein wenig spielen.
Es wird Dir auf dem seriellen Monitor der Wert ausgegeben, den der Sensor bereit stellt.
Wenn die Onboard-LED nicht umschaltet, brauche ich die Werte die dort ausgegeben werden für Reflexion und keine Reflexion, damit wir das ggfls. anpassen koennen.
Achte auf die eingestellte Geschwindigkeit für den Seriellen Monitor!
Der PIN 2 geht an D0 auf dem Sensor,
Der PIN A0 geht auf den A0 des Sensor.
// Forensketch 10 Sekunden Pixel Lauflicht
// based on https://forum.arduino.cc/t/ir-sensor-zu-auslosen-led-stripe/1249286/16
// Zweiter Stand: Schaltschwelle feststellen
#include <Adafruit_NeoPixel.h>
constexpr byte irPin {2}; // Pin, an dem der IR-Sensor angeschlossen ist ( von D0 auf Digital 2 aufn Board)
constexpr byte irStatePin {A0};
constexpr int stateHysterese {300};
constexpr byte pixelPin {7}; // Hier wird angegeben, an welchem digitalen Pin die WS2812 LEDs bzw. NeoPixel angeschlossen sind
constexpr byte NUMPIXELS {60}; // Hier wird die Anzahl der angeschlossenen WS2812 LEDs bzw. NeoPixel angegeben
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, pixelPin, NEO_GRB + NEO_KHZ800);
void setup()
{
Serial.begin(115200);
Serial.println(F("\r\nStart...\r\n"));
pixels.begin();
pinMode(irPin, OUTPUT);
digitalWrite(irPin, HIGH); // Turning ON LED
delayMicroseconds(500); // kurz warten, einpendeln des Sensors
pinMode(irStatePin, INPUT); // Analogpin, aus Gründen der Übersichtlichkeit
pinMode(LED_BUILTIN, OUTPUT);
}
void loop()
{
// pixelLauflicht(20);
digitalWrite(LED_BUILTIN, getIrStatus());
}
//
bool getIrStatus()
{
uint16_t irValue = analogRead(irStatePin);
Serial.println(irValue);
delay(100);
return irValue > stateHysterese ? true : false;
}
//
void pixelLauflicht(const uint32_t delayTime)
{
static byte myPixel = 0;
static uint32_t lastmillis = 0;
uint32_t myTime = millis();
if (myTime - lastmillis > delayTime)
{
pixels.clear();
if ((myTime - lastmillis > (delayTime * 2)) ||
(myPixel > NUMPIXELS - 1))
{
myPixel = 0;
}
pixels.setPixelColor(myPixel, pixels.Color(255, 000, 0));
pixels.show();
myPixel++;
lastmillis = myTime;
}
}
Moin
Ich habe den Sketch hochgeladen. so wie es aussieht, macht der Sketch was er soll. Onboard LED geht aus wenn sich etwas vor dem IR Sensor befindet.
Ich weiß nicht wie man hier ein Video einbindet. Deshalb der Link zum Video.
Gruß
Hi
Und wie geht es weiter ?
Gruß
Daraus baue ich Dir was - Sei nicht so unruhig. Es soll Leute geben, die haben auch noch andere Dinge zu tun...
Und ich werde heute nicht alt.
Also morgen.
In der Hoffnung, dass das Lauflicht auch funktioniert hat.
Moin
Sorry für meine Ungeduld.
Bin ja froh wenn du mir hilfst .
Also das lautliche über den fertigen Sketch alleine funktioniert soweit.
Dein Sketch als einzelnes läuft auch wie oben beschrieben.
Brauchst du noch irgendwelche Informationen?
Ich habe mal an Pin 7 das Signalkabel angeschlossen aber es passierte nix. Denke es sollte auch noch nix passieren, da du ja geschrieben hattest only Onboard LED.
Mit freundlichen Grüßen
// Forensketch 10 Sekunden Pixel Lauflicht
// based on https://forum.arduino.cc/t/ir-sensor-zu-auslosen-led-stripe/1249286/16
// Dritter Stand: Mal sehen, ob es das ist...
#include <Adafruit_NeoPixel.h>
constexpr byte irPin {2}; // Pin, an dem der IR-Sensor angeschlossen ist ( von D0 auf Digital 2 aufn Board)
constexpr byte irStatePin {A0}; // Pin auf dem der IR-Wert ausgelesen wird
constexpr int stateHysterese {300}; // UmschaltWert am AnalogPort
constexpr bool irActive {true}; // Vorgabe für Vergleich
constexpr byte pixelPin {7}; // Hier wird angegeben, an welchem digitalen Pin die WS2812 LEDs bzw. NeoPixel angeschlossen sind
constexpr byte NUMPIXELS {60}; // Hier wird die Anzahl der angeschlossenen WS2812 LEDs bzw. NeoPixel angegeben
bool pixelIsActive = false;
constexpr uint32_t pixelOnTime {10000}; // Zeit in ms
uint32_t pixelStartTime;
byte myPixel = 0;
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, pixelPin, NEO_GRB + NEO_KHZ800);
void setup()
{
Serial.begin(115200);
Serial.println(F("\r\nStart...\r\n"));
pixels.begin();
pinMode(irPin, OUTPUT);
digitalWrite(irPin, HIGH); // Turning ON LED
delayMicroseconds(500); // kurz warten, einpendeln des Sensors
pinMode(irStatePin, INPUT); // Analogpin, aus Gründen der Übersichtlichkeit
pinMode(LED_BUILTIN, OUTPUT);
}
void loop()
{
checkDriveIn();
}
//
void checkDriveIn()
{
bool irStatus = getIrStatus(); // ermitteln des IR
digitalWrite(LED_BUILTIN, irStatus); // Kontrollausgabe
if (pixelIsActive)
{
pixelLauflicht(pixelOnTime); // Lauflicht
if (millis() - pixelStartTime > pixelOnTime) // Zeit ist um
{ pixelIsActive = false; } // beenden
}
else // Pixel nicht aktiv
{
if (irStatus == irActive) // Einschaltreflexion
{
pixelIsActive = true; // Pixel aktiv setzen
myPixel = 0; // Startpixel festlegen
pixelStartTime = millis(); // Startzeit merken
}
}
}
//
bool getIrStatus()
{
uint16_t irValue = analogRead(irStatePin);
Serial.println(irValue);
delay(100);
return irValue > stateHysterese ? true : false;
}
//
void pixelLauflicht(const uint32_t delayTime)
{
static uint32_t lastmillis = 0;
uint32_t myTime = millis();
if (myTime - lastmillis > delayTime)
{
pixels.clear();
if ((myTime - lastmillis > (delayTime * 2)) ||
(myPixel > NUMPIXELS - 1))
{
myPixel = 0;
}
pixels.setPixelColor(myPixel, pixels.Color(255, 000, 0));
pixels.show();
myPixel++;
lastmillis = myTime;
}
}
Bin ja mal gespannt...
Es ist keine Routine drin, die erkennt, ob der Sensor wieder frei ist.
Sollte also vor dem Sensor dauerhaft was sein, wird auch dauerhaft das LL gehen.
Ist nix davor, geht das LL nach nicht aus. Es bleibt der letzte Pixel an - das ist Absicht und wenn das funktioniert, kannst Du Dir noch was wünschen - in der naechsten Version geht der Pixel dann auch aus und das wars dann.
Moin
Vielen Dank für deine Mühe.
Ich habe den Sketch hochgeladen und das ist das Ergebnis.
Außer das eine LED vom Lauflicht an ist und bleibt, ist alles beim alten.
Der Onboard LED geht aus wenn sich etwas vor dem Sensor befindet.
Ich habe die Verkabelung so gelassen. DO auf PIN2 (Digital PWM) und A0 auf Analog In A0, VCC an 5Volt + und GND auf GND auf Board.
Das Lauflicht WS2812 habe ich mit einem ext. Netzteil 5V 1A versorgt und zusätzlich GND auf dem Board. Das Grüne Kabel ( Signal ) habe ich auf Digital PWM Pin 7 gelegt.
Wenn ich das Examples Adafruit NEO Pixel ( standfest wheel ) nehme funktioniert es.
Habe ich mal wieder etwas übersehen ??
Gruß
Hallo
Bin leider noch nicht weiter ![]()
Allen einen schönen Sonntag.
Gruß
Hallo
Dieses Problem ist gelöst !!
Vielen dank
Dann bitte laß uns nicht neugierig und unwissend sterben.
Grüße Uwe
Kannst Du das irgendwie teilen und hier anpinnen?
Bitte dann meinen Folgekommentar auch mitnehmen.
Moin
Hier mein Sketch
#include <Adafruit_NeoPixel.h>
// Pin für WS2812-Streifen
#define LED_PIN 6
// Anzahl der LEDs im Streifen
#define NUM_LEDS 60
// Initialisierung des WS2812-Streifens
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);
// Pin für TCRT5000-Sensor
#define SENSOR_PIN 2
// Variablen für Timing und Zustand
bool is_running = false;
unsigned long start_time = 0;
unsigned long duration = 10000; // 15 Sekunden !! GEÄNDERT //
void setup() {
strip.begin();
strip.show(); // Alle LEDs ausschalten
pinMode(SENSOR_PIN, INPUT); // Sensor-Pin als Eingang setzen
}
void loop() {
// Sensor lesen
int sensor_value = digitalRead(SENSOR_PIN);
// Lauflicht aktivieren, wenn der Sensor ausgelöst wird
if (sensor_value == LOW && !is_running) { // GEÄNDERT
is_running = true;
start_time = millis(); // Zähler starten
}
// Wenn das Lauflicht aktiviert ist und die 15 Sekunden nicht überschritten sind
if (is_running && millis() - start_time < duration) {
runChaseLight(); // Lauflicht aktivieren
} else if (is_running) {
// Lauflicht stoppen
strip.clear(); // Alle LEDs ausschalten
strip.show();
is_running = false; // Status zurücksetzen
}
}
void runChaseLight() {
// Anzahl der LED-Pixel
static int pixel = 0;
// LEDs ausschalten
strip.clear();
// Ein Lauflicht-Effekt
for (int i = 0; i < 3; i++) {
int led_pos = (pixel + i) % NUM_LEDS;
strip.setPixelColor(led_pos, strip.Color(255, 0, 0)); // Grün als Beispiel
}
strip.show(); // Aktualisieren
// Zur nächsten LED für das Lauflicht
pixel = (pixel + 2) % NUM_LEDS;
// Kurze Verzögerung, um das Lauflicht zu verlangsamen
delay(10);
}
Hallo
Ich nochmal eine kurze Zusammenfassung.
Vielen lieben Dank an alle die dieses Projekt unterstützt haben.
Ein besonderes Dankeschön möchte ich an
[my_xy_projekt] Brattain senden ![]()
Wünsche allen einen gesunden und schönen Tanz in den Mai