Page 5 sur 6

Re: Projet mini automate de contrôle

Posté : mar. 12 mai 2015 11:47
par Cluclu
Réellement besoin de 2 scripts : j'ai envie de dire non seul le second est nécessaire à l'utilisation du RPi mais je n'ai trouvé que ce moyen pour scruté mon commutateur sans lancer la tache en plein écran.

Si on arrive à tout faire dans un seul ça ne sera que mieux !

Donc tu propose 2 boucle ancré dans le même script ? Une qui scrute le commutateur et une seconde qui fera le taf du script + afficher le terminal ?

Au besoin je peux mettre mon second script au complet que j'ai retouché niveau visuel pour l'utilisateur

Re: Projet mini automate de contrôle

Posté : mar. 12 mai 2015 13:02
par dbrion0606
Je pense qu'une solution consisterait à
a) lancer LXDE (je crois que 'est fait automatiquement dans ceratines configurations de Rapsbian)

b) lancer un script, attaché à un terminal, qui ne fera rien (sauf peut être afficher un message d'attente) tant que le bouton 7 (désigné ci dessous par START) ne sera pas activé: son occuppation sera de boucler en dormant.

c) Une fois sorti de la boucle, il executera en séquence votre boucle de scrutation qui aurait actuellement la structure suivante:

Code : Tout sélectionner

importation de libraries
fixation de quelques parametres
xxxx
while (1 == 1) :
   scruter

la boucle de démarrage aurait la forme suivante (devrait se mettre en xxxx)

Code : Tout sélectionner

START=7 # changer le nombre si je n'ai pas tiré le bon numéro
# pour rassurer
print (" Appuyez sur bouton pour démarrer") # IIRC, marche en python 2.7 et 3.x avec print parenthésé

while (!pi.digitalread( START ) ) : # boucle tant que le demarreur est inactif
   #  print("attente\n")
    sleep(0.1) # scruter toutes les 1/10 secondes suffit, sauf pour des gahmeurhs de course, dopés à la caféine
N

Re: Projet mini automate de contrôle

Posté : mar. 12 mai 2015 13:12
par Manfraid
Salut, essaye de mettre tes programme pour voir exactement ce que tu veux faire, si je peu t'aider je le ferais

Re: Projet mini automate de contrôle

Posté : mar. 12 mai 2015 13:52
par Cluclu
Pour répondre à Manfraid

Voici mon .Desktop

Code : Tout sélectionner

[Desktop Entry]
Encoding=UTF-8
Name=SmartEole
TryExec=lxterminal
Exec=lxterminal --command "/home/pi/smarteole.py"
Icon=/home/pi/USB/images.jpg
Type=Application
Categories=GTK;Utility;TerminalEmulator;
Sur le .desktop je n'ai pas trouvé la fonction pour lui demander de maximiser la fenêtre lors de l'ouverture (du genre Exec=lxterminal -mazimised)

Et voilà mon script ou j'ai inclus une boucle d'attente provisoire avant de lancer la seconde boucle. Dans cette config il faut lancer le script dès le début dans un terminal en plein écran si on veut voir quelque chose

Code : Tout sélectionner

#! /usr/bin/env python3
# -*- coding: utf-8 -*-
# Script Smart Eole Version 2 du 11/05/2015

import time #importation du module temps
import pifacedigitalio as pi #importation du module Piface et renommage
import os

pi.init() # initialisation du module

while pi.digital_read(7) ==0 :
    time.sleep(1)
    os.system("clear")
    print("Veuillez passer le commutateur sur 1")
    print("                                                           *       ")
    print("                  *************************************     *      ") 
    print("                  *     Module Smart Eole arrêté      *      *     ")
    print("                  *************************************       *****")
    print("                                                             *|    ")
    print("                                                            * |    ")
    print("                                                           *  |    ")
    print("                                                              |    ")
#tant que l'entrée 8 est égale à 1
while pi.digital_read(7) ==1 :
    time.sleep(1)
    os.system("clear") 
    print("                                                           *       ")
    print("                  *************************************     *      ") 
    print("                  *Module Smart Eole en Fonctionnement*      *     ")
    print("                  *************************************       *****")
    print("                                                             *|    ")
    print("                                                            * |    ")
    print("                                                           *  |    ")
    print("                                                              |    ")


# surveillance de l'entrée 1
    if pi.digital_read(0) == 1 :
       # print(aux)
       print("- Alarme SMART Surcharge Transfo")
       print("------------------------")
       pi.digital_write(0, 1)
    else :
        pi.digital_write(0 ,0)

# surveillance de l'entrée 2
    if pi.digital_read(1) == 1 :
       # print(aux)
       print("- Déclenchement SMART")
       print("------------------------")
       pi.digital_write(1, 1)
    else :
        pi.digital_write(1 ,0)

# surveillance de l'entrée 3
    if pi.digital_read(2) == 1 :
       # print(aux)
       print("- Défaut Equipement")
       print("------------------------")
       pi.digital_write(2, 1)
    else :
        pi.digital_write(2 ,0)

# surveillance de l'entrée 4
    if pi.digital_read(3) == 1 :
       # print(aux)
       print("- Déclenchement départ n°1")
       print("------------------------")
       pi.digital_write(3, 1)
    else :
        pi.digital_write(3 ,0)

# surveillance de l'entrée 5
    if pi.digital_read(4) == 1 :
       # print(aux)
       print("- Déclenchement départ n°2")
       print("------------------------")
       pi.digital_write(4, 1)
    else :
        pi.digital_write(4 ,0)

# surveillance de l'entrée 6
    if pi.digital_read(5) == 1 :
       # print(aux)
       print("- Déclenchement départ n°3")
       print("------------------------")
       pi.digital_write(5, 1)
    else :
        pi.digital_write(5 ,0)

# surveillance de l'entrée 7
    if pi.digital_read(6) == 1 :
       # print(aux)
       print("- Déclenchement départ n°4")
       print("------------------------")
       pi.digital_write(6, 1)
    else :
        pi.digital_write(6 ,0)


# surveillance de l'entrée 8
    if pi.digital_read(7) == 0 :
       print("- Coupure par utilisateur")
       print("- Extinction de la maquette dans 10 sec")
       pi.digital_write(6 ,0)
       time.sleep(0.1)
       pi.digital_write(5 ,0)
       time.sleep(0.1)
       pi.digital_write(4 ,0)
       time.sleep(0.1)
       pi.digital_write(3 ,0)
       time.sleep(0.1)
       pi.digital_write(2 ,0)
       time.sleep(0.1)
       pi.digital_write(1 ,0)
       time.sleep(0.1)
       pi.digital_write(0 ,0)
       time.sleep(10)
       # os.system("sudo halt")


Re: Projet mini automate de contrôle

Posté : mar. 12 mai 2015 13:59
par Cluclu
dbrion0606 a écrit :Je pense qu'une solution consisterait à
a) lancer LXDE (je crois que 'est fait automatiquement dans ceratines configurations de Rapsbian)

b) lancer un script, attaché à un terminal, qui ne fera rien (sauf peut être afficher un message d'attente) tant que le bouton 7 (désigné ci dessous par START) ne sera pas activé: son occuppation sera de boucler en dormant.

c) Une fois sorti de la boucle, il executera en séquence votre boucle de scrutation qui aurait actuellement la structure suivante:

Code : Tout sélectionner

importation de libraries
fixation de quelques parametres
xxxx
while (1 == 1) :
   scruter

la boucle de démarrage aurait la forme suivante (devrait se mettre en xxxx)

Code : Tout sélectionner

START=7 # changer le nombre si je n'ai pas tiré le bon numéro
# pour rassurer
print (" Appuyez sur bouton pour démarrer") # IIRC, marche en python 2.7 et 3.x avec print parenthésé

while (!pi.digitalread( START ) ) : # boucle tant que le demarreur est inactif
   #  print("attente\n")
    sleep(0.1) # scruter toutes les 1/10 secondes suffit, sauf pour des gahmeurhs de course, dopés à la caféine
N

Alors

1) Tu veux dire au démarrage arriver directement sur le bureau ? Si c'est le cas oui mon RPi démarre ainsi

2) J'ai inclus à peu près ça dans le script que j'ai posté ci dessus

Re: Projet mini automate de contrôle

Posté : mar. 12 mai 2015 15:09
par Manfraid
J'ai une petite question, que veux tu faire si l'entrée 7 repasse a zéro, car a l'heure actuelle je dirait que ton programme s'arrête et qu'il ne va plus scruter cette entrée

Re: Projet mini automate de contrôle

Posté : mar. 12 mai 2015 15:31
par dbrion0606
Il semble y avoir une incohérence entre le commentaire et le code python (peut faire tourner en bourrique si on veut modifier quelque chose dans 6 mois /un an)
# surveillance de l'entrée 8
if pi.digital_read(7) == 0 :
print("- Coupure par utilisateur")
print("- Extinction de la maquette dans 10 sec")

Re: Projet mini automate de contrôle

Posté : mar. 12 mai 2015 15:36
par Cluclu
Alors si l'entrée 7 repasse à zéro on arrête le Rpi (actuellement diésé car pas envie que ça coupe à chaque essais)

Pour l'incohérence ce n'en est pas une, il y a 8 entrées sur le Piface mais appelé de 0 à 7 dans le programme, ça je ne peut pas le contourner c'est le module piface qui est ainsi

Re: Projet mini automate de contrôle

Posté : mar. 12 mai 2015 16:18
par dbrion0606
Il faut faire attention aux rebonds des interrupteurs (usure du matériel http://www.ganssle.com/debouncing.htm, effroi ou Parkinson de l'utilisateur).

une façon de tenter de s'en affranchir est de dire que le niveau est à un (dans la boucle de démarrage où il est génant de détecter un niveau un mal stabilisé) si l'appui précédent est à un et l'appui actuel aussi -ils sont séparés d'au moins 1/10 secondes-

Code : Tout sélectionner

appui_precedent = (1==1) # initialisé à vrai
while (appui_precedent | ( pi.digital_read(7) == 0 )) :
     sleep(0.1)
     #affichage divers
     appui_precedent = ( pi.digital_read(7) == 0 ) # l'appui precedent devient l'appui suivant

Re: Projet mini automate de contrôle

Posté : mar. 12 mai 2015 16:45
par Manfraid
Une autre chose, pourquoi ne pas faire une application en tkinter comme tu veux du graphique cela serai encore plus simple a gérer