jumeaux-numeriques/volet_roulant/volrou_cmd.py

153 lines
5.3 KiB
Python

from volrou_lib import * # Bibliothèque volet roulant
###############################################################################
# volrou_cmd-correction-grove.py
# @title: Script de test pour le jumelage du volet roulant à des composants Grove
###############################################################################
###############################################################################
# Instructions élémentaires pour le volet roulant
#
# Actions (ordre = True ou False) :
# - Monter le volet (moteur sens trigo) : mot_m(True | False)
# - Descendre le volet (moteur sens horaire) : mot_d(True | False)
#
# Capteurs :
# - Capteur fin de course volet en haut : fdc_h() : valeur retournée = True ou False
# - Capteur fin de course volet en bas : fdc_b() : valeur retournée = True ou False
# - Capteur de luminosité (LDR) : lum() : valeur retournée = entre 0.0 et 1.0
#
# Consignes du pupitre (valeur retournée = True ou False) :
# - Bouton poussoir monter volet : bp_m()
# - Bouton poussoir arrêt volet : bp_a()
# - Bouton poussoir descendre volet : bp_d()
# - Bouton poussoir mode automatique : bg_auto()
#
# Retour d'information du pupitre (allumer = True ou False) :
# - Voyant témoin mode automatique : voy_auto(True | False)
#
# Gestion du temps :
# - Temporisation en seconde : tempo(duree)
#
###############################################################################
# Brochage du volet roulant
brochage={
'bp_m' : ['a',1,'i'], 'bp_a' : ['a',0,'i'], 'bp_d' : ['a',2,'i'],
'fdc_h' : ['d',8,'i'], 'fdc_b' : ['d',7,'i'],
'mot_m' : ['d',5,'o'], 'mot_d' : ['d',6,'o'],
# 'bg_auto' : ['d',2,'i'], 'voy_auto' : ['d',4,'o']}
'bg_auto' : ['d',2,'i'], 'voy_auto' : ['d',4,'o'], 'lum' : ['a',3,'i']}
###############################################################################
# Fonctions
###############################################################################
###############################################################################
# Commandes
###############################################################################
def commandes():
# Mise en place : Monter le volet
print ("Volet roulant mode manuel, mode auto avec temporisation")
print ("Mise en place : Monter le volet")
while fdc_h() ==False :
mot_d(False)
mot_m(True)
mot_m(False)
# Jumelage
carte=jumeau(brochage)
# print (carte)
# lum_broche = carte.get_pin('a:3:i')
# print (lum_broche)
# Fonctionnement normal
print ("Attente")
presence_lum_tempo=0.0 # Temporisation pour la présence de lumière
absence_lum_tempo=0.0 # Temporisation pour l'absence de lumière
while True :
tempo(0.1) # Donne du temps à communication avec le jumeau réel
# print ("lum_r, ", lum_broche.read())
# print ("lum_r, ", get('lum_r'))
# Mode manuel
if bg_auto()== False:
voy_auto(False)
absence_lum_tempo=0
presence_lum_tempo = 0
# Monter le volet
if bp_m():
print ("Mode manu : Monter le volet : mouvement")
mot_d(False)
mot_m(True)
# Descendre le volet
if bp_d():
print ("Mode manu : Descendre le volet : mouvement")
mot_m(False)
mot_d(True)
# Arrêt manuel
if bp_a():
print ("Mode manu : Arrêter le volet !")
mot_m(False)
mot_d(False)
else: # Mode automatique
voy_auto(True)
# print ("lum_r, ", get('lum_r'))
print ("lum(), ", lum())
# Monter le volet : présence de lumière
if lum() < 0.5 and fdc_h()==False and absence_lum_tempo < 2:
tempo(0.1) # 0,1 s
presence_lum_tempo=0
absence_lum_tempo=absence_lum_tempo+0.1
# print ("Mode auto : Monter le volet : temporisation :", absence_lum_tempo)
# Monter le volet : mouvement
if absence_lum_tempo >= 2: # Temporisation de 2 s
# print ("Mode auto : Monter le volet : mouvement")
mot_d(False)
mot_m(True)
# Descendre le volet : absence de lumière
if lum() > 0.5 and fdc_b()==False and presence_lum_tempo < 2:
tempo(0.1) # 0,1 s
absence_lum_tempo=0
presence_lum_tempo=presence_lum_tempo+0.1
# print ("Mode auto : Descendre le volet : temporisation :", presence_lum_tempo)
# Descendre le volet : mouvement
if presence_lum_tempo >= 2: # Temporisation de 2 s
# print ("Mode auto : Descendre le volet : mouvement")
mot_m(False)
mot_d(True)
# Arrêt du moteur
if fdc_h() :
mot_m(False)
absence_lum_tempo=0
if fdc_b() :
mot_d(False)
presence_lum_tempo=0
###############################################################################
# En: External call << DONT CHANGE THIS SECTION >>
# Fr: Appel externe << NE PAS MODIFIER CETTE SECTION >>
###############################################################################
def cycle():
commandes()
fin()
if __name__=='start':
start(cycle)
if __name__=='stop':
stop()