# This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . """ Eclairage à LED Neopixel avec contrôle (encodeur rotatif) """ __author__ = "arofarn" __version__ = 0.2 # Imports import time import machine import neopixel from uos import uname from encoder import Encoder #Paramètres NB_PIX = 8 # Nombre de pixels MAX_BRIGHT = 100 # Luminosité max (100 max.) COLOR = [255, 255, 255] # Couleur de base (à luminosité max) #Déclaration des objets et initialisation des variables BRD_TYPE = uname()[0] print("Système :", BRD_TYPE) if BRD_TYPE == 'esp8266': NEOPIX_PIN = 2 # Les deux broches suivantes doivent être capable d'interruption !!! # sur ESP8266 => : 4, 5, 12, 13 et 14 ENC_PIN_A = 13 # N° de la 1ere broche de l'encodeur ENC_PIN_B = 12 # N° de la 2e broche de l'encodeur ENC_PIN_C = 14 # broche du clic central de l'encodeur # With ESP8266 (no timing parameter) NPXL_STRIP = neopixel.NeoPixel(machine.Pin(NEOPIX_PIN), NB_PIX) elif BRD_TYPE == 'esp32': NEOPIX_PIN = 14 # Pins ENC_PIN_A = 15 # N° de la 1ere broche de l'encodeur ENC_PIN_B = 33 # N° de la 2e broche de l'encodeur ENC_PIN_C = 27 # broche du clic central de l'encodeur # # Only with ESP32 : add timing param. # # timing param =0 for "old" 400kHz neopixel (default) # # =1 for "new" 800kHz neopixel NPXL_STRIP = neopixel.NeoPixel(machine.Pin(NEOPIX_PIN), NB_PIX, timing=1) else: # ce code n'est pas prévu pour d'autre carte pour l'instant print("Carte non-supportée :", BRD_TYPE) quit() # # Only with ESP32 : add timing param. # # timing param =0 for "old" 400kHz neopixel (default) # # =1 for "new" 800kHz neopixel # pixel_strip = neopixel.NeoPixel(machine.Pin(NEOPIX_PIN), NB_PIX, timing=1) # coul_tmp = [0, 0, 0] #Eteint tout à l'initialisation NPXL_STRIP.fill([0, 0, 0]) NPXL_STRIP.write() # Encodeur rotatif ENCODER = Encoder(ENC_PIN_B, ENC_PIN_A, min_val=0, max_val=MAX_BRIGHT, clicks=1) #Bouton ENC_BUT = machine.Pin(ENC_PIN_C, machine.Pin.IN) #Variables d'état BRIGHTN = 50 # Luminosité (0 - 100) PWR = False # Est-ce que l'éclairage est allumé ? BUTTN_STATE = 1 def update_neopixel(np_strp, col, bri=50): """Update NeoPixel strip with one color :param np_strp : NeoPixel object :param col : color [R, G, B] :param bri : brightness 0-100 (default: 50) """ col_tmp = [0, 0, 0] for i in range(3): col_tmp[i] = int(col[i] * bri / 100) np_strp.fill(col_tmp) np_strp.write() ##################### # BOUCLE PRINCIPALE # ##################### while True: # Si on a un changement de valeur, on met à jour la luminisité et l'éclairage # des NeoPixel if PWR and BRIGHTN != ENCODER.value: print(ENCODER.value) BRIGHTN = ENCODER.value update_neopixel(NPXL_STRIP, COLOR, BRIGHTN) # Quand le bouton central est appuyé puis relâché, on allume ou on éteint if ENC_BUT.value() == 0 and BUTTN_STATE == 1: PWR = not PWR print("Power :", PWR) if not PWR: # Extinction des LED NPXL_STRIP.fill((0, 0, 0)) NPXL_STRIP.write() else: # Luminité basse si on allume avec une luminisité de 0 if BRIGHTN == 0: BRIGHTN = 10 # On remet l'encodeur à la dernière luminosité connue # pour ignorer les mouvements pendant l'extinction ENCODER.reset(BRIGHTN) # Rallume les LED: update_neopixel(NPXL_STRIP, COLOR, BRIGHTN) BUTTN_STATE = ENC_BUT.value() time.sleep_ms(20)