#!/usr/bin/env python # -*- coding: utf-8 -*- ''' Neopixel GPIO D18 #(-> pin 12) Ground pin 9 5 V pin 4 Modes/functions : -1 cls 0 Scappy 1 Rainbow 2 Remote ''' # Simple test for NeoPixels on Raspberry Pi import time import board import neopixel # Choose an open pin connected to the Data In of the NeoPixel strip, i.e. board.D18 # NeoPixels must be connected to D10, D12, D18 or D21 to work. pixel_pin = board.D18 #(-> pin 12) # The number of NeoPixels num_pixels = 14 palette = [(255,255,255), (255,0,0), (0,255,0), (0,0,255), (255,255,0), (0,255,255), (255,0,255), (192,192,192), (128,128,128), (128,0,0), (128,128,0), (0,128,0), (128,0,128), (0,128,128), (0,0,128) ] nbcolor = len(palette) #print(nbcolor, "colors") #print(palette) # The order of the pixel colors - RGB or GRB. Some NeoPixels have red and green reversed! # For RGBW NeoPixels, simply change the ORDER to RGBW or GRBW. ORDER = neopixel.GRB pixels = neopixel.NeoPixel( pixel_pin, num_pixels, brightness=0.2, auto_write=False, pixel_order=ORDER ) # mode 0 : scapy mode = 0 modes = ["scappy", "rainbow", "Remote"] nerves = [[0,7],[1,3],[2,9],[4,13],[5,11],[6,12],[8,10]] influx = [0]*(len(nerves)*2) counter = 0 def nextnerve(zzzport): global counter #print("nerve",counter) zzz = zzzport % nbcolor # zzz = led color influx[nerves[counter][0]] = zzz influx[nerves[counter][1]] = zzz #print("nerve",counter,"influx", influx) display(influx) #print(len(nerves), "nerves") if counter +1 == len(nerves): counter = 0 else: counter += 1 #print("next nerve", counter) def wheel(pos): # Input a value 0 to 255 to get a color value. # The colours are a transition r - g - b - back to r. if pos < 0 or pos > 255: r = g = b = 0 elif pos < 85: r = int(pos * 3) g = int(255 - pos * 3) b = 0 elif pos < 170: pos -= 85 r = int(255 - pos * 3) g = 0 b = int(pos * 3) else: pos -= 170 r = 0 g = int(pos * 3) b = int(255 - pos * 3) return (r, g, b) if ORDER in (neopixel.RGB, neopixel.GRB) else (r, g, b, 0) # rainbow demo def rainbow_cycle(wait): if mode == 1: for rstep in range(255): for i in range(num_pixels): pixel_index = (i * 256 // num_pixels) + rstep pixels[i] = wheel(pixel_index & 255) pixels.show() time.sleep(wait) # rainbow mode frame rstep = 0 def rainbow_mode(wait = 0.001): global rstep if mode == 1: rstep +=1 if rstep == 255: rstep =0 for i in range(num_pixels): pixel_index = (i * 256 // num_pixels) + rstep pixels[i] = wheel(pixel_index & 255) pixels.show() time.sleep(wait) def cls(): print('Cls') mode = -1 pixels.fill((0, 0, 0)) pixels.show() def ledscls(): print('Cls') pixels.fill((0, 0, 0)) pixels.show() def display(colors): print("Incoming generated colors :",colors) for pixel in range(num_pixels): #print(pixel, colors[pixel], palette[colors[pixel]] ) pixels[pixel] = palette[colors[pixel]] #print("pixels array :",pixels) pixels.show() def demo(): global mode ledscls() # Comment this line out if you have RGBW/GRBW NeoPixels print("Demo.") pixels.fill((255, 0, 0)) # Uncomment this line if you have RGBW/GRBW NeoPixels # pixels.fill((255, 0, 0, 0)) pixels.show() time.sleep(1) # Comment this line out if you have RGBW/GRBW NeoPixels pixels.fill((0, 255, 0)) # Uncomment this line if you have RGBW/GRBW NeoPixels # pixels.fill((0, 255, 0, 0)) pixels.show() time.sleep(1) # Comment this line out if you have RGBW/GRBW NeoPixels pixels.fill((0, 0, 255)) # Uncomment this line if you have RGBW/GRBW NeoPixels # pixels.fill((0, 0, 255, 0)) pixels.show() time.sleep(1) mode = 1 rainbow_cycle(0.001) # rainbow cycle with 1ms delay per step ledscls() if __name__ == '__main__': demo()