IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Déploiement/Installation Python Discussion :

wordclock diy en python et Raspberry


Sujet :

Déploiement/Installation Python

  1. #81
    Futur Membre du Club
    Homme Profil pro
    diy
    Inscrit en
    Septembre 2020
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : diy
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2020
    Messages : 61
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par josmiley Voir le message
    clic-droit sur le fichier -> propriété
    en ligne de commande ça donne quoi? (c'est un pi zerow et je n'ai pas d'interface graphique)
    edit : trouvé... pwd était mon ami ça marche donc...

    Penses-tu qu'il soit simple à mettre en place le lancement du fichier strandtest.py a l'appuis du bouton3?

  2. #82
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 048
    Points : 1 378
    Points
    1 378
    Par défaut
    est-ce que tu veux lancer toutes les animations à l'appui du bouton3, ou est-ce que tu veux sélectionner une animation qui s'effectuera au passage de chaque minute par exemple ?

  3. #83
    Futur Membre du Club
    Homme Profil pro
    diy
    Inscrit en
    Septembre 2020
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : diy
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2020
    Messages : 61
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par josmiley Voir le message
    est-ce que tu veux lancer toutes les animations à l'appui du bouton3, ou est-ce que tu veux sélectionner une animation qui s'effectuera au passage de chaque minute par exemple ?
    toute les animations... pas de rapport avec l'heure qui passe... avec un appuis court on change d'animation, avec un appui long on sort de l'anim... jouable?

  4. #84
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 048
    Points : 1 378
    Points
    1 378
    Par défaut
    c'est faisable , mais c'est pas simple. Pour choper l'appui du bouton3 tout en jouant les animations, il faudrait reprendre toutes les fonctions, etc ... trop de boulot.

  5. #85
    Futur Membre du Club
    Homme Profil pro
    diy
    Inscrit en
    Septembre 2020
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : diy
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2020
    Messages : 61
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par josmiley Voir le message
    c'est faisable , mais c'est pas simple. Pour choper l'appui du bouton3 tout en jouant les animations, il faudrait reprendre toutes les fonctions, etc ... trop de boulot.
    Un grand merci pour l’aide que tu m’as apporté !!! Tampis pour le bouton 3 alors... as tu réussi à voir la vidéo?
    Question... si je veux ajouter des couleurs... il suffit d’en rajouter dans list_color?

  6. #86
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 048
    Points : 1 378
    Points
    1 378
    Par défaut
    Exactement. Mais laisse (255,255,255) en première position si tu veux blanc par défaut.
    Refait une vidéo quand tu auras fini ton projet

  7. #87
    Futur Membre du Club
    Homme Profil pro
    diy
    Inscrit en
    Septembre 2020
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : diy
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2020
    Messages : 61
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par josmiley Voir le message
    Exactement. Mais laisse (255,255,255) en première position si tu veux blanc par défaut.
    Refait une vidéo quand tu auras fini ton projet
    je ferai ça sans fautes!!! mais ce ne sera pas de suite... je dois attendre pour la production du vinyl... (je profite d'une autre commande pour avoir des prix minis) mais je suis impatient de voir ça terminé... maintenant l'étape la plus délicate pour moi va être d'encoller le vinyl pour que ça colle suffisament sur mon opalin... (ordre des couches : mdf-opalin-vinyl-verre) je voulais faire ça au fix all mais faut pas mettre trop sinon ça se verra dans les lettres et faut pas mettre trop peu sinon ça ne tiendra pas... (j'ai fais le verre en 53cmx53cm alors que mon mdf fait 50cmx50cm... le but est de masquer les boutons et le fil electrique)

  8. #88
    Futur Membre du Club
    Homme Profil pro
    diy
    Inscrit en
    Septembre 2020
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : diy
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2020
    Messages : 61
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par josmiley Voir le message
    Exactement. Mais laisse (255,255,255) en première position si tu veux blanc par défaut.
    Refait une vidéo quand tu auras fini ton projet
    j'ai un résultat très particulier en changeant les valeurs des couleurs... en gros j'ai testé en voulant mettre un rose (255, 255, 0) je lance le python et je pousse sur le bouton (le rose étant bien en seconde couleur). et je me retrouve avec des led random (un peu partout sur le panel) allumée dans des couleurs random aussi...Nom : C0FC5353-6F74-434E-B088-F76CB083A451.jpeg
Affichages : 139
Taille : 17,7 Ko

    edit : après un redemarrage du pi.... plus de soucis...

  9. #89
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 048
    Points : 1 378
    Points
    1 378
    Par défaut
    poste le code en entier

  10. #90
    Futur Membre du Club
    Homme Profil pro
    diy
    Inscrit en
    Septembre 2020
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : diy
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2020
    Messages : 61
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par josmiley Voir le message
    poste le code en entier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    #a lancer avec cd piLedClock/rpi_ws281x/python
    #et sudo python3 wordclock.py
    from datetime import datetime
    from time import sleep
    from neopixel import *
    import argparse
    import RPi.GPIO as GPIO                 #bibliothèque RPi.GPIO
    import time                             #bibliothèque time
     
    # LED strip configuration:
    LED_COUNT      = 114      # Number of LED pixels.
    LED_PIN        = 18      # GPIO pin connected to the pixels (18 uses PWM!).
    #LED_PIN        = 10      # GPIO pin connected to the pixels (10 uses SPI /dev/spidev0.0).
    LED_FREQ_HZ    = 800000  # LED signal frequency in hertz (usually 800khz)
    LED_DMA        = 10      # DMA channel to use for generating signal (try 10)
    LED_BRIGHTNESS = 255     # Set to 0 for darkest and 255 for brightest
    LED_INVERT     = False   # True to invert the signal (when using NPN transistor level shift)
    LED_CHANNEL    = 0       # set to '1' for GPIOs 13, 19, 41, 45 or 53
    #-------------------------------------------------------------------------------
    pin = 17, 22, 24                                        #broche utilisé en entrée
    #temps = 1                                              #valeur attente en msec
    #temps = 10
    temps = 100
    #temps = 100
    #temps = 1000
    GPIO.setwarnings(False)                                 #désactive le mode warning
    GPIO.setmode(GPIO.BCM)                                  #utilisation des numéros de ports du
                                                            #processeur
    GPIO.setup(pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
                                                            #mise en entrée du port GPIO 22
                                                            #et activation résistance soutirage
                                                            #au ground
     
     
    panel    = \
    "\
    ILNESTODEUX\
    QUATRETROIS\
    NEUFUNESEPT\
    HUITSIXCINQ\
    MIDIXMINUIT\
    ONZERHEURES\
    MOINSOLEDIX\
    ETRQUARTPMD\
    TRENTEOURXT\
    VINGT-CINQU\
    ....\
    "
     
     
     
    # stripLettre est la liste des LEDs en fonction de l'ordre des lettres dans panel
    # tient compte du tortillement du ruban
    stripLettre = list(range(110,0,-1))
    for i in range(0,110,22): stripLettre[i:i+11] = stripLettre[i:i+11][::-1]
    stripDot    = [111, 114, 113, 112]
    stripLettre += stripDot
     
     
    def convert(heure,minute):
        """convertit l'heure en texte, recherche chaque terme dans le panel,
        et utilise l'index des mots pour extraire dans stripLettre les numéros des leds à allumer"""
     
        heure   = (heure+(minute>=35))%24
        liaison = heure%12>1 and'HEURES'or heure%12 and'HEURE'or''
        heure   = (heure//12 and'MIDI'or'MINUIT','UNE','DEUX','TROIS','QUATRE','CINQ','SIX','SEPT','HUIT','NEUF','DIX','ONZE')[heure%12]
        dot     = ' . . . .'[:minute%5*2]
        minute  = ('','CINQ','DIX','ET QUART','VINGT','VINGT-CINQ','TRENTE','TRENTE CINQ','MOINS VINGT','MOINS LE QUART','MOINS DIX','MOINS CINQ')[minute//5]
        litt    = f'IL EST {heure}'
        if liaison: litt = litt + ' ' + liaison
        if minute : litt = litt + ' ' + minute
        litt += dot
        print(litt)
        output  = []
        index   = 0
        for mot in litt.split():
            i = panel.find(mot,index)
            output.extend(stripLettre[i:i+len(mot)])
            index = i + len(mot)
        return output
     
     
    def getHour():
     
        maintenant = datetime.now()
        heure      = maintenant.hour
        minute     = maintenant.minute
        return heure,minute
     
     
     
     # Define functions which animate LEDs in various ways.
    def colorWipe(strip, color, wait_ms=50):
        """Wipe color across display a pixel at a time."""
        for i in range(strip.numPixels()):
            strip.setPixelColor(i, color)
            strip.show()
            sleep(wait_ms/1000.0)
     
    #Show array
    def showArray(strip, color, array):
        array = set(array)
        for i in range(strip.numPixels()):
            strip.setPixelColor(i, color if (i+1) in array else Color(0,0,0))
        strip.show()
     
     
    def get_color():
        R,G,B = list_color[index_color]
        return Color(int(R*current_bright),int(G*current_bright),int(B*current_bright))
     
    list_color      = [(255,255,255),(255, 0, 255), (255, 255, 0), (0, 255, 255), (129, 77, 86), (111, 147, 168), (221, 254, 42), (152, 216, 39), (166, 165, 158), (144, 44, 102), (236, 25, 252)]
    index_color     = 0
    current_bright  = 1
     
    delay_low       = 0
     
    pin17state      = True
    pin22state      = True
     
    if __name__ == '__main__':
        # Process arguments
        parser = argparse.ArgumentParser()
        parser.add_argument('-c', '--clear', action='store_true', help='clear the display on exit')
        args = parser.parse_args()
     
        # Create NeoPixel object with appropriate configuration.
        strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT, LED_BRIGHTNESS, LED_CHANNEL)
        # Intialize the library (must be called once before other functions).
        strip.begin()
     
        print ('Press Ctrl-C to quit.')
        if not args.clear:
            print('Use "-c" argument to clear LEDs on exit')
     
     
     # attendre si on est moins d'une seconde de la minute suivante
        while datetime.now().second == 59: continue
        showArray(strip, get_color(), convert(*getHour()))
     
        try:
            while True:
     
     
                if datetime.now().second == 0:
     
                    output = convert(*getHour())
                    print(output)
                    showArray(strip, get_color(), convert(*getHour()))
     
                entreepin17 = GPIO.input(17)
                if (entreepin17 == True) and not pin17state:
                    pin17state = True
                    delay_low = 0
                    current_bright = round((current_bright+.1)%1.1,1) or .1
                    # met à jour au cas de dépassement de minute
                    showArray(strip, get_color(), convert(*getHour()))
                if (entreepin17 == False):
                    pin17state = False
                    print ('PIN17')
                    delay_low += 1
                if delay_low == 20: # valeur à ajuster
                    colorWipe(strip, Color(0,0,0), 10)
                    current_bright = round((current_bright-.1),1)
                    while not GPIO.input(17): pass
                    time.sleep(temps / 1000) # anti rebond
                    while GPIO.input(17): time.sleep(temps / 1000)
                    showArray(strip, get_color(), convert(*getHour()))
     
     
     
                entreepin22 = GPIO.input(22)
                if (entreepin22 == True) and not pin22state:
                    pin22state = True
                    delay_low = 0
                    index_color = (index_color+1)%len(list_color)
                    # met à jour au cas de dépassement de minute
                    showArray(strip, get_color(), convert(*getHour()))
                if (entreepin22 == False):
                    pin22state = False
                    print ('PIN22')
                    delay_low += 1
                if delay_low == 20: # valeur à ajuster
                    index_color     = 0
                    showArray(strip, get_color(), convert(*getHour()))
                    while not GPIO.input(22): pass
                    pin22state = True
                    delay_low = 0
                    showArray(strip, get_color(), convert(*getHour()))
     
     
                entreepin24 = GPIO.input(24)
                if (entreepin24 == False):
                    print ('PIN24')
                    # met à jour au cas de dépassement de minute
                    showArray(strip, Color(50,50,50), convert(*getHour()))
                time.sleep(temps / 1000)
     
        except KeyboardInterrupt:
                if args.clear:
                     colorWipe(strip, Color(0,0,0), 10)
    apres un reboot du pi le souci n'y est plus...

  11. #91
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 048
    Points : 1 378
    Points
    1 378
    Par défaut
    Citation Envoyé par 7ced7 Voir le message
    apres un reboot du pi le souci n'y est plus...
    plusieurs instances du code qui tournaient en même temps peut-être ?
    s'il se lance au démarrage, et que tu le lances aussi manuellement avec d'autre valeurs, par exemple en ajoutant des couleurs, ça peut donner des trucs bizarres.

  12. #92
    Futur Membre du Club
    Homme Profil pro
    diy
    Inscrit en
    Septembre 2020
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : diy
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2020
    Messages : 61
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par josmiley Voir le message
    plusieurs instances du code qui tournaient en même temps peut-être ?
    s'il se lance au démarrage, et que tu le lances aussi manuellement avec d'autre valeurs, par exemple en ajoutant des couleurs, ça peut donner des trucs bizarres.
    ça doit être ça... de plus le bouton de changement de couleur faisait scintiller à chaque appui...

  13. #93
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 048
    Points : 1 378
    Points
    1 378
    Par défaut
    c'est quoi de l'opalin ?
    c'est dans le vinyle que tu as découpé les lettres ?
    du coup, le mdf est juste percé ? je vois des halos ronds sur l'image.

  14. #94
    Futur Membre du Club
    Homme Profil pro
    diy
    Inscrit en
    Septembre 2020
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : diy
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2020
    Messages : 61
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par josmiley Voir le message
    c'est quoi de l'opalin ?
    c'est dans le vinyle que tu as découpé les lettres ?
    du coup, le mdf est juste percé ? je vois des halos ronds sur l'image.
    Nom : wordclock.JPG
Affichages : 133
Taille : 79,3 Ko
    Voila le profil de mon mdf... il est effectivement percé mais seulement sur 8mm le reste c'est de la défonce...
    l'opalin est une sorte de plexi diffuseur pour éviter d'avoir des points chauds dans la lumière.
    en ce moment c'est diffus car l'opalin n'est pas encore collé au mdf.
    les lettres seront découpées dans le vinyl et collée sur la vitre (en sandwich avec l'opalin)

  15. #95
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 048
    Points : 1 378
    Points
    1 378
    Par défaut
    à quoi sert le vinyle ?

  16. #96
    Futur Membre du Club
    Homme Profil pro
    diy
    Inscrit en
    Septembre 2020
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : diy
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2020
    Messages : 61
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par josmiley Voir le message
    à quoi sert le vinyle ?
    le vinyl sert a avoir la couleur noire opaque partout sauf le lettrage

  17. #97
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 048
    Points : 1 378
    Points
    1 378
    Par défaut
    si j'ai bien compris,

    le mdf est percé de trous ronds pour les LEDs
    le vinyle noir est découpé aux formes des lettres
    l'opalin sert à ne pas voir la LED et à diffuser
    la vitre donne un côté glossy

    j'ai bon ?

    mais l'opalin est blanc non ? avec le noir derrière, ça va pas faire gris ?
    ou alors le vinyle est devant, mais du coup on verra les lettres blanches, même éteintes, non ?

  18. #98
    Futur Membre du Club
    Homme Profil pro
    diy
    Inscrit en
    Septembre 2020
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : diy
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2020
    Messages : 61
    Points : 7
    Points
    7
    Par défaut
    le vinyl est placé entre la vitre et l'opalin (histoire d'avoir le coté glossy et pratique question nettoyage). on verra effectivement le lettrage en blanc à travers
    regarde ici : https://viewer.vrxs.de/embedded-mode...hiteLabel=true

  19. #99
    Futur Membre du Club
    Homme Profil pro
    diy
    Inscrit en
    Septembre 2020
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : diy
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2020
    Messages : 61
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par josmiley Voir le message
    si j'ai bien compris,

    le mdf est percé de trous ronds pour les LEDs
    le vinyle noir est découpé aux formes des lettres
    l'opalin sert à ne pas voir la LED et à diffuser
    la vitre donne un côté glossy

    j'ai bon ?

    mais l'opalin est blanc non ? avec le noir derrière, ça va pas faire gris ?
    ou alors le vinyle est devant, mais du coup on verra les lettres blanches, même éteintes, non ?
    Hello! EEEEENNNNNFIN j'ai posé mon vinyle sur ma vitre et ça donne TROP BIEN!
    J'ai eu un premier souci avec le vinyle comme je pensais le faire... la colle du dos du vinyle est très moche du coup au travers de la vitre ça ne rendait pas bien.
    J'ai donc changé mes plan et mis un vinyle mat en front de vitre et ça claque!
    Seul dernier souci et ce au niveau du code cette fois... lorsque l'heure arrive entre 35 et 40, l'heure est décalée d'une heure... je ferai une vidéo ce soir pour illustrer ça.
    Si quelqu'un a une vague idée de ce que ça pourrait être ce serait extra!²
    M E R C I!²


    voici mon code actuel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    #a lancer avec cd piLedClock/rpi_ws281x/python
    #et sudo python3 wordclock.py
    from datetime import datetime
    from time import sleep
    from neopixel import *
    import argparse
    import RPi.GPIO as GPIO                 #bibliothèque RPi.GPIO
    import time                             #bibliothèque time
     
    # LED strip configuration:
    LED_COUNT      = 114      # Number of LED pixels.
    LED_PIN        = 18      # GPIO pin connected to the pixels (18 uses PWM!).
    #LED_PIN        = 10      # GPIO pin connected to the pixels (10 uses SPI /dev/spidev0.0).
    LED_FREQ_HZ    = 800000  # LED signal frequency in hertz (usually 800khz)
    LED_DMA        = 10      # DMA channel to use for generating signal (try 10)
    LED_BRIGHTNESS = 255     # Set to 0 for darkest and 255 for brightest
    LED_INVERT     = False   # True to invert the signal (when using NPN transistor level shift)
    LED_CHANNEL    = 0       # set to '1' for GPIOs 13, 19, 41, 45 or 53
    #-------------------------------------------------------------------------------
    pin = 17, 22, 24                                        #broche utilisé en entrée
    #temps = 1                                              #valeur attente en msec
    #temps = 10
    temps = 100
    #temps = 100
    #temps = 1000
    GPIO.setwarnings(False)                                 #désactive le mode warning
    GPIO.setmode(GPIO.BCM)                                  #utilisation des numéros de ports du
                                                            #processeur
    GPIO.setup(pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
                                                            #mise en entrée du port GPIO 22
                                                            #et activation résistance soutirage
                                                            #au ground
     
     
    panel    = \
    "\
    ILNESTODEUX\
    QUATRETROIS\
    NEUFUNESEPT\
    HUITSIXCINQ\
    MIDIXMINUIT\
    ONZERHEURES\
    MOINSOLEDIX\
    ETRQUARTPMD\
    TRENTEOURXT\
    VINGT-CINQU\
    ....\
    "
     
     
    # stripLettre est la liste des LEDs en fonction de l'ordre des lettres dans panel
    # tient compte du tortillement du ruban
    stripLettre = list(range(110,0,-1))
    for i in range(0,110,22): stripLettre[i:i+11] = stripLettre[i:i+11][::-1]
    stripDot    = [111, 114, 113, 112]
    stripLettre += stripDot
     
     
    def convert(heure,minute):
        """convertit l'heure en texte, recherche chaque terme dans le panel,
        et utilise l'index des mots pour extraire dans stripLettre les numéros des leds à allumer"""
     
        heure   = (heure+(minute>=35))%24
        liaison = heure%12>1 and'HEURES'or heure%12 and'HEURE'or''
        heure   = (heure//12 and'MIDI'or'MINUIT','UNE','DEUX','TROIS','QUATRE','CINQ','SIX','SEPT','HUIT','NEUF','DIX','ONZE')[heure%12]
        dot     = ' . . . .'[:minute%5*2]
        minute  = ('','CINQ','DIX','ET QUART','VINGT','VINGT-CINQ','TRENTE','TRENTE CINQ','MOINS VINGT','MOINS LE QUART','MOINS DIX','MOINS CINQ')[minute//5]
        litt    = f'IL EST {heure}'
        if liaison: litt = litt + ' ' + liaison
        if minute : litt = litt + ' ' + minute
        litt += dot
        print(litt)
        output  = []
        index   = 0
        for mot in litt.split():
            i = panel.find(mot,index)
            output.extend(stripLettre[i:i+len(mot)])
            index = i + len(mot)
        return output
     
     
    def getHour():
     
        maintenant = datetime.now()
        heure      = maintenant.hour
        minute     = maintenant.minute
        return heure,minute
     
     
    # Define functions which animate LEDs in various ways.
    def colorWipe(strip, color, wait_ms=50):
        """Wipe color across display a pixel at a time."""
        for i in range(strip.numPixels()):
            strip.setPixelColor(i, color)
            strip.show()
            sleep(wait_ms/1000.0)
     
    #Show array
    def showArray(strip, color, array):
        array = set(array)
        for i in range(strip.numPixels()):
            strip.setPixelColor(i, color if (i+1) in array else Color(0,0,0))
        strip.show() 
     
     
    def get_color():
        R,G,B = list_color[index_color]
        return (int(R*current_bright),int(G*current_bright),int(B*current_bright))
     
    list_color      = [(253, 51, 100), (138, 36, 177), (240, 120, 228), (129, 77, 86), (111, 147, 168), (221, 254, 42), (152, 216, 39), (166, 165, 158), (144, 44, 102), (236, 25, 252)]
    index_color     = 0
    current_bright  = 1
     
     
    if __name__ == '__main__':
        # Process arguments
        parser = argparse.ArgumentParser()
        parser.add_argument('-c', '--clear', action='store_true', help='clear the display on exit')
        args = parser.parse_args()
     
        # Create NeoPixel object with appropriate configuration.
        strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT, LED_BRIGHTNESS, LED_CHANNEL)
        # Intialize the library (must be called once before other functions).
        strip.begin()
     
        print ('Press Ctrl-C to quit.')
        if not args.clear:
            print('Use "-c" argument to clear LEDs on exit')
     
        # attendre si on est moins d'une seconde de la minute suivante
        while datetime.now().second == 59: continue
        showArray(strip, get_color(), convert(*getHour()))
     
        try:
            while True:
     
                if datetime.now().second == 0:
     
                    output = convert(*getHour())
                    print(output)
                    showArray(strip, get_color(), convert(*getHour()))
     
                entreepin17 = GPIO.input(17)
                if (entreepin17 == False):
                    print ('PIN17')
                    current_bright = round((current_bright+.1)%1.1,1) or .1
                    # met à jour au cas de dépassement de minute
                    showArray(strip, get_color(), convert(*getHour()))
     
                entreepin22 = GPIO.input(22)
                if (entreepin22 == False):
                    print ('PIN22')
                    index_color = (index_color+1)%len(list_color)
                    # met à jour au cas de dépassement de minute
                    showArray(strip, get_color(), convert(*getHour()))
     
                entreepin24 = GPIO.input(24)
                if (entreepin24 == False):
                    print ('PIN24') 
                    # met à jour au cas de dépassement de minute
                    showArray(strip, get_color(), convert(*getHour()))
                time.sleep(temps / 1000)
     
        except KeyboardInterrupt:
                if args.clear:
                     colorWipe(strip, Color(0,0,0), 10)
    Édit : les photos
    Nom : 0DE99E4B-D105-478E-9A4C-401A8B26F202.jpeg
Affichages : 106
Taille : 84,1 Ko
    Nom : 8B72A14E-4C40-4D26-9CAB-F4B4A4936394.jpeg
Affichages : 94
Taille : 70,7 Ko

  20. #100
    Futur Membre du Club
    Homme Profil pro
    diy
    Inscrit en
    Septembre 2020
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : diy
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2020
    Messages : 61
    Points : 7
    Points
    7
    Par défaut
    En gros faudrait un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    If Minutes = <35 And >40 
       Then Hour = Hour -1
    Mais je ne sais pas ou intégrer ça dans le code actuel...
    J'aimerais aussi faire en sorte que la luminosité baisse de 45%/heure entre 20h et 22h... (et si c'est progressif c'est encore mieux)des idées?

    edit : En fait pour faire "propre" il faudrait que je trouve l'origine du changement d'heure entre 35 et 40... j'ai beau analyser le code je ne pige pas d’où ça peux venir... je comprend qu'on chope l'heure via "from datetime" mais je ne pige pas la raison du changement dheure... du coup je devrais donner une contrainte du genre "entre 30 et 35 tu utilise "from datetime" - 1??? il y a certainement un moyen de faire plus propre non???

    edit 2 : trouvé.... en fait la réponse était sous mes yeux... Je poste donc le code final fonctionnel à 100% ci dessous. Si j'ai le courage j'essayerais bien de mettre un capteur de luminosité en plus... ce serait extra!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    #a lancer avec cd piLedClock/rpi_ws281x/python
    #et sudo python3 wordclock.py
    from datetime import datetime
    from time import sleep
    from neopixel import *
    import argparse
    import RPi.GPIO as GPIO                 #bibliothèque RPi.GPIO
    import time                             #bibliothèque time
     
    # LED strip configuration:
    LED_COUNT      = 114      # Number of LED pixels.
    LED_PIN        = 18      # GPIO pin connected to the pixels (18 uses PWM!).
    #LED_PIN        = 10      # GPIO pin connected to the pixels (10 uses SPI /dev/spidev0.0).
    LED_FREQ_HZ    = 800000  # LED signal frequency in hertz (usually 800khz)
    LED_DMA        = 10      # DMA channel to use for generating signal (try 10)
    LED_BRIGHTNESS = 255     # Set to 0 for darkest and 255 for brightest
    LED_INVERT     = False   # True to invert the signal (when using NPN transistor level shift)
    LED_CHANNEL    = 0       # set to '1' for GPIOs 13, 19, 41, 45 or 53
    #-------------------------------------------------------------------------------
    pin = 17, 22, 24                                        #broche utilisé en entrée
    #temps = 1                                              #valeur attente en msec
    #temps = 10
    temps = 100
    #temps = 100
    #temps = 1000
    GPIO.setwarnings(False)                                 #désactive le mode warning
    GPIO.setmode(GPIO.BCM)                                  #utilisation des numéros de ports du
                                                            #processeur
    GPIO.setup(pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
                                                            #mise en entrée du port GPIO 22
                                                            #et activation résistance soutirage
                                                            #au ground
     
     
    panel    = \
    "\
    ILNESTODEUX\
    QUATRETROIS\
    NEUFUNESEPT\
    HUITSIXCINQ\
    MIDIXMINUIT\
    ONZERHEURES\
    MOINSOLEDIX\
    ETRQUARTPMD\
    TRENTEOURXT\
    VINGT-CINQU\
    ....\
    "
     
     
    # stripLettre est la liste des LEDs en fonction de l'ordre des lettres dans panel
    # tient compte du tortillement du ruban
    stripLettre = list(range(110,0,-1))
    for i in range(0,110,22): stripLettre[i:i+11] = stripLettre[i:i+11][::-1]
    stripDot    = [111, 114, 113, 112]
    stripLettre += stripDot
     
     
    def convert(heure,minute):
        """convertit l'heure en texte, recherche chaque terme dans le panel,
        et utilise l'index des mots pour extraire dans stripLettre les numéros des leds à allumer"""
     
        heure   = (heure+(minute>=40))%24
        liaison = heure%12>1 and'HEURES'or heure%12 and'HEURE'or''
        heure   = (heure//12 and'MIDI'or'MINUIT','UNE','DEUX','TROIS','QUATRE','CINQ','SIX','SEPT','HUIT','NEUF','DIX','ONZE')[heure%12]
        dot     = ' . . . .'[:minute%5*2]
        minute  = ('','CINQ','DIX','ET QUART','VINGT','VINGT-CINQ','TRENTE','TRENTE CINQ','MOINS VINGT','MOINS LE QUART','MOINS DIX','MOINS CINQ')[minute//5]
        litt    = f'IL EST {heure}'
        if liaison: litt = litt + ' ' + liaison
        if minute : litt = litt + ' ' + minute
        litt += dot
        print(litt)
        output  = []
        index   = 0
        for mot in litt.split():
            i = panel.find(mot,index)
            output.extend(stripLettre[i:i+len(mot)])
            index = i + len(mot)
        return output
     
     
    def getHour():
     
        maintenant = datetime.now()
        heure      = maintenant.hour
        minute     = maintenant.minute
        return heure,minute
     
     
    # Define functions which animate LEDs in various ways.
    def colorWipe(strip, color, wait_ms=50):
        """Wipe color across display a pixel at a time."""
        for i in range(strip.numPixels()):
            strip.setPixelColor(i, color)
            strip.show()
            sleep(wait_ms/1000.0)
     
    #Show array
    def showArray(strip, color, array):
        array = set(array)
        for i in range(strip.numPixels()):
            strip.setPixelColor(i, color if (i+1) in array else Color(0,0,0))
        strip.show() 
     
     
    def get_color():
        R,G,B = list_color[index_color]
        return (int(R*current_bright),int(G*current_bright),int(B*current_bright))
     
    list_color      = [(253, 51, 100), (138, 36, 177), (240, 120, 228), (129, 77, 86), (111, 147, 168), (221, 254, 42), (152, 216, 39), (166, 165, 158), (144, 44, 102), (236, 25, 252)]
    index_color     = 0
    current_bright  = 1
     
     
    if __name__ == '__main__':
        # Process arguments
        parser = argparse.ArgumentParser()
        parser.add_argument('-c', '--clear', action='store_true', help='clear the display on exit')
        args = parser.parse_args()
     
        # Create NeoPixel object with appropriate configuration.
        strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT, LED_BRIGHTNESS, LED_CHANNEL)
        # Intialize the library (must be called once before other functions).
        strip.begin()
     
        print ('Press Ctrl-C to quit.')
        if not args.clear:
            print('Use "-c" argument to clear LEDs on exit')
     
        # attendre si on est moins d'une seconde de la minute suivante
        while datetime.now().second == 59: continue
        showArray(strip, get_color(), convert(*getHour()))
     
        try:
            while True:
     
                if datetime.now().second == 0:
     
                    output = convert(*getHour())
                    print(output)
                    showArray(strip, get_color(), convert(*getHour()))
     
                entreepin17 = GPIO.input(17)
                if (entreepin17 == False):
                    print ('PIN17')
                    current_bright = round((current_bright+.1)%1.1,1) or .1
                    # met à jour au cas de dépassement de minute
                    showArray(strip, get_color(), convert(*getHour()))
     
                entreepin22 = GPIO.input(22)
                if (entreepin22 == False):
                    print ('PIN22')
                    index_color = (index_color+1)%len(list_color)
                    # met à jour au cas de dépassement de minute
                    showArray(strip, get_color(), convert(*getHour()))
     
                entreepin24 = GPIO.input(24)
                if (entreepin24 == False):
                    print ('PIN24') 
                    # met à jour au cas de dépassement de minute
                    showArray(strip, get_color(), convert(*getHour()))
                time.sleep(temps / 1000)
     
        except KeyboardInterrupt:
                if args.clear:
                     colorWipe(strip, Color(0,0,0), 10)
    Et comme promis... une vidéo du projet fini :
    https://drive.google.com/file/d/1lHK...w?usp=drivesdk

Discussions similaires

  1. Python sur raspberry et POST
    Par joseph20480 dans le forum Général Python
    Réponses: 0
    Dernier message: 04/02/2018, 00h34
  2. Python Tweepy Raspberry
    Par pi3dany dans le forum Raspberry Pi
    Réponses: 4
    Dernier message: 14/03/2017, 18h54
  3. conseils pour serveur python sur raspberry
    Par nma dans le forum Raspberry Pi
    Réponses: 1
    Dernier message: 12/11/2016, 13h34
  4. Conenxion SSH python et raspberry
    Par Stoufiler dans le forum Réseau/Web
    Réponses: 4
    Dernier message: 14/06/2015, 17h24
  5. Python et Raspberry
    Par Horizon1956 dans le forum Raspberry Pi
    Réponses: 1
    Dernier message: 14/12/2014, 13h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo