LED Lauflicht mit Bewegungsmelder geht nicht aus

Hallo, Vorweg: Ich bin ein absoluter Neuling im Thema Arduino, habt bitte Gnade ^^
Zum Thema: Ich möchte an der Kellertreppe außen ein Lauflicht mit 274 LED programmieren, welches mit Bewegungsmelder an geht, einmal durchläuft, an bleibt und dann erst bei der nächsten Bewegung wieder einschaltet. Kabel Technisch ist es kein Problem und Berechnung von der Stromaufnahme etc. Mein Problem sobald ich den Laptop abklemme wird das Programm auch ohne Bewegung wiederholt( bleibt nicht aus läuft immer wieder an).
Ich habe, da ich noch nicht so fit bei diesem Thema bin, mit Ardublock das Programm geschrieben, auf einen Arduino atMega.
Könnte mir jemand meinen Fehler in dem Programm aufzeigen. ich komme nicht weiter. Wäre euch sehr verbunden. Mit freundlichen Grüßen Eichner Ronny.
PS: ich hoffe das ich hier nicht erschlagen werde wegen meines Unvermögens :slight_smile:

#include <Adafruit_NeoPixel.h>

/**
 * file:	Lauflicht Keller
 * author:	R.E
 * 
 * description:
 * Auflaufendes Licht mit Bewegungsmelder
 * 
 * date:	21.10.21
 * version:	0.1
 */

Adafruit_NeoPixel strip_pin6 = Adafruit_NeoPixel(274,6, NEO_RGB + NEO_KHZ800);
int Pixel = 0;
int analoge_Variable = 274;

void setup() {
  strip_pin6.begin();
  strip_pin6.show();
  pinMode(10, INPUT);
  Pixel = 0;

  analoge_Variable = 274;

}

void loop() {
  if (digitalRead(10)) {
    Pixel = 0;
    for (int i = 0; i < 274; i++) {
      strip_pin6.setPixelColor(Pixel,255 ,255 ,255 );
      strip_pin6.setBrightness(255);
      strip_pin6.show();
      Pixel = ( Pixel + 1 );
      delayMicroseconds( 750 );
      Pixel = 0;
      strip_pin6.setPixelColor(Pixel,0 ,0 ,0 );
      strip_pin6.setBrightness(0);
      strip_pin6.show();
    }
  }
  else {
  }
}

Ihr Beitrag wurde an seinen aktuellen Speicherort verschoben, da er besser geeignet ist.

Das ist irgendwie unlogisch.
Wenn er anbleibt braucht er nicht wieder einschalten.

ein wenig unvorteilhaft formuliert.Die LED sollen nacheinander angehen bis alle an sind- dann eine gewisse Zeit anbleiben(das man es schafft die Treppe hoch oder runter zu laufen) dann sollen alle ausgehen bis das nächste Signal vom Bewegungsmelder kommt.

Ah....ok.
Dann formatiere deinen Sketch noch so, dass den alle gut lesen können.
Den Sketch oben markieren und anschließend die Schaltfläche </> klicken.

Also auch ein elektrisches Problem...
Wie hängt der Bewegungsmelder an Pin 10 ? Wenn der einen Relais-Ausgang hat, brauchst du einen Pulldown Widerstand.

Den Sketch wollte ich so unformatiert eigentlich gar nicht ansehen, aber die Variable Bewegung scheint mir etwas sinnlos ...

Stimmt die "Bewegung" hab ich inzwischen raus genommen. ein Pulldown-Widerstand ist über eine AMP Steckverbindung eingebaut. Würde der Sketch, auch wenn er milde gesagt nicht schön ist,denn so laufen ?

Wieso setzt du hier Pixel gleich wieder auf 0 ?

sehr gute Frage. Nach delayMicroseconds( 750 ) brauch ich es nicht auf 0 setzen sondern kann die Analoge Variable weglassen?

Hier zählst du hoch und anschließend löschst du wieder, das ist nicht zielführend.

Auch dies passt nicht, da du den Stripe hier dunkel schaltest.

PullDown Widerstand wurde schon gesagt.

Dann mal was grundlegendes. Benenne die Variablen, das man erkennt, was da gemeint ist.
Und Pins nicht nach Nummern schreiben sondern einen Namen geben.

soll so aussehen?

#include <Adafruit_NeoPixel.h>

/**
   file:  Lauflicht Keller
   author:  R.E

   description:
   Auflaufendes Licht mit Bewegungsmelder

   date:  21.10.21
   version: 0.1
*/

const byte neoPixelPin = 6;
const byte melderPin = 10;
unsigned int Pixel = 0;
unsigned int anzahlPixel = 274;
bool zustand = false;
const unsigned long interval = 5000; // Zeit in ms
unsigned long lastmillis;


Adafruit_NeoPixel strip_pin6 = Adafruit_NeoPixel(anzahlPixel, neoPixelPin, NEO_RGB + NEO_KHZ800);

void setup()
{
  strip_pin6.begin();
  strip_pin6.show();
  pinMode(10, INPUT);
}

void loop()
{
  if ((digitalRead(melderPin)) && zustand == false) // retriggersperre
  {
    zustand = true;
    lastmillis = millis();
    for (unsigned int i = 0; i < anzahlPixel; i++)
    {
      strip_pin6.setPixelColor(i, 255 , 255 , 255 );
      strip_pin6.setBrightness(255);
      strip_pin6.show();
      delayMicroseconds( 750 );
    }
  }
  else
  {
    if ((millis() - lastmillis > interval) && zustand == true) // nur wenn Zeit abgelaufen UND vorher an
    {
      zustand = false;
      for (unsigned int i = 0; i < anzahlPixel; i++)
      {
        strip_pin6.setPixelColor(i, 0 , 0 , 0 );
        strip_pin6.setBrightness(0);
      }
      strip_pin6.show();
    }
  }
}

die Dunkelschaltung hab ich ausprobiert da er sonst angeblieben wäre... wie gesagt leie^^. ich Danke schonmal sehr für euer Verständnis und eure Hilfe.

Vielen Dank schonmal:) Ich weiß es erfordert Geduld mit mir. Meinen Sie mit der Benennung " melderPin" und "neopixelPin" ?

Nein. Du.

Ja. Auch.

:slight_smile:

Probier es aus - mal sehen, ob es geht.
... Da sehe ich gerade im setup müsste es heissen:

  pinMode(melderPin, INPUT);

Ich bin leider noch auf der Arbeit. Das erste, was ich tue, wenn ich daheim bin ist dies auszuprobieren. Ich vergessen zu erwähnen: Pull down entspricht 10 K-ohm Widerstand. Ist das richtig?

ist unkritisch.
Irgendwas von 2 - 20K

Danke :slight_smile: wenn das heute Läuft ist das Wochenende gerettet. Würd euch dann auch eins ausgeben ;D. Werde das eingehend studieren um es zu verstehen.

Solltest du bei längeren Kabeln zum Sensor Probleme haben, kann der Widerstand problemlos kleiner werden.

ja ist relativ lang. Muss von draußen durch die Außenwand. Ich denke mal um die 2 Meter.

Das geht auch noch mit 10K. ich hab hier nach 7 Metern noch mit nem internen Pullup nen Pin am laufen :wink:

Und wenn das Wochenende gerettet ist....

dann habe ich mal ne Einsteigerliteratur - nicht auswendig lernen. Nur wissen was drin steht. Einmal komplett durch. Jeden Abend ein paar Seiten. Auch den trockenen Text am Anfang.
https://www.arduinoforum.de/code-referenz
einfach da das .pdf runterladen.