from machine import Pin, I2C, ADC, PWM
import ssd1306
import time
# Initialisation des broches pour les LED RGB, le bouton et les capteurs analogiques
rouge = PWM(Pin(11)) # Broche 11 pour la LED rouge
rouge.freq(1000) # Configuration de la fréquence du PWM
vert = Pin(12, Pin.OUT) # Broche 12 pour la LED verte
bleu = PWM(Pin(13)) # Broche 13 pour la LED bleue
bleu.freq(1000) # Configuration de la fréquence du PWM
bouton = Pin(22, Pin.IN, Pin.PULL_UP) # Broche 22 pour le bouton avec résistance de pull-up
pressed = False # Initialisation de l'état du bouton en non enfoncé
pressed_time = 0 # Initialisation du temps d'appui
VRx = ADC(Pin(26)) # Capteur analogique sur la broche 26 pour l'axe X
VRy = ADC(Pin(27)) # Capteur analogique sur la broche 27 pour l'axe Y
MoyenneValue = 0 # Initialisation de la valeur moyenne des capteurs
i2c = I2C(0, sda=Pin(0), scl=Pin(1)) # Initialisation de l'I2C
display = ssd1306.SSD1306_I2C(128, 64, i2c) # Initialisation de l'écran OLED
while True:
display.fill(0) # Effacer l'écran
VrxValue = VRx.read_u16() # Lire la valeur du capteur analogique de l'axe X
VryValue = VRy.read_u16() # Lire la valeur du capteur analogique de l'axe Y
MoyenneValue = (VrxValue + VryValue) // 2 # Calcul de la valeur moyenne des capteurs
bleu.duty_u16(VrxValue) # Contrôle de la LED bleue avec la valeur de VrxValue
rouge.duty_u16(VryValue) # Contrôle de la LED rouge avec la valeur de VryValue
if VrxValue < 10000 and VryValue < 10000:
vert.value(1) # Allume la LED vert
rouge.duty_u16(0) # Éteindre la LED rouge
bleu.duty_u16(0) # Éteindre la LED bleue
elif VrxValue < 10000 and VryValue > 50000:
vert.value(1) # Allume la LED vert
rouge.duty_u16(0) # Éteindre la LED rouge
bleu.duty_u16(0) # Éteindre la LED bleue
elif VrxValue > 50000 and VryValue < 10000:
vert.value(1) # Allume la LED vert
rouge.duty_u16(0) # Éteindre la LED rouge
bleu.duty_u16(0) # Éteindre la LED bleue
elif VrxValue > 50000 and VryValue > 50000:
vert.value(1) # Allume la LED vert
rouge.duty_u16(0) # Éteindre la LED rouge
bleu.duty_u16(0) # Éteindre la LED bleue
else:
vert.value(0) # Éteindre la LED vert
if bouton.value() == 0 and not pressed:
pressed = True
pressed_time = time.ticks_ms()
if bouton.value() == 1 and pressed:
pressed = False
elapsed_time = time.ticks_diff(time.ticks_ms(), pressed_time)
if elapsed_time < 1000: # Action pour un appui court
vert.value(1) # Allume la LED vert
rouge.duty_u16(0) # Éteindre la LED rouge
bleu.duty_u16(0) # Éteindre la LED bleue
mode_info1 = "allume"
display.text(mode_info1, 0, 30)
else: # Action pour un appui long
if VrxValue < 32759 and VryValue < 32759:
mode_info2 = "clignote 5"
display.text(mode_info2, 0, 30)
display.show()
for i in range(5): # Clignoter 5 fois
vert.value(1) # Allume la LED vert
time.sleep(0.2)
vert.value(0) # Éteindre la LED vert
time.sleep(0.2)
rouge.duty_u16(0)
bleu.duty_u16(0)
elif VrxValue > 32759 and VryValue < 32759:
mode_info3 = "clignote 20"
display.text(mode_info3, 0, 30)
display.show()
for i in range(20): # Clignoter 20 fois
vert.value(1) # Allume la LED vert
time.sleep(0.2)
vert.value(0) # Éteindre la LED vert
time.sleep(0.2)
rouge.duty_u16(0)
bleu.duty_u16(0)
else:
if VryValue > 32759:
mode_info4 = "sequence color"
mode_info5 = "B-G-R 3fois"
display.text(mode_info5, 0, 20)
display.text(mode_info4, 0, 30)
display.show()
for i in range(3): # Boucle pour changer de couleur 3 fois (rouge, bleu, vert)
rouge.duty_u16(65535) # Rouge allumé
time.sleep(0.5)
bleu.duty_u16(65535) # Bleu allumé
rouge.duty_u16(0) # Rouge éteint
time.sleep(0.5)
vert.value(1) # Vert allumé
bleu.duty_u16(0) # Bleu éteint
time.sleep(0.5)
vert.value(0) # Vert éteint
display.text("Vrx value: {}".format(VrxValue), 0, 40)
display.text("Vry value: {}".format(VryValue), 0, 50)
analogx=100*(VRx.read_u16()-32767)/32767
analogy=100*(VRy.read_u16()-32767)/32767
Rouge_info = "Rouge:" +str(int(analogx))
Blue_info = "Bleu:" +str(int(analogy))
Vert_info = "Vert: {}".format(vert.value())
display.text(Rouge_info, 0, 0)
display.text(Blue_info, 0, 10)
display.text(Vert_info, 0, 20)
display.show()
time.sleep(0.1)