Switch to normal Python
This commit is contained in:
		
							parent
							
								
									f6d1f4c399
								
							
						
					
					
						commit
						fcca0c4972
					
				
					 1 changed files with 139 additions and 285 deletions
				
			
		
							
								
								
									
										424
									
								
								main.py
									
									
									
									
									
								
							
							
						
						
									
										424
									
								
								main.py
									
									
									
									
									
								
							| 
						 | 
					@ -1,386 +1,240 @@
 | 
				
			||||||
from neopixel import Neopixel
 | 
					import time
 | 
				
			||||||
import utime
 | 
					import threading
 | 
				
			||||||
from machine import Pin, Timer
 | 
					from rpi_ws281x import PixelStrip, Color
 | 
				
			||||||
import _thread
 | 
					import RPi.GPIO as GPIO
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
####################TO DO´s##########################
 | 
					####################TO DO´s##########################
 | 
				
			||||||
# 1. Multithread für trennung von blinker und animation 
 | 
					# 1. Multithread for separating blinker and animation
 | 
				
			||||||
# 2. buttoninterrupt für längere animationen (rainbow/police)
 | 
					# 2. Button interrupt for longer animations (rainbow/police)
 | 
				
			||||||
#   - https://www.elektronik-kompendium.de/sites/raspberry-pi/2612181.htm
 | 
					# 3. Optimize Police animation
 | 
				
			||||||
# 3. animation Police optimieren
 | 
					####################################################
 | 
				
			||||||
#
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
########################################################
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# LED strip configuration:
 | 
				
			||||||
numpix = 20
 | 
					numpix = 20
 | 
				
			||||||
segment = 4
 | 
					segment = 4
 | 
				
			||||||
delay = 0.15
 | 
					delay = 0.15
 | 
				
			||||||
brightness = 100
 | 
					brightness = 100
 | 
				
			||||||
anzahl_animationen = 5
 | 
					anzahl_animationen = 5
 | 
				
			||||||
 | 
					LED_PIN = 18
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#setup
 | 
					# Setup
 | 
				
			||||||
strip_blinker = Neopixel(numpix, 0, 28, "RGB")
 | 
					strip_blinker = PixelStrip(numpix, LED_PIN, brightness=brightness)
 | 
				
			||||||
strip_animation = Neopixel(numpix, 0, 28, "RGB")
 | 
					strip_animation = PixelStrip(numpix, LED_PIN, brightness=brightness)
 | 
				
			||||||
strip_animation.brightness(brightness)
 | 
					strip_blinker.begin()
 | 
				
			||||||
strip_blinker.brightness(brightness)
 | 
					strip_animation.begin()
 | 
				
			||||||
button = Pin(18, Pin.IN, Pin.PULL_UP)
 | 
					
 | 
				
			||||||
toggle_switch_left = Pin(15, Pin.IN, Pin.PULL_DOWN)
 | 
					# Button and switch GPIO setup
 | 
				
			||||||
toggle_switch_right = Pin(14, Pin.IN, Pin.PULL_DOWN)
 | 
					button_pin = 18
 | 
				
			||||||
 | 
					toggle_switch_left_pin = 15
 | 
				
			||||||
 | 
					toggle_switch_right_pin = 14
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GPIO.setmode(GPIO.BCM)
 | 
				
			||||||
 | 
					GPIO.setup(button_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
 | 
				
			||||||
 | 
					GPIO.setup(toggle_switch_left_pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
 | 
				
			||||||
 | 
					GPIO.setup(toggle_switch_right_pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
blinker_links = False
 | 
					blinker_links = False
 | 
				
			||||||
blinker_rechts = False
 | 
					blinker_rechts = False
 | 
				
			||||||
 | 
					 | 
				
			||||||
animation_NR = 0
 | 
					animation_NR = 0
 | 
				
			||||||
# Define the debounce timer
 | 
					 | 
				
			||||||
debounce_timer = Timer()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Flag to indicate if the button is being debounced
 | 
					 | 
				
			||||||
debouncing = False
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
reset_animation = False
 | 
					reset_animation = False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Define colors
 | 
				
			||||||
#Farben definnieren
 | 
					blank = Color(0, 0, 0)
 | 
				
			||||||
blank = (0, 0, 0)
 | 
					white = Color(255, 255, 255)
 | 
				
			||||||
white = (255, 255, 255)
 | 
					red = Color(255, 0, 0)
 | 
				
			||||||
 | 
					orange = Color(255, 127, 0)
 | 
				
			||||||
red = (0, 255, 0)
 | 
					yellow = Color(255, 255, 0)
 | 
				
			||||||
orange = (127, 255, 0)
 | 
					lime = Color(127, 255, 0)
 | 
				
			||||||
yellow = (255, 255, 0)
 | 
					green = Color(0, 255, 0)
 | 
				
			||||||
lime = (255, 127, 0)
 | 
					teal = Color(0, 255, 127)
 | 
				
			||||||
green = (255, 0, 0)
 | 
					cyan = Color(0, 255, 255)
 | 
				
			||||||
teal = (255, 0, 127)
 | 
					sky_blue = Color(0, 127, 255)
 | 
				
			||||||
cyan = (255, 0, 255)
 | 
					blue = Color(0, 0, 255)
 | 
				
			||||||
sky_blue = (127, 0, 255)
 | 
					indigo = Color(127, 0, 255)
 | 
				
			||||||
blue = (0, 0, 255)
 | 
					magenta = Color(255, 0, 255)
 | 
				
			||||||
indigo = (0, 127, 255)
 | 
					pink = Color(255, 0, 127)
 | 
				
			||||||
magenta = (0, 255, 255)
 | 
					 | 
				
			||||||
pink = (0, 255, 127)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
colors = [red, orange, yellow, lime, green, teal, cyan, sky_blue, blue, indigo, magenta, pink]
 | 
					colors = [red, orange, yellow, lime, green, teal, cyan, sky_blue, blue, indigo, magenta, pink]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
############ Blinker Links ###################
 | 
					############ Blinker Links ###################
 | 
				
			||||||
def blink_links():
 | 
					def blink_links():
 | 
				
			||||||
    global blinker_links
 | 
					    global blinker_links
 | 
				
			||||||
    while True:
 | 
					    while blinker_links:
 | 
				
			||||||
        if blinker_links == False:
 | 
					        print('BLINKER LINKS')
 | 
				
			||||||
            break
 | 
					 | 
				
			||||||
        strip_blinker.show()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        for x in reversed(range(segment)):
 | 
					        for x in reversed(range(segment)):
 | 
				
			||||||
            if blinker_links == False:
 | 
					            if not blinker_links:
 | 
				
			||||||
                break
 | 
					                break
 | 
				
			||||||
            strip_blinker.set_pixel(x, yellow)
 | 
					            strip_blinker.setPixelColor(x, yellow)
 | 
				
			||||||
            strip_blinker.show()
 | 
					            strip_blinker.show()
 | 
				
			||||||
            utime.sleep(delay)
 | 
					            time.sleep(delay)
 | 
				
			||||||
        
 | 
					        if not blinker_links:
 | 
				
			||||||
        if blinker_links == False:
 | 
					 | 
				
			||||||
            break
 | 
					            break
 | 
				
			||||||
        utime.sleep(2 * delay)
 | 
					        time.sleep(2 * delay)
 | 
				
			||||||
        for y in range(segment):
 | 
					        for y in range(segment):
 | 
				
			||||||
            strip_blinker.set_pixel(y, blank)
 | 
					            strip_blinker.setPixelColor(y, blank)
 | 
				
			||||||
            strip_blinker.show()
 | 
					            strip_blinker.show()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for y in range(segment):
 | 
					    for y in range(segment):
 | 
				
			||||||
        strip_blinker.set_pixel(y, blank)
 | 
					        strip_blinker.setPixelColor(y, blank)
 | 
				
			||||||
        strip_blinker.show()
 | 
					        strip_blinker.show()
 | 
				
			||||||
    return
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
##################################################
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
############ Blinker Rechts ##################
 | 
					############ Blinker Rechts ##################
 | 
				
			||||||
def blink_rechts():
 | 
					def blink_rechts():
 | 
				
			||||||
    global blinker_rechts
 | 
					    global blinker_rechts
 | 
				
			||||||
    startpoint = numpix - segment
 | 
					    startpoint = numpix - segment
 | 
				
			||||||
    while True:
 | 
					    while blinker_rechts:
 | 
				
			||||||
        if blinker_rechts == False:
 | 
					        print('BLINKER RECHTS')
 | 
				
			||||||
                break
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        strip_blinker.show()
 | 
					 | 
				
			||||||
        for x in range(segment):
 | 
					        for x in range(segment):
 | 
				
			||||||
            if blinker_rechts == False:
 | 
					            if not blinker_rechts:
 | 
				
			||||||
                break
 | 
					                break
 | 
				
			||||||
            strip_blinker.set_pixel(startpoint + x, yellow)
 | 
					            strip_blinker.setPixelColor(startpoint + x, yellow)
 | 
				
			||||||
            strip_blinker.show()
 | 
					            strip_blinker.show()
 | 
				
			||||||
            utime.sleep(delay)
 | 
					            time.sleep(delay)
 | 
				
			||||||
        if blinker_rechts == False:
 | 
					        if not blinker_rechts:
 | 
				
			||||||
            break
 | 
					            break
 | 
				
			||||||
        utime.sleep(2 * delay)
 | 
					        time.sleep(2 * delay)
 | 
				
			||||||
        for y in range(segment):
 | 
					        for y in range(segment):
 | 
				
			||||||
            strip_blinker.set_pixel(startpoint + y, blank)
 | 
					            strip_blinker.setPixelColor(startpoint + y, blank)
 | 
				
			||||||
            strip_blinker.show()
 | 
					            strip_blinker.show()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for y in range(segment):
 | 
					    for y in range(segment):
 | 
				
			||||||
            strip_blinker.set_pixel(startpoint + y, blank)
 | 
					        strip_blinker.setPixelColor(startpoint + y, blank)
 | 
				
			||||||
            strip_blinker.show()    
 | 
					        strip_blinker.show()
 | 
				
			||||||
    return
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
##################################################
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# ----------------Animationen------------------#
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
############ 0.Animation Licht aus ################
 | 
					############ 0.Animation Licht aus ################
 | 
				
			||||||
def licht_aus():
 | 
					def licht_aus():
 | 
				
			||||||
    global reset_animation
 | 
					    global reset_animation
 | 
				
			||||||
    for i in range(numpix - segment):
 | 
					    for i in range(segment, numpix):
 | 
				
			||||||
        if i >= segment:
 | 
					        strip_animation.setPixelColor(i, blank)
 | 
				
			||||||
            strip_animation.set_pixel(i, blank)
 | 
					        strip_animation.show()
 | 
				
			||||||
            strip_animation.show()
 | 
					    while not reset_animation:
 | 
				
			||||||
    while reset_animation == False:
 | 
					        time.sleep(delay)
 | 
				
			||||||
        utime.sleep(delay)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
############### 1.Animation Licht an ###############
 | 
					############### 1.Animation Licht an ###############
 | 
				
			||||||
def fernlicht_an():
 | 
					def fernlicht_an():
 | 
				
			||||||
    global reset_animation
 | 
					    global reset_animation
 | 
				
			||||||
    for i in range(numpix - segment):
 | 
					    for i in range(segment, numpix):
 | 
				
			||||||
        if i >= segment:
 | 
					        strip_animation.setPixelColor(i, white)
 | 
				
			||||||
            strip_animation.set_pixel(i, white)
 | 
					        strip_animation.show()
 | 
				
			||||||
            strip_animation.show()
 | 
					    while not reset_animation:
 | 
				
			||||||
    while reset_animation == False:
 | 
					        time.sleep(delay)
 | 
				
			||||||
        utime.sleep(delay)
 | 
					 | 
				
			||||||
    licht_aus()
 | 
					    licht_aus()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
############### 2.Animation Rainbow ###############
 | 
					############### 2.Animation Rainbow ###############
 | 
				
			||||||
def rainbow():
 | 
					def rainbow():
 | 
				
			||||||
    global reset_animation
 | 
					    global reset_animation
 | 
				
			||||||
    for i in range(len(colors)):
 | 
					    for i in range(len(colors)):
 | 
				
			||||||
        for j in range(numpix - segment):
 | 
					        for j in range(segment, numpix):
 | 
				
			||||||
            if j >= segment:
 | 
					            strip_animation.setPixelColor(j, colors[i])
 | 
				
			||||||
                strip_animation.set_pixel(j, colors[i])
 | 
					            strip_animation.show()
 | 
				
			||||||
                strip_animation.show()
 | 
					            time.sleep(delay)
 | 
				
			||||||
                utime.sleep(delay)
 | 
					            if reset_animation:
 | 
				
			||||||
                if reset_animation == True:
 | 
					                licht_aus()
 | 
				
			||||||
                    licht_aus()
 | 
					                return
 | 
				
			||||||
                    return
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
############### 3.Animation Police ###############
 | 
					############### 3.Animation Police ###############
 | 
				
			||||||
def police():
 | 
					def police():
 | 
				
			||||||
    global reset_animation
 | 
					    global reset_animation
 | 
				
			||||||
 | 
					    blue_segment = [4, 5, 6, 10, 11, 12]
 | 
				
			||||||
 | 
					    red_segment = [7, 8, 9, 13, 14, 15]
 | 
				
			||||||
 | 
					    for segment, color in [(blue_segment, blue), (red_segment, red)]:
 | 
				
			||||||
 | 
					        for i in segment:
 | 
				
			||||||
 | 
					            strip_animation.setPixelColor(i, color)
 | 
				
			||||||
 | 
					        strip_animation.show()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    strip_animation.set_pixel(4, blue)
 | 
					    time.sleep(delay * 2)
 | 
				
			||||||
    strip_animation.set_pixel(5, blue)
 | 
					    if reset_animation:
 | 
				
			||||||
    strip_animation.set_pixel(6, blue)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    strip_animation.set_pixel(7, red)
 | 
					 | 
				
			||||||
    strip_animation.set_pixel(8, red)
 | 
					 | 
				
			||||||
    strip_animation.set_pixel(9, red)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    strip_animation.set_pixel(10, blue)
 | 
					 | 
				
			||||||
    strip_animation.set_pixel(11, blue)
 | 
					 | 
				
			||||||
    strip_animation.set_pixel(12, blue)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    strip_animation.set_pixel(13, red)
 | 
					 | 
				
			||||||
    strip_animation.set_pixel(14, red)
 | 
					 | 
				
			||||||
    strip_animation.set_pixel(15, red)
 | 
					 | 
				
			||||||
    strip_animation.show()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    utime.sleep(delay * 2)
 | 
					 | 
				
			||||||
    if reset_animation == True:
 | 
					 | 
				
			||||||
        licht_aus()
 | 
					        licht_aus()
 | 
				
			||||||
        return
 | 
					        return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    strip_animation.set_pixel(4, red)
 | 
					 | 
				
			||||||
    strip_animation.set_pixel(5, red)
 | 
					 | 
				
			||||||
    strip_animation.set_pixel(6, red)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    strip_animation.set_pixel(7, blue)
 | 
					 | 
				
			||||||
    strip_animation.set_pixel(8, blue)
 | 
					 | 
				
			||||||
    strip_animation.set_pixel(9, blue)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    strip_animation.set_pixel(10, red)
 | 
					 | 
				
			||||||
    strip_animation.set_pixel(11, red)
 | 
					 | 
				
			||||||
    strip_animation.set_pixel(12, red)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    strip_animation.set_pixel(13, blue)
 | 
					 | 
				
			||||||
    strip_animation.set_pixel(14, blue)
 | 
					 | 
				
			||||||
    strip_animation.set_pixel(15, blue)
 | 
					 | 
				
			||||||
    strip_animation.show()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    utime.sleep(delay * 2)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
###############  4.Animation Kit   ###############
 | 
					###############  4.Animation Kit   ###############
 | 
				
			||||||
def kit():
 | 
					def kit():
 | 
				
			||||||
    global reset_animation
 | 
					    global reset_animation
 | 
				
			||||||
    delay = 0.01
 | 
					    kit_delay = 0.01
 | 
				
			||||||
 | 
					 | 
				
			||||||
    strip_animation.show()
 | 
					    strip_animation.show()
 | 
				
			||||||
    ############### Left to Right ###############
 | 
					
 | 
				
			||||||
    for x in range(numpix - segment - 2):
 | 
					    # Left to Right
 | 
				
			||||||
        if x >= segment:
 | 
					    for x in range(segment, numpix - 2):
 | 
				
			||||||
            strip_animation.set_pixel(x + 1, red)
 | 
					        strip_animation.setPixelColor(x + 1, red)
 | 
				
			||||||
            utime.sleep(delay)
 | 
					        time.sleep(kit_delay)
 | 
				
			||||||
            strip_animation.show()
 | 
					        strip_animation.show()
 | 
				
			||||||
            strip_animation.set_pixel(x, red)
 | 
					        strip_animation.setPixelColor(x, red)
 | 
				
			||||||
            utime.sleep(delay)
 | 
					        time.sleep(kit_delay)
 | 
				
			||||||
            strip_animation.show()
 | 
					        strip_animation.show()
 | 
				
			||||||
            strip_animation.set_pixel(x + 2, red)
 | 
					        strip_animation.setPixelColor(x + 2, red)
 | 
				
			||||||
            utime.sleep(delay)
 | 
					        time.sleep(kit_delay)
 | 
				
			||||||
            strip_animation.show()
 | 
					        strip_animation.show()
 | 
				
			||||||
            strip_animation.set_pixel(x, blank)
 | 
					        strip_animation.setPixelColor(x, blank)
 | 
				
			||||||
            utime.sleep(delay)
 | 
					        time.sleep(kit_delay)
 | 
				
			||||||
            strip_animation.set_pixel(x + 1, blank)
 | 
					        strip_animation.setPixelColor(x + 1, blank)
 | 
				
			||||||
            utime.sleep(delay)
 | 
					        time.sleep(kit_delay)
 | 
				
			||||||
            strip_animation.set_pixel(x + 2, blank)
 | 
					        strip_animation.setPixelColor(x + 2, blank)
 | 
				
			||||||
            strip_animation.show()
 | 
					        strip_animation.show()
 | 
				
			||||||
        if reset_animation == True:
 | 
					        if reset_animation:
 | 
				
			||||||
            licht_aus()
 | 
					            licht_aus()
 | 
				
			||||||
            return
 | 
					            return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ############### Left to Right ###############
 | 
					    # Right to Left
 | 
				
			||||||
    for x in reversed(range(numpix - segment - 2)):
 | 
					    for x in reversed(range(segment + 1, numpix - 2)):
 | 
				
			||||||
        if x > segment:
 | 
					        strip_animation.setPixelColor(x + 1, red)
 | 
				
			||||||
            strip_animation.set_pixel(x + 1, red)
 | 
					        time.sleep(kit_delay)
 | 
				
			||||||
            utime.sleep(delay)
 | 
					        strip_animation.show()
 | 
				
			||||||
            strip_animation.show()
 | 
					        strip_animation.setPixelColor(x, red)
 | 
				
			||||||
            strip_animation.set_pixel(x, red)
 | 
					        time.sleep(kit_delay)
 | 
				
			||||||
            utime.sleep(delay)
 | 
					        strip_animation.show()
 | 
				
			||||||
            strip_animation.show()
 | 
					        strip_animation.setPixelColor(x + 2, red)
 | 
				
			||||||
            strip_animation.set_pixel(x + 2, red)
 | 
					        time.sleep(kit_delay)
 | 
				
			||||||
            utime.sleep(delay)
 | 
					        strip_animation.show()
 | 
				
			||||||
            strip_animation.show()
 | 
					        strip_animation.setPixelColor(x, blank)
 | 
				
			||||||
            strip_animation.set_pixel(x, blank)
 | 
					        time.sleep(kit_delay)
 | 
				
			||||||
            utime.sleep(delay)
 | 
					        strip_animation.setPixelColor(x + 1, blank)
 | 
				
			||||||
            strip_animation.set_pixel(x + 1, blank)
 | 
					        time.sleep(kit_delay)
 | 
				
			||||||
            utime.sleep(delay)
 | 
					        strip_animation.setPixelColor(x + 2, blank)
 | 
				
			||||||
            strip_animation.set_pixel(x + 2, blank)
 | 
					        strip_animation.show()
 | 
				
			||||||
            strip_animation.show()
 | 
					        if reset_animation:
 | 
				
			||||||
        if reset_animation == True:
 | 
					 | 
				
			||||||
            licht_aus()
 | 
					            licht_aus()
 | 
				
			||||||
            return
 | 
					            return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# INTERRUPT HANDLERS
 | 
				
			||||||
##################################################
 | 
					 | 
				
			||||||
# -----------------------------------------------#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
button = Pin(18, Pin.IN, Pin.PULL_UP)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
###########################################################################
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# INTERRUPT HANDLER
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Blinker Links
 | 
					# Blinker Links
 | 
				
			||||||
def switch_left_up(pin):
 | 
					def switch_left_up(channel):
 | 
				
			||||||
    global blinker_links, blinker_rechts
 | 
					    global blinker_links, blinker_rechts
 | 
				
			||||||
    # stop blinker rechts if running
 | 
					    if blinker_rechts:
 | 
				
			||||||
    if blinker_rechts == True:
 | 
					 | 
				
			||||||
        blinker_rechts = False
 | 
					        blinker_rechts = False
 | 
				
			||||||
 | 
					    if blinker_links:
 | 
				
			||||||
    # do nothing if blinker links is already running
 | 
					 | 
				
			||||||
    if blinker_links == True:
 | 
					 | 
				
			||||||
        return
 | 
					        return
 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    blinker_links = True
 | 
					    blinker_links = True
 | 
				
			||||||
 | 
					    threading.Thread(target=blink_links).start()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # start blinker links
 | 
					def switch_left_down(channel):
 | 
				
			||||||
 | 
					 | 
				
			||||||
    _thread.start_new_thread(blink_links, ())
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def switch_left_down(pin):
 | 
					 | 
				
			||||||
    global blinker_links
 | 
					    global blinker_links
 | 
				
			||||||
    blinker_links = False
 | 
					    blinker_links = False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
toggle_switch_left.irq(handler=switch_left_up, trigger=Pin.IRQ_RISING)
 | 
					GPIO.add_event_detect(toggle_switch_left_pin, GPIO.RISING, callback=switch_left_up)
 | 
				
			||||||
toggle_switch_left.irq(handler=switch_left_down, trigger=Pin.IRQ_FALLING)
 | 
					GPIO.add_event_detect(toggle_switch_left_pin, GPIO.FALLING, callback=switch_left_down)
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Blinker Rechts
 | 
					# Blinker Rechts
 | 
				
			||||||
def switch_right_up(pin):
 | 
					def switch_right_up(channel):
 | 
				
			||||||
    global blinker_rechts, blinker_links
 | 
					    global blinker_rechts, blinker_links
 | 
				
			||||||
    # stop blinker links if running
 | 
					    if blinker_links:
 | 
				
			||||||
    if blinker_links == True:
 | 
					 | 
				
			||||||
        blinker_links = False
 | 
					        blinker_links = False
 | 
				
			||||||
 | 
					    if blinker_rechts:
 | 
				
			||||||
    # do nothing if blinker rechts is already running
 | 
					 | 
				
			||||||
    if blinker_rechts == True:
 | 
					 | 
				
			||||||
        return
 | 
					        return
 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    blinker_rechts = True
 | 
					    blinker_rechts = True
 | 
				
			||||||
 | 
					    threading.Thread(target=blink_rechts).start()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # start blinker rechts
 | 
					def switch_right_down(channel):
 | 
				
			||||||
 | 
					 | 
				
			||||||
    _thread.start_new_thread(blink_rechts, ())
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def switch_right_down(pin):
 | 
					 | 
				
			||||||
    global blinker_rechts
 | 
					    global blinker_rechts
 | 
				
			||||||
    blinker_rechts = False
 | 
					    blinker_rechts = False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
toggle_switch_right.irq(handler=switch_right_up, trigger=Pin.IRQ_RISING)
 | 
					GPIO.add_event_detect(toggle_switch_right_pin, GPIO.RISING, callback=switch_right_up)
 | 
				
			||||||
toggle_switch_right.irq(handler=switch_right_down, trigger=Pin.IRQ_FALLING)
 | 
					GPIO.add_event_detect(toggle_switch_right_pin, GPIO.FALLING, callback=switch_right_down)
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Button Interrupt
 | 
					# Button Interrupt
 | 
				
			||||||
def button_pressed(pin):
 | 
					def button_pressed(channel):
 | 
				
			||||||
    global debouncing, animation_NR, reset_animation
 | 
					    global debouncing, animation_NR, reset_animation
 | 
				
			||||||
    # Handle the button press event
 | 
					 | 
				
			||||||
    animation_NR = (animation_NR + 1) % anzahl_animationen
 | 
					    animation_NR = (animation_NR + 1) % anzahl_animationen
 | 
				
			||||||
    # Reset the debouncing flag
 | 
					 | 
				
			||||||
    debouncing = False
 | 
					 | 
				
			||||||
    reset_animation = True
 | 
					    reset_animation = True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def button_debouncer(pin):
 | 
					GPIO.add_event_detect
 | 
				
			||||||
    global debouncing
 | 
					 | 
				
			||||||
    if not debouncing:
 | 
					 | 
				
			||||||
        debouncing = True
 | 
					 | 
				
			||||||
        debounce_timer.init(mode=Timer.ONE_SHOT, period=200, callback=lambda t: button_pressed(pin))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Set up the button interrupt with the debouncer
 | 
					 | 
				
			||||||
button.irq(handler=button_debouncer, trigger=Pin.IRQ_RISING)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
###########################################################################
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# MAIN LOOPS
 | 
					 | 
				
			||||||
def animation_loop():
 | 
					 | 
				
			||||||
    global animation_NR, reset_animation
 | 
					 | 
				
			||||||
    while True:
 | 
					 | 
				
			||||||
        reset_animation = False
 | 
					 | 
				
			||||||
        if animation_NR == 0:
 | 
					 | 
				
			||||||
            licht_aus()
 | 
					 | 
				
			||||||
        elif animation_NR == 1:
 | 
					 | 
				
			||||||
            fernlicht_an()
 | 
					 | 
				
			||||||
        elif animation_NR == 2:
 | 
					 | 
				
			||||||
            rainbow()
 | 
					 | 
				
			||||||
        elif animation_NR == 3:
 | 
					 | 
				
			||||||
           police()
 | 
					 | 
				
			||||||
        elif animation_NR == 4:
 | 
					 | 
				
			||||||
            kit()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def test_loop():
 | 
					 | 
				
			||||||
    while True:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        #rainbow()
 | 
					 | 
				
			||||||
        # kit()
 | 
					 | 
				
			||||||
        # fernlicht_an()
 | 
					 | 
				
			||||||
        utime.sleep(0.5)
 | 
					 | 
				
			||||||
        # licht_aus()
 | 
					 | 
				
			||||||
        # utime.sleep(0.5)
 | 
					 | 
				
			||||||
        # police()
 | 
					 | 
				
			||||||
        print('thread1')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        blink_rechts()
 | 
					 | 
				
			||||||
        blink_links()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# start blinker_loop on second core
 | 
					 | 
				
			||||||
#_thread.start_new_thread(animation_loop, ())
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#blinker_loop()
 | 
					 | 
				
			||||||
animation_loop()
 | 
					 | 
				
			||||||
#test_loop()
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue