Lichtschranke+Schalter

Guten Tag,
ich habe einen fertigen Sketch, den ich optimieren möchte.
Der Sketch soll folgendes machen: Wenn ich die Lichtschranke passiere, soll der LED-Streifen angeschaltet werden.
passiere ich die Lichtschranke erneut, soll der LED-Streifen ausgeschaltet werden. Soweit funktioniert es. Nun möchte ich noch einen Schalter hinzufügen. Wenn Schalter AN ist, soll der LED-Streifen auch angehen und die Lichtschranke soll für die Zeit, bis der Schalter wieder AUS ist, die Bewegungen ignorieren.
Hat da jemand eine Idee?

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#define PIN_LED 6 //
#define NUMPIXELS 24
Adafruit_NeoPixel pixel = Adafruit_NeoPixel(NUMPIXELS, PIN_LED, NEO_GRB + NEO_KHZ800);
int delayval = 25;
const int SENSOR1 = 2;
int SENSOR1_STATUS = 0;
int i = 0;


void setup()
{
  pinMode(SENSOR1, INPUT_PULLUP);
  Serial.begin(9600);
#if defined (__AVR_ATtiny85__)
  if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif
  pixel.begin();
  pixel.show();
}

void loop()
{
  SENSOR1_STATUS = digitalRead(SENSOR1);




  if (SENSOR1_STATUS == HIGH )
  {

    for (int i = 0; i < NUMPIXELS; i++) {
      pixel.setPixelColor(i, pixel.Color(155, 0, 255)); // BITTE HIER EINEN RGB CODE EINTRAGEN!
      pixel.show();
      delay(delayval); // WARTEZEIT
    }
  }

}

Hat da jemand eine Idee?

Eine if Abfrage einfügen.
Alles weitere hängt von deinem Sketch ab.

Einen fertigen Sketch optimiert man, indem man ihn lässt wie er ist.
Aber eigentlich gibt es keine fertigen Sketche.

michael_x:
Einen fertigen Sketch optimiert man, indem man ihn lässt wie er ist.
Aber eigentlich gibt es keine fertigen Sketche.

Wie recht Du hast ...

Das erinnert mich an die Zeit, als Backups u. dgl. mit „Letzte Version“ und „Allerletzte Version“ beschriftet wurden :slight_smile:

Wichtig ist IMO, ordentlich und konsequent zu Versionieren. Es ist beruhigend, immer zu einer funktionierenden Version zurückkehren zu können.

Gruß

Gregor

bazukaa:
Wenn Schalter AN ist, soll der LED-Streifen auch angehen und die Lichtschranke soll für die Zeit, bis der Schalter wieder AUS ist, die Bewegungen ignorieren.
Hat da jemand eine Idee?

Ja.

 if ((SENSOR1_STATUS == HIGH )||(SCHALTER_PIN==xxx))

xxx je nachdem, wie Du den Schalter an den PIN geklemmt hast (PULLUP oder PULLDOWN)

gregorss:
Wie recht Du hast ...

Das erinnert mich an die Zeit, als Backups u. dgl. mit „Letzte Version“ und „Allerletzte Version“ beschriftet wurden :slight_smile:

Wichtig ist IMO, ordentlich und konsequent zu Versionieren. Es ist beruhigend, immer zu einer funktionierenden Version zurückkehren zu können.

Gruß

Gregor

nix ist so konstant wie Änderungen :slight_smile:

xy, du meinst vermutlich
... || digitalRead(SCHALTER_PIN)==xxx ...

Abgesehen davon macht der "fertige" Sketch auch jetzt (ohne Schalter) nicht, was bazukaa beschreibt.

Hallo,
vielen Dank für die Antworten.
Hatte jetzt Zeit rum zu experimentieren.
Mit der "and" Funktion habe ich es gelöst.

if (SENSOR1_STATUS == LOW and SCHALTER_STATUS == LOW)

bazukaa:
Hatte jetzt Zeit rum zu experimentieren.
Mit der "and" Funktion habe ich es gelöst.

if (SENSOR1_STATUS == LOW and SCHALTER_STATUS == LOW)

Das ist aber logisch falsch.
Aus Deinem Eingangspost:

Wenn Schalter AN ist, soll der LED-Streifen auch angehen und die Lichtschranke soll für die Zeit, bis der Schalter wieder AUS ist, die Bewegungen ignorieren.

SENSOR1_STATUS = digitalRead(SENSOR1);

if (SENSOR1_STATUS == HIGH )

Du musst jetzt in Deinem Konstrukt BEIDE Bedinungen erfüllen.

  1. Der Sensor muss aus sein
    UND
  2. Der Schalter muss ....
    Diese Zusammensetzung macht nicht das, was Du willst. "die Bewegungen ignorieren" .
    Aber gut - wenns denn funktioniert, war die Aufgabenstellung falsch formuliert.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.