[RESOLU] Projet mini automate de contrôle
Modérateur : Francois
Re: Projet mini automate de contrôle
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
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
- dbrion0606
- Raspinaute
- Messages : 164
- Enregistré le : ven. 30 janv. 2015 15:51
Re: Projet mini automate de contrôle
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:
la boucle de démarrage aurait la forme suivante (devrait se mettre en xxxx)
N
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
Re: Projet mini automate de contrôle
Salut, essaye de mettre tes programme pour voir exactement ce que tu veux faire, si je peu t'aider je le ferais
NAS : DIY OS Debian: DD250Go + 3x2To + 6To
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.
Re: Projet mini automate de contrôle
Pour répondre à Manfraid
Voici mon .Desktop
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
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;
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
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)
NCode : 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
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
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
NAS : DIY OS Debian: DD250Go + 3x2To + 6To
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.
- dbrion0606
- Raspinaute
- Messages : 164
- Enregistré le : ven. 30 janv. 2015 15:51
Re: Projet mini automate de contrôle
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
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
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
- dbrion0606
- Raspinaute
- Messages : 164
- Enregistré le : ven. 30 janv. 2015 15:51
Re: Projet mini automate de contrôle
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-
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
Une autre chose, pourquoi ne pas faire une application en tkinter comme tu veux du graphique cela serai encore plus simple a gérer
NAS : DIY OS Debian: DD250Go + 3x2To + 6To
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.