My goal is to use PIR motion sensor to light up a Neopixel strip and have them blink for 10 seconds. What I want to happen is:
- the serial monitor to print "Motion detected" once
- then the LED strip to flash for 10 seconds
What is currently happening is the serial monitor will print "Motion detected" and then blink the strip but then continue to print "Motion Detected" and repeat the blinking process over and over.
I have observed that when the motion sensor detects motion, it prints multiple lines of "Motion detected" very quickly as shown in the attached image below. What I think my code is doing is lighting up the strip between every time it prints in the serial monitor, causing it to never stop blinking.
Like I said before, I do not want the PIR sensor to output as many readings as it is. I just want it to detect motion, print once, then light up the LED strip and await until motion is detected again.
I am fairly new to programming in Arduino, so any help is welcomed.
Here is the code I have:
/ NeoPixel Ring simple sketch (c) 2013 Shae Erisson
// Released under the GPLv3 license to match the rest of the
// Adafruit NeoPixel library
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif
// Which pin on the Arduino is connected to the NeoPixels?
#define PIN 2 // On Trinket or Gemma, suggest changing this to 1
// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS 60 // Popular NeoPixel ring size
// When setting up the NeoPixel library, we tell it how many pixels,
// and which pin to use to send signals. Note that for older NeoPixel
// strips you might need to change the third parameter -- see the
// strandtest example for more information on possible values.
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
#define DELAYVAL 500 // Time (in milliseconds) to pause between pixels
const int MOTION_PIN = 6;
int i = 0;
void setup() {
// These lines are specifically to support the Adafruit Trinket 5V 16 MHz.
// Any other board, you can remove this part (but no harm leaving it):
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
clock_prescale_set(clock_div_1);
#endif
// END of Trinket-specific code.
Serial.begin(9600);
pinMode(MOTION_PIN, INPUT_PULLUP);
pinMode(PIN, OUTPUT);
pixels.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
}
void loop() {
pixels.clear(); // Set all pixel colors to 'off'
pixels.show();
int proximity = digitalRead(MOTION_PIN);
if (proximity == LOW) {
Serial.println("Motion Detected");
while (i < 10) {
i = i + 1;
pixels.clear(); // Set all pixel colors to 'off'
pixels.setPixelColor(0, pixels.Color(150, 0, 0));
pixels.setPixelColor(1, pixels.Color(150, 0, 0));
pixels.setPixelColor(2, pixels.Color(150, 0, 0));
pixels.setPixelColor(3, pixels.Color(150, 0, 0));
pixels.setPixelColor(4, pixels.Color(150, 0, 0));
pixels.setPixelColor(5, pixels.Color(150, 0, 0));
pixels.setPixelColor(6, pixels.Color(150, 0, 0));
pixels.setPixelColor(7, pixels.Color(150, 0, 0));
pixels.setPixelColor(8, pixels.Color(150, 0, 0));
pixels.setPixelColor(9, pixels.Color(150, 0, 0));
pixels.setPixelColor(10, pixels.Color(150, 0, 0));
pixels.setPixelColor(11, pixels.Color(150, 0, 0));
pixels.setPixelColor(12, pixels.Color(150, 0, 0));
pixels.setPixelColor(13, pixels.Color(150, 0, 0));
pixels.setPixelColor(14, pixels.Color(150, 0, 0));
pixels.setPixelColor(15, pixels.Color(150, 0, 0));
pixels.setPixelColor(16, pixels.Color(150, 0, 0));
pixels.setPixelColor(17, pixels.Color(150, 0, 0));
pixels.setPixelColor(18, pixels.Color(150, 0, 0));
pixels.setPixelColor(19, pixels.Color(150, 0, 0));
pixels.setPixelColor(20, pixels.Color(150, 0, 0));
pixels.setPixelColor(21, pixels.Color(150, 0, 0));
pixels.setPixelColor(22, pixels.Color(150, 0, 0));
pixels.setPixelColor(23, pixels.Color(150, 0, 0));
pixels.setPixelColor(24, pixels.Color(150, 0, 0));
pixels.setPixelColor(25, pixels.Color(150, 0, 0));
pixels.setPixelColor(26, pixels.Color(150, 0, 0));
pixels.setPixelColor(27, pixels.Color(150, 0, 0));
pixels.setPixelColor(28, pixels.Color(150, 0, 0));
pixels.setPixelColor(29, pixels.Color(150, 0, 0));
pixels.setPixelColor(30, pixels.Color(150, 0, 0));
pixels.setPixelColor(31, pixels.Color(150, 0, 0));
pixels.setPixelColor(32, pixels.Color(150, 0, 0));
pixels.setPixelColor(33, pixels.Color(150, 0, 0));
pixels.setPixelColor(34, pixels.Color(150, 0, 0));
pixels.setPixelColor(35, pixels.Color(150, 0, 0));
pixels.setPixelColor(36, pixels.Color(150, 0, 0));
pixels.setPixelColor(37, pixels.Color(150, 0, 0));
pixels.setPixelColor(38, pixels.Color(150, 0, 0));
pixels.setPixelColor(39, pixels.Color(150, 0, 0));
pixels.setPixelColor(40, pixels.Color(150, 0, 0));
pixels.setPixelColor(41, pixels.Color(150, 0, 0));
pixels.setPixelColor(42, pixels.Color(150, 0, 0));
pixels.setPixelColor(43, pixels.Color(150, 0, 0));
pixels.setPixelColor(44, pixels.Color(150, 0, 0));
pixels.setPixelColor(45, pixels.Color(150, 0, 0));
pixels.setPixelColor(46, pixels.Color(150, 0, 0));
pixels.setPixelColor(47, pixels.Color(150, 0, 0));
pixels.setPixelColor(48, pixels.Color(150, 0, 0));
pixels.setPixelColor(49, pixels.Color(150, 0, 0));
pixels.setPixelColor(50, pixels.Color(150, 0, 0));
pixels.setPixelColor(51, pixels.Color(150, 0, 0));
pixels.setPixelColor(52, pixels.Color(150, 0, 0));
pixels.setPixelColor(53, pixels.Color(150, 0, 0));
pixels.setPixelColor(54, pixels.Color(150, 0, 0));
pixels.setPixelColor(55, pixels.Color(150, 0, 0));
pixels.setPixelColor(56, pixels.Color(150, 0, 0));
pixels.setPixelColor(57, pixels.Color(150, 0, 0));
pixels.setPixelColor(58, pixels.Color(150, 0, 0));
pixels.setPixelColor(59, pixels.Color(150, 0, 0));
pixels.show(); // Send the updated pixel colors to the hardware.
delay(1000); // Pause before next pass through loop
pixels.setPixelColor(0, pixels.Color(0, 0, 0));
pixels.setPixelColor(1, pixels.Color(0, 0, 0));
pixels.setPixelColor(2, pixels.Color(0, 0, 0));
pixels.setPixelColor(3, pixels.Color(0, 0, 0));
pixels.setPixelColor(4, pixels.Color(0, 0, 0));
pixels.setPixelColor(5, pixels.Color(0, 0, 0));
pixels.setPixelColor(6, pixels.Color(0, 0, 0));
pixels.setPixelColor(7, pixels.Color(0, 0, 0));
pixels.setPixelColor(8, pixels.Color(0, 0, 0));
pixels.setPixelColor(9, pixels.Color(0, 0, 0));
pixels.setPixelColor(10, pixels.Color(0, 0, 0));
pixels.setPixelColor(11, pixels.Color(0, 0, 0));
pixels.setPixelColor(12, pixels.Color(0, 0, 0));
pixels.setPixelColor(13, pixels.Color(0, 0, 0));
pixels.setPixelColor(14, pixels.Color(0, 0, 0));
pixels.setPixelColor(15, pixels.Color(0, 0, 0));
pixels.setPixelColor(16, pixels.Color(0, 0, 0));
pixels.setPixelColor(17, pixels.Color(0, 0, 0));
pixels.setPixelColor(18, pixels.Color(0, 0, 0));
pixels.setPixelColor(19, pixels.Color(0, 0, 0));
pixels.setPixelColor(20, pixels.Color(0, 0, 0));
pixels.setPixelColor(21, pixels.Color(0, 0, 0));
pixels.setPixelColor(22, pixels.Color(0, 0, 0));
pixels.setPixelColor(23, pixels.Color(0, 0, 0));
pixels.setPixelColor(24, pixels.Color(0, 0, 0));
pixels.setPixelColor(25, pixels.Color(0, 0, 0));
pixels.setPixelColor(26, pixels.Color(0, 0, 0));
pixels.setPixelColor(27, pixels.Color(0, 0, 0));
pixels.setPixelColor(28, pixels.Color(0, 0, 0));
pixels.setPixelColor(29, pixels.Color(0, 0, 0));
pixels.setPixelColor(30, pixels.Color(0, 0, 0));
pixels.setPixelColor(31, pixels.Color(0, 0, 0));
pixels.setPixelColor(32, pixels.Color(0, 0, 0));
pixels.setPixelColor(33, pixels.Color(0, 0, 0));
pixels.setPixelColor(34, pixels.Color(0, 0, 0));
pixels.setPixelColor(35, pixels.Color(0, 0, 0));
pixels.setPixelColor(36, pixels.Color(0, 0, 0));
pixels.setPixelColor(37, pixels.Color(0, 0, 0));
pixels.setPixelColor(38, pixels.Color(0, 0, 0));
pixels.setPixelColor(39, pixels.Color(0, 0, 0));
pixels.setPixelColor(40, pixels.Color(0, 0, 0));
pixels.setPixelColor(41, pixels.Color(0, 0, 0));
pixels.setPixelColor(42, pixels.Color(0, 0, 0));
pixels.setPixelColor(43, pixels.Color(0, 0, 0));
pixels.setPixelColor(44, pixels.Color(0, 0, 0));
pixels.setPixelColor(45, pixels.Color(0, 0, 0));
pixels.setPixelColor(46, pixels.Color(0, 0, 0));
pixels.setPixelColor(47, pixels.Color(0, 0, 0));
pixels.setPixelColor(48, pixels.Color(0, 0, 0));
pixels.setPixelColor(49, pixels.Color(0, 0, 0));
pixels.setPixelColor(50, pixels.Color(0, 0, 0));
pixels.setPixelColor(51, pixels.Color(0, 0, 0));
pixels.setPixelColor(52, pixels.Color(0, 0, 0));
pixels.setPixelColor(53, pixels.Color(0, 0, 0));
pixels.setPixelColor(54, pixels.Color(0, 0, 0));
pixels.setPixelColor(55, pixels.Color(0, 0, 0));
pixels.setPixelColor(56, pixels.Color(0, 0, 0));
pixels.setPixelColor(57, pixels.Color(0, 0, 0));
pixels.setPixelColor(58, pixels.Color(0, 0, 0));
pixels.setPixelColor(59, pixels.Color(0, 0, 0));
pixels.show(); // Send the updated pixel colors to the hardware.
delay(1000); //
}
if (i = 10) {
i = 0;
}
}
else {
pixels.clear();
pixels.show();
}
}
Preformatted text
