67 lines
1.6 KiB
Python
Executable file
67 lines
1.6 KiB
Python
Executable file
#!/usr/bin/python
|
|
import RPi.GPIO as GPIO
|
|
import time
|
|
from rpi_ws281x import PixelStrip, Color, Adafruit_NeoPixel
|
|
|
|
SENSOR_PIN = 23
|
|
LIGHT_SENSOR_PIN = 21
|
|
|
|
GPIO.setmode(GPIO.BCM)
|
|
GPIO.setup(SENSOR_PIN, GPIO.IN)
|
|
GPIO.setup(LIGHT_SENSOR_PIN, GPIO.IN)
|
|
|
|
LED_COUNT = 15
|
|
|
|
led_duration = 0
|
|
|
|
strip = Adafruit_NeoPixel(LED_COUNT, 18, 800000, 5, False, 255)
|
|
strip.begin()
|
|
|
|
|
|
def turn_on_light(channel):
|
|
if GPIO.input(LIGHT_SENSOR_PIN):
|
|
# motion detected
|
|
# reset LED duration
|
|
global led_duration
|
|
led_duration = 0
|
|
colorWipe(strip, Color(255, 0, 32))
|
|
else:
|
|
# there was motion but it is not dark yet
|
|
colorWipe(strip, Color(0, 0, 0))
|
|
|
|
|
|
def turn_off_light(channel):
|
|
# turn off light
|
|
colorWipe(strip, Color(0, 0, 0))
|
|
|
|
|
|
def colorWipe(strip, color, wait_ms=100):
|
|
for i in range(strip.numPixels()):
|
|
strip.setPixelColor(i, color)
|
|
strip.show()
|
|
time.sleep(wait_ms / 1000.0)
|
|
|
|
|
|
try:
|
|
GPIO.add_event_detect(
|
|
SENSOR_PIN, GPIO.RISING, callback=turn_on_light
|
|
)
|
|
GPIO.add_event_detect(
|
|
LIGHT_SENSOR_PIN, GPIO.RISING, callback=turn_off_light, bouncetime=500
|
|
)
|
|
while True:
|
|
if strip.getPixelColor(0) > 0:
|
|
# check if LED is on for more than X seconds
|
|
if led_duration > 180:
|
|
# turn off LED
|
|
colorWipe(strip, Color(0, 0, 0))
|
|
led_duration = 0
|
|
else:
|
|
led_duration += 1
|
|
else:
|
|
led_duration = 0
|
|
time.sleep(1)
|
|
except KeyboardInterrupt:
|
|
colorWipe(strip, Color(0, 0, 0))
|
|
print("Exiting...")
|
|
GPIO.cleanup()
|