und der aktuell Code in Pzthon.
Python
import RPi.GPIO as GPIO
import time
import Adafruit_WS2801
import Adafruit_GPIO.SPI as SPI
GPIO.setmode(GPIO.BCM)
GPIO_TRIGGER1 = 18
GPIO_ECHO1 = 24
SENSOR_PIN2 = 22
GPIO.setup(SENSOR_PIN2, GPIO.IN)
GPIO.setup(GPIO_TRIGGER1, GPIO.OUT)
GPIO.setup(GPIO_ECHO1, GPIO.IN)
PIXEL_COUNT = 26
SPI_PORT = 0
SPI_DEVICE = 0
pixels = Adafruit_WS2801.WS2801Pixels(PIXEL_COUNT, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE))
def lights(order='up', mode='on'):
start = 0
stop = pixels.count()
direction = 1
if order == 'down':
start = 25
stop = -1
direction = -1
hue = 0
if mode == 'on':
hue = 255
for i in range(start, stop, direction):
pixels.set_pixel(i, Adafruit_WS2801.RGB_to_color(hue, hue, hue))
pixels.show()
time.sleep(0.05)
def brightness_decrease():
MaxRgb = 255
RGB_Werte = range(MaxRgb)
LED_RGB_Werte = [MaxRgb for x in range(pixels.count())]
for i in xrange(MaxRgb+pixels.count()):
for i,w in enumerate(LED_RGB_Werte):
pixels.set_pixel(i, Adafruit_WS2801.RGB_to_color(w,w,w))
pixels.show()
time.sleep(0.05)
neuer_rgb_wert = RGB_Werte.pop()
if neuer_rgb_wert == 0:
RGB_Werte.append(neuer_rgb_wert)
LED_RGB_Werte.pop()
LED_RGB_Werte.insert(0,neuer_rgb_wert)
def distanz():
# setze Trigger auf HIGH
GPIO.output(GPIO_TRIGGER1, True)
# setze Trigger nach 0.01ms aus LOW
time.sleep(0.00001)
GPIO.output(GPIO_TRIGGER1, False)
StartZeit = time.time()
StopZeit = time.time()
# speichere Startzeit
while GPIO.input(GPIO_ECHO1) == 0:
StartZeit = time.time()
# speichere Ankunftszeit
while GPIO.input(GPIO_ECHO1) == 1:
StopZeit = time.time()
# Zeit Differenz zwischen Start und Ankunft
TimeElapsed = StopZeit - StartZeit
# mit der Schallgeschwindigkeit (34300 cm/s) multiplizieren
# und durch 2 teilen, da hin und zurueck
distanz = (TimeElapsed * 34300) / 2
return distanz
def up(channel):
print('unten (bw)')
pixels.clear()
lights()
time.sleep(1)
lights(mode='off')
try:
GPIO.add_event_detect(SENSOR_PIN2 , GPIO.RISING, callback=up)
while True:
time.sleep(0.001)
abstand = distanz()
time.sleep(1.0)
if distanz() < 40:
print('oben us')
pixels.clear()
lights(order='down')
# von unten nach oben Licht an
#time.sleep(2)
brightness_decrease()
#lights(order='down', mode='off')
except KeyboardInterrupt:
print "Beende..."
GPIO.cleanup()
Alles anzeigen
Wobei sich in der Testphase gezeigt hat, dass auch der 2. Schalter ein Bewegungsmelder und kein Ultraschallsensor wird.
Hier im Code sind noch beide Sorten vertreten.