Hallo, ich arbeite gerade an einer Solarlampe.
Diese beinhaltet einen Ring aus Neopixel, die in der Nacht durchgehend im Rainbow Modus leuchten.
Jedoch möchte ich mittels dreier PIR Sensoren, welche rund um die Lampe verteilt sind, gleichzeitig 3 LEDs einschalten.
Mein Problem ist, dass die “rainbow” funktion zu lange dauert und somit der PIR Sensor nicht reagiert.
Die Programme funktionieren einzeln super. Doch zusammen garnicht!
Ich habe das Ganze mal mittels attachInterrupt probiert und bei meinem Arduino Nano alle drei PIRs auf PIN 1 und 2 des Arduinos gelegt. Somit sollten sich beim Auslösen (RISING) des einen Interrupt PINS die LEDs einschalten und beim anderen Interrupt Pin (FALLING) wieder ausschalten.
Bekommt man das Ganze auch ohne Interrupts irgendwie hin oder könnt ihr mir weiterhelfen?
Danke schon mal im Voraus.
Hier unten findet ihr meinen Versuch mit Innterrupts
```
**//Automaisches Regenbogenlicht mit Bewegungsmelder für LEDs
#include <Adafruit_NeoPixel.h>
const int ledPin = 7; // the number of the neopixel strip
const int numLeds = 16;
//Adafruit_NeoPixel pixels = Adafruit_NeoPixel(8, ledPin);
Adafruit_NeoPixel strip = Adafruit_NeoPixel(numLeds, ledPin, NEO_GRB + NEO_KHZ800);
const int LedPin1 = 8; //Anschluss für die Lampe1 festlegen
const int LedPin2 = 9; //Anschluss für die Lampe2 festlegen
const int LedPin3 = 10; //Anschluss für die Lampe3 festlegen
int Arduino2 = 18;
int HelligkeitsPin = A0; //Anschluss für den Abgriff des Spannungsteilers aus Vorwiderstand Rv und Fotowiderstand LDR
int Helligkeitswert = 0; //Variable, die einen der Helligkeit entsprechenden Digitalwert speichert
unsigned long StartTime = 0; //Variable, die für die Berechnung der Leuchtdauer der Lampe verwendet wird
#define interrupt_pin 3 // interrupt pin
#define interrupt_pinn 2 // interrupt pin
void setup() {
Serial.begin(9600);
strip.begin();
strip.setBrightness(80); // 1/3 brightness
pinMode(LedPin1, OUTPUT);
pinMode(LedPin2, OUTPUT);
pinMode(LedPin3, OUTPUT);
pinMode(HelligkeitsPin, INPUT); //Anschluss des Spannungsteiler-Abgriffes wird als Eingang gesetzt
pinMode(Arduino2, OUTPUT);
pinMode(interrupt_pin, INPUT);
pinMode(interrupt_pinn, INPUT);
}
void loop() {
attachInterrupt(digitalPinToInterrupt(interrupt_pin), einschalten, RISING);
attachInterrupt(digitalPinToInterrupt(interrupt_pinn), ausschalten, FALLING);
rainbow(200);
delay(90);
Helligkeitswert=analogRead(HelligkeitsPin);
if (Helligkeitswert>15 ) { //Wenn der Helligkeitswert 15 überschreitet,…
digitalWrite(Arduino2,HIGH); //wird auf Arduino 2 umgeschaltet…
}
}
void einschalten() { //3 LEDs werden eingeschaltet
digitalWrite(LedPin1, HIGH);
digitalWrite(LedPin2, HIGH);
digitalWrite(LedPin3, HIGH);
}
void ausschalten() { //3 LEDs werden ausgeschaltet
digitalWrite(LedPin1, LOW);
digitalWrite(LedPin2, LOW);
digitalWrite(LedPin3, LOW);
}
void rainbow(uint8_t wait) {
uint16_t i, j;
for (j = 0; j < 256; j++) {
for (i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, Wheel((i * 1 + j) & 255));
}
strip.show();
delay(wait);
}
}
// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
if (WheelPos < 85) {
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}
else if (WheelPos < 170) {
WheelPos -= 85;
return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
}
else {
WheelPos -= 170;
return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
}**
```