debutant commande volet roulant

jojo5001

New Member
Bonjour a toutes et a tous ,

Je débute avec logicator et viens d écrire quelques lignes pour théoriquement
commander un volet roulant .Le projet de base se compose de 3 BP et 2 relais.
BP1 ouverture (pin1)
BP2 stop (pin3)
BP3 fermeture (pin 4 )
j ai contrôlé avec le simulateur bp après bp cela a l air de fonctionner ,ce qui me pose problème
viens de la possibilité en actionnant bp1 et BP3 simultanément d alimenter les 2 relais avec temporisation ( ouverture et fermeture )
ce qui poserai un problème sérieux pour le moteur , mais quelle commande utiliser pour l éviter ? .Je me demande aussi si bp3 fera office de stop . je vous remercie par avance de vos avis et conseils .

Georges.

Code:
'BASIC convertit à partir d'un diagramme Logicator pour PIC® et PICAXE®
'C:\Users\SPARE\Desktop\picaxe volet.plf
'Convertit le 10/12/2014 à 22:30:02

;Symbols 
{
symbol varA = b0
symbol varB = b1
symbol varC = b2
symbol varD = b3
symbol varE = b4
symbol varF = b5
symbol varG = b6
symbol varH = b7
}


let dirs = %00000101


main:
		if pin1 = 1 then label_34	'Decision command
		high 0
		pause 2000	'Wait command
		goto label_26

label_34:
		if pin3 = 1 then label_31	'Decision command
		low 0
		low 2
		goto label_26

label_31:
		if pin4 = 1 then label_39	'Decision command
		high 2
		pause 2000	'Wait command
		goto label_26

label_39:	low 2
		goto label_26

label_26:	let pins = 0
		stop
 

MGU

Senior Member
Bonjour a toutes et a tous ,

Je débute avec logicator et viens d écrire quelques lignes pour théoriquement
commander un volet roulant .Le projet de base se compose de 3 BP et 2 relais.
BP1 ouverture (pin1)
BP2 stop (pin3)
BP3 fermeture (pin 4 )
j ai contrôlé avec le simulateur bp après bp cela a l air de fonctionner ,ce qui me pose problème
viens de la possibilité en actionnant bp1 et BP3 simultanément d alimenter les 2 relais avec temporisation ( ouverture et fermeture )
ce qui poserai un problème sérieux pour le moteur , mais quelle commande utiliser pour l éviter ? .Je me demande aussi si bp3 fera office de stop . je vous remercie par avance de vos avis et conseils .

Georges.
]
Bonjour et bienvenue,

Ce que je dis n'engage que moi.
Si tu débutes, essayes de programmer directement en basic, ce n'est pas plus difficile et il y a des tas de bonnes raisons de le faire.
Exemple, tu nous donnes une conversion de logicator en basic, conséquence:
Il n'y a aucun commentaire, et on ne sait pas quel picaxe est utilisé
Les labels, quand il y en a, ne sont pas explicites et la lecture de ce programme simple est déjà indigeste.

Logiquement, il est impossible d'actionner deux poussoirs simultanément, il y en aura un des deux qui sera pris en compte, le second ne sera pas lu.
Il sera impossible de commander simultanément en ouverture et fermeture...si le programme est bien fait.
Ici, on va à label_26 en deux secondes, et tout s'arrête.

Commence par faire le programme le plus simple possible, par ex, un poussoir pour allumer et éteindre une led

Sur cette page, il y a aussi un lien sur le tuto de Besqueut. http://electromag1.wifeo.com/les-picaxes-et-leur-basic.php

A suivre

MM
 
Last edited:

PieM

Senior Member
Bonjour,
En complément de ce que dit Michel, outre la documentation il est souhaitable d'expliquer le schéma du truc.

Car deux relais ça peut très bien être un relais qui fait marche/arrêt et l'autre qui fait montée/descente.
D'autre part, la traduction de logicator en basic est épouvantable.
Alors si vous devez continuer à travailler en mode diagramme (dans l'enseignement ?) il vaut mieux envoyer le programme en fichier plf.
pensez au petit symbole "comment"
 

dje8269

Senior Member
Je suis bien d'accord avec MGU , pour un petit programme simple comme celui-ci , il est très aisé de passé en basic , qui sait peut être allez vous être amené a l'améliorer .

Pour faire tourner un moteur dans les deux sens , il convient en général soit d'utiliser ce qu'on appelle un pont en H , ou alors plus simple un relais mais en double Position . ainsi il est impossible de cour-circuité le moteur . ca évite d'éventuelle erreurs soft
 

jojo5001

New Member
Bonsoir ,

Merci pour ta réponse je suis désolé pour l indigestion ce n était pas volontaire .Ce que tu me dis me
rassure la tempo de 2 secondes correspond au temps d activation de la sortie , elle sera plus longue bien entendu .Je vais
me procurer de quoi faire des essais grandeur nature et visiter aussi ton lien merci encore .

Georges
 

BESQUEUT

Senior Member
la traduction de logicator en basic est épouvantable.
:)
Ce programme là, je le garde comme démonstration d'un truc complètement imb..able à force de GOTO...
A moins que je n'ai fini par me perdre dans les différents renvois, il me semble que ce programme ne marche qu'une seule fois !
Si vous commandez tous les volets de cette façon, vous risquez de vous retrouver prisonnier...
 

MGU

Senior Member
Bonsoir ,

Merci pour ta réponse je suis désolé pour l indigestion ce n était pas volontaire .Ce que tu me dis me
rassure la tempo de 2 secondes correspond au temps d activation de la sortie , elle sera plus longue bien entendu .Je vais
me procurer de quoi faire des essais grandeur nature et visiter aussi ton lien merci encore .

Georges
Recopie tel quel ton programme "basic" dans Programming Editor et lance la simulation, va falloir être rapide si tu veux faire quelque chose...

MM
 

BESQUEUT

Senior Member
Recopie tel quel ton programme "basic" dans Programming Editor et lance la simulation, va falloir être rapide si tu veux faire quelque chose...MM
Excellente remarque : non seulement ça ne marche qu'une fois, mais de plus seulement pendant une fraction de seconde...
 

jojo5001

New Member
Re bonsoir ,

Non pas dans l enseignement mais bien incapable de faire un programme en basic .
l idée du truc est justement "basic " une pression sur bp1 le volet monte et s arrête automatiquement fin de course dans le moteur
une pression sur bp3 le moteur descend fin de course et un bp3 qui permet un arrêt n importe ou donc 3 bp et 2 relais avec 2 x 2N2222.Je
vais donc tenir compte de toutes vos remarques pour améliorer ce circuit que je sais faire fonctionner avec un cd4028 et un ne555 mais
tout intégrer dans un picaxe08M serait sympa .Merci a tous pour votre aide .

Georges
 

BESQUEUT

Senior Member
Si ça peut vous mettre le pied à l'étrier, voici votre programme en BASIC après suppression de tous les GOTO.
Code:
main:
	if pin1 = 1 then
		if pin3 = 1 then
			if pin4 = 1 then
				low 2
			else
				high 2
				pause 2000
			endif
		else
			low 0
			low 2
		endif
	else
		high 0
		pause 2000
	endif
	let pins = 0
	stop
Dites-nous si vous parvenez à le lire et n'hésitez pas à poser des questions.
On pourrait vous donnez une solution toute cuite, mais est-ce votre objectif ? Ou bien préférez-vous mettre au point une solution par vous-même ?
 

jojo5001

New Member
Merci BESQUEUT pour cette aide précieuse
j avoue être tenté par la solution clef en main ,
mais j aime bien comprendre ce que je fais et si je parviens a maitriser un peu le basic je trouverai toujours
quelques applications.Je vais donc essayer d analyser ce programme et l offre d aide
ultérieure me rassure grandement pour la suite bonne soirée

Georges
 

PieM

Senior Member
A titre indicatif, j'ai un grand store qui fonctionne avec un système identique mais deux BP seulement suffisent :
1 pour la montée
1 pour la descente

l'appui sur n'importe quel BP en cours de manœuvre arrête le moteur.

C'est l'exercice N°2 !
A faire d'emblée en basic.
 

jojo5001

New Member
houlala vous êtes dures :)
51 ans et les neurones en vrac mais si je
sort vainqueur du premier exercice je promet de m attaquer
au second et en basic !!!
l idée général est de contrôler les volets de manière filaire
et le bp stop permet un ordre plus simple a gérer .
en attendant je vous remercie tous de votre aide et surtout de votre patiente

Georges
 

MGU

Senior Member
houlala vous êtes dures :)
51 ans et les neurones en vrac mais si je
sort vainqueur du premier exercice je promet de m attaquer
au second et en basic !!!
l idée général est de contrôler les volets de manière filaire
et le bp stop permet un ordre plus simple a gérer .
en attendant je vous remercie tous de votre aide et surtout de votre patiente

Georges
51 ans...j'en ai 68, et les neurones, il faut essayer de les entretenir.

Bon, c'est Noël!
Voici donc une solution au cahier des charges PieM:
Un poussoir "montée"
un poussoir "descente"
Une pression sur un des deux poussoirs en cours de fonctionnement provoque arrête le volet
Arrêt après une temporisation (protection non fonctionnement du fin de course).

L'exercice consiste à placer les commentaires..

Code:
#picaxe 08M2
symbol haut =pinC.4		;poussoir montée
symbol bas =pinC.5		;poussoir descente

symbol motM= C.1	;moteur montée
symbol motD=C.2		;moteur descente


	Do 
		if haut=1  then gosub monte				
		if bas=1  then gosub desc		
	loop
	
monte:
	do loop while haut=1	
	time=0
	do
		high motM	
	loop while haut=0 and bas=0 and time <10
	do loop while haut=1 OR bas=1	
	low motM
return

desc:
	do loop while bas=1
	time=0
	do
		high motD	
	loop while haut=0 and bas=0 and time <10
	do loop while haut=1 OR bas=1	
	low motD
return
MM
 

jojo5001

New Member
Bonjour ,

Merci MGU je vais analyser ce programme et ajouter des commentaires
j ai travaille sur le pieds a l étrier de BESQUEUT et je suis dans l impasse
le poussoir 0 commande bien la sortie B.0
le poussoir 2 commande bien la sortie B.2
mais je ne trouve pas de solution pour arrêter les tempo avec le poussoir 1
du coup un bon entretien pour mes neurones :)

bonne journee

Code:
symbol poussoir0= pinC.0                `bp fermeture
symbol poussoir1=pinC.1                `bp stop
symbol poussoir2=pinC.2                `bp ouverture


do 

if poussoir0  = 0 then        `bp fermeture sur B.0
                       
if poussoir1 = 0 then        `bp stop
		
if poussoir2 = 0 then        `bp ouverture sur sortie B.2
	low 2
	low 0
	else
	high 2 
	pause 5000             `temporisation  ouverture  
			
				
	endif
	else
      low  0
	low  2
	
	endif
      else
	high  0   
	pause 5000       `temporisation fermeture
		
	endif
	let pins = 0
	
	loop
 

BESQUEUT

Senior Member
Bonjour ,

Merci MGU je vais analyser ce programme et ajouter des commentaires
j ai travaille sur le pieds a l étrier de BESQUEUT et je suis dans l impasse
le poussoir 0 commande bien la sortie B.0
le poussoir 2 commande bien la sortie B.2
mais je ne trouve pas de solution pour arrêter les tempo avec le poussoir 1
Pour vous aider à y voir plus clair, j'ai repris strictement votre dernier programme, mais avec des modifications purement cosmétiques.
Comprenez bien que c'est strictement la même chose, mais (en principe...) ça devrait être beaucoup plus lisible et vous aider à comprendre ce qui se passe. Une fois que ce sera clair pour vous. Je vous recommande d'analyser le code proposé par MGU. Et seulement ensuite revenir à votre cahier des charges complet. A ce stade, il n'est pas interdit de repartir d'une feuille blanche. L'important est que vous compreniez ce qui se passe.

Modifications effectuées :
- remplacement de noms de variables non significatifs par quelque chose de parlant : poussoir0 ne dit rien sur sa fonction !
- création de symboles pour les états "enfoncé" et "relâché". Plus parlant que "Ouvert" et "Fermé" car on ne sait pas s'il s'agit de contact NO ou NF. De plus, suivant le câblage, un inter ouvert peut donner soit un niveau logique "Vrai" (=1=5V) soit Faux (=0=0V)
- suppression des commentaires devenus totalement inutiles, ce qui rends le code plus facile à lire,
- structuration des niveaux de IF THEN ELSE. C'est très important d'identifier visuellement à quel IF se rapporte chaque ELSE et chaque ENDIF.

Puisque vous débutez, il y a une chose essentielle à retenir :
Un programme doit pouvoir être lu comme n'importe quel texte écrit en Franglais. Plus cette lecture est facile, moins il y a de bugs, et plus c'est rapide de les corriger.
Code:
symbol Bp_Fermeture= pinC.0          `bp fermeture
symbol Bp_Stop=pinC.1                `bp stop
symbol Bp_Ouverture=pinC.2           `bp ouverture

Symbol Enfonce =0
Symbol Relache=1

symbol motM=C.0		;moteur montée
symbol motD=C.2		;moteur descente

do 
	if Bp_Fermeture  = Enfonce then
                       
		if Bp_Stop = Enfonce then 
		
			if Bp_Ouverture = Enfonce then
				low motD
				low motM
			else
				high motD 
				pause 5000             `temporisation  ouverture  
			endif
		
		
		else
      		             low  motM
		             low  motD
		endif
	
	
      else
		high  motM   
		pause 5000       `temporisation fermeture	
      endif
      let pins = 0
	
loop
Je crois que j'ai permuté "enfonce" et "relache"; De même MotD ne correspond pas avec le commentaire : Ouverture... comme MotM de semble pas correspondre avec "Fermeture"
Je vous laisse corriger...
 
Last edited:

MGU

Senior Member
Bonjour ,

Merci MGU je vais analyser ce programme et ajouter des commentaires
j ai travaille sur le pieds a l étrier de BESQUEUT et je suis dans l impasse
le poussoir 0 commande bien la sortie B.0
le poussoir 2 commande bien la sortie B.2
mais je ne trouve pas de solution pour arrêter les tempo avec le poussoir 1
du coup un bon entretien pour mes neurones :)

bonne journee

Code:
symbol poussoir0= pinC.0                `bp fermeture
symbol poussoir1=pinC.1                `bp stop
symbol poussoir2=pinC.2                `bp ouverture


do 

if poussoir0  = 0 then        `bp fermeture sur B.0
                       
if poussoir1 = 0 then        `bp stop
		
if poussoir2 = 0 then        `bp ouverture sur sortie B.2
	low 2
	low 0
	else
	high 2 
	pause 5000             `temporisation  ouverture  
			
				
	endif
	else
      low  0
	low  2
	
	endif
      else
	high  0   
	pause 5000       `temporisation fermeture
		
	endif
	let pins = 0
	
	loop

Le problème des pauses, c'est qu'il n'est pas facile d'en sortir si on utilise pas une interruption (c'est pas dans la première leçon sur les µC).

Dans ce programme en #14, les poussoirs lancent le mouvement, ce sont les fin de courses qui l'arrête.
Le poussoir arrêt est inutile, si le volet est en mouvement, l'appui sur un des poussoirs l'arrête (sécurité en cas d'urgence).
La tempo est calculée sur le temps max d'ouverture ou fermeture pour une RAZ automatique du programme (ouverture des relais) et une sécurité en cas de non fonctionnement d'un fin de course.

Ajout: Pour améliorer "l'esthétique" de ce programme, il y aurait un déplacement de ligne à faire. Laquelle?

MM
 
Last edited:

jojo5001

New Member
Ok merci a tous que d infos intéressantes !!! Je vais relire cela
tranquillement pour faire le point mais je commence a saisir
certaines choses et encore merci du temps que vous prenez
pour moi.

bonne journee

Georges
 

jojo5001

New Member
Bonsoir ,

je viens de modifier le programme de MGU pour ajouter un bp arrêt apparemment cela fonctionne
comme je désire mais cela n a pas été sans mal .je pense avoir saisi la trame de ce programme
sauf peut être le time=0 mais je vais persévérer .Pour BESQUEUT je pense que mon programme ne
fonctionnait pas car les pauses stop le programme et du coup le passage a 1 de mon
bp ne peut être pris en compte suis je dans le vrai ?
prochaine étape le programme de MGU dans un pic et teste .merci a tous de m avoir
poussé un peu je suis heureux du résultat bien que pas grand chose ne vienne de moi :) .
je compte bien après ce circuit attaquer un projet plus audacieux et vous sollicitez encore si
votre patience n est pas a bout .


bon week end

Georges

Code:
#picaxe 08M2
symbol haut =pinC.4           ;poussoir montée                   
symbol bas =pinC.5		;poussoir descente	
symbol arret =pinC.3           ;poussoir stop

symbol motM= C.1	      ;moteur montée
symbol motD=C.2		;moteur descente

	Do 
		if haut=1  then gosub monte				
		if bas=1  then gosub desc
		if arret=1  then gosub st		
	loop
	
monte:
	do loop while haut=1	
	time=0
	do
		high motM	
	loop while haut=0 and bas=0 and arret=0 and time <15
	do loop while haut=1 OR bas=1	
	low motM
return

desc:
	do loop while bas=1
	time=0
	do
		high motD	
	loop while haut=0 and bas=0 and arret=0 and time <10
	do loop while haut=1 OR bas=1	
	low motD
	return
	
st:   do loop while arret=1
      time=0
      do
       low motD low motM
         
         loop while haut=0 and bas=0  and  time <1
		
	
return
 

dje8269

Senior Member
Bonsoir,
je pense avoir saisi la trame de ce programme sauf peut être le time=0 mais je vais persévérer
Time est le résultat de la fonction timer ; Il s'agit d'un compteur s'incrémente de 1 toutes les secondes . Donc on peut en déduire qu'il compte les secondes;
Le remettre à 0 avec time=0 , permet de refaire partir votre compteur a zéro . ainsi en marquant time <10 a 10 il acceptera la condition .

C'est une facon simple et efficace ( dans une certaine mesure quand même)
 

MGU

Senior Member
Bonsoir,

Time est le résultat de la fonction timer ; Il s'agit d'un compteur s'incrémente de 1 toutes les secondes . Donc on peut en déduire qu'il compte les secondes;
Le remettre à 0 avec time=0 , permet de refaire partir votre compteur a zéro . ainsi en marquant time <10 a 10 il acceptera la condition .

C'est une facon simple et efficace ( dans une certaine mesure quand même)
Ajouter un bp arrêt, c'est bien, mais les deux autres poussoirs le faisaient déjà.
As tu essayé la simulation ?

MM
 

PapyJP

Senior Member
51 ans...j'en ai 68, et les neurones, il faut essayer de les entretenir.
Pour le fun
PapyJP va fêter ses 78 balais dans six mois !
Il a tout connu: des ' lampes ' aux circuits intégrés contenant quelques millards de transitors.
Serais-je le doyen du site ? Wahou !
Peu importe, l'essentiel est, comme le dit MGU, d' entretenir ses neurones.
Je lis chaque jour les posts du Forum ... Hum !
> Je n'interviens pas souvent: je préfèrre l' assembleur au Basic qui est finalement plus logique: une instruction ---> une action. sans ambiguité.
Les instructions Basic du Picaxe ne sont pas claires ( celles de Texas Instrument l'étaient ) et restent ambigues.
>>> Est-ce que ... place les entrées en mode trigger de Schmidt ? est-ce que ... transmet 1,2,4,8 bits ? est-ce que ... ?
>>> J' aime aussi le hard. Mais il me semble que sur le Forum le jeu consiste à ne jamais proposer des solutions ' hard ' ( hors puissance ou multiplexage ). Dommage, c' est un complément pas cher et pourtant puissant.

Bon, allez je suis un vieux c.. qui vous souhaite en cette fin d' année ... de nombreuses années de réflexion !
Amitiés à tous
 
Last edited:

jojo5001

New Member
Bonjour tous,

Merci Dje8269 pour la précision je comprends mieux cette ligne et son importance.
MGU j ai essayé la simulation cela fonctionne , a voir sur le picaxe . Je suis pénible avec
ce bp stop mais je souhaite commander les modules par un contact sec et
cette fonction me le permet a distance, sans connaitre l état du volet
qu'en penses-tu ? PapyJP j ai perdu une belle occasion de me taire
en parlant de mon age :) la solution cd4028 et ne555
fonctionne mais le circuit se loge dans une boite d'encastrement le gain de
place avec un pic est intéressant , merci pour ton intervention qui m'incite
a bouger mes neurones !!!

bonne journée a tous
 

BESQUEUT

Senior Member
Pour BESQUEUT je pense que mon programme ne
fonctionnait pas car les pauses stop le programme et du coup le passage a 1 de mon
bp ne peut être pris en compte suis je dans le vrai ?
Tout à fait !
Et c'est pour cette raison que j'ai conseillé (une fois que ce point est compris) de regarder le programme de MGU et la façon dont il s'afranchi de ce problème.
J'aime bien votre programme #19 (avec l'aide de MGU bien évidement...) :
Code:
	Do 
		if haut=1  then gosub monte				
		if bas=1  then gosub desc
		if arret=1  then gosub Arret
	loop
Avouez que même un enfant peut comprendre.
N'hésitez pas à écrire en toutes lettres plutôt qu'en abrégé : ça prends strictement la même place en mémoire, mais "Arret" est bien plus parlant que "st".
Ce programme est simple, mais vous ferez fatalement des choses plus compliquées, alors autant prendre de bonne habitudes.

Petit problème pour "Stop" qui est un mot clé du langage et ne peut donc pas être utilisé autrement. Une astuce consiste à ajouter un caractère, par exemple "Stop_"
Toutefois, je conseille d'écrire en Franglais :
- français pour tout ce qui dépends de vous (noms des symboles et des labels de GOSUB,...)
- anglais pour ce qui dépends du compilateur (mots clés et constantes pré-définies)
C'est pour cette raison que j'ai préféré "Arret" à "Stop_"

Si pour vous "haut=1" est parlant pour "bouton_haut= Enfonce" pas de problème car c'est effectivement plus concis (inutile d'être verbeux...)

Notez cependant que suivant la connectique, la bonne formule peut-être "haut=0".
Dans ce cas, il y a une seule ligne à changer au début du programme au lieu d'avoir à chercher(et donc à rater...) toutes les occurences dans le programme.
De même on peut avoir à faire un test pour le bouton Enfoncé et un autre pour l'état Relâché.

N'oubliez pas également que lorsque vous demandez de l'aide, le lecteur n'est pas au fait de vos câblage, du type de boutons utilisé, etc... Autant lui simplifier la vie.
Et le jour où, ayant atteint l'âge du vénérable PapyJP, vous ressortirez un programme datant de vos premiers émois en BASIC, vous aprécierez de tout comprendre immédiatement bien qu'ayant oublié les subtilités du câblage de l'époque.

Une grosse différence entre le Picaxe08 et le NE555 : pour ce dernier, vous pouvez récupérer toute la doc en quelques secondes sur Internet.
Mais si vous n'y prenez garde, la maintenance de votre montage réalisé il y a quelques années avec un Picaxe peut devenir problématique si vous avez égaré le programme ou s'il s'avère incompréhensible. Rien de bien grave, mais un Picaxien averti en vaut ... au moins deux...
 
Last edited:

PieM

Senior Member
Je suis pénible avec ce bp stop mais je souhaite commander les modules par un contact sec et
cette fonction me le permet a distance, sans connaitre l état du volet
Oui mais dans tous les cas les BP sont des contacts secs. L'intérêt de la solution programmée par rapport à une solution hard est que la fonction d'un BP par exemple peut changer au cours du cycle.
Ce qu'il faut faire dans ce cas est d'avoir une led qui indique la fonction en cours, par son état, clignotant, fixe ou éteint.
Il est plus intéressant d'avoir un retour d'info quand on agit en aveugle.
 

MGU

Senior Member
Bonsoir ,

je viens de modifier le programme de MGU pour ajouter un bp arrêt apparemment cela fonctionne
comme je désire mais cela n a pas été sans mal .je pense avoir saisi la trame de ce programme
sauf peut être le time=0 mais je vais persévérer .Pour BESQUEUT je pense que mon programme ne
fonctionnait pas car les pauses stop le programme et du coup le passage a 1 de mon
bp ne peut être pris en compte suis je dans le vrai ?
prochaine étape le programme de MGU dans un pic et teste .merci a tous de m avoir
poussé un peu je suis heureux du résultat bien que pas grand chose ne vienne de moi :) .
je compte bien après ce circuit attaquer un projet plus audacieux et vous sollicitez encore si
votre patience n est pas a bout .


bon week end

Georges

Code:
#picaxe 08M2
symbol haut =pinC.4           ;poussoir montée                   
symbol bas =pinC.5		;poussoir descente	
symbol arret =pinC.3           ;poussoir stop

symbol motM= C.1	      ;moteur montée
symbol motD=C.2		;moteur descente

	Do 
		if haut=1  then gosub monte				
		if bas=1  then gosub desc
		if arret=1  then gosub st		
	loop
	
monte:
	do loop while haut=1	
	time=0
	do
		high motM	
	loop while haut=0 and bas=0 and arret=0 and time <15
	do loop while haut=1 OR bas=1	
	low motM
return

desc:
	do loop while bas=1
	time=0
	do
		high motD	
	loop while haut=0 and bas=0 and arret=0 and time <10
	do loop while haut=1 OR bas=1	
	low motD
	return
	
st:   do loop while arret=1
      time=0
      do
       low motD low motM
         
         loop while haut=0 and bas=0  and  time <1
		
	
return
J'ai aussi modifié pour introduire ce poussoir arret.
J'ai aussi ajouté des commentaires.
A vérifier par la simulation


Code:
#picaxe 08M2
symbol haut =pinC.4             ;poussoir montée                   
symbol bas =pinC.5		;poussoir descente	
symbol arret =pinC.3            ;poussoir stop

symbol motM= C.1	        ;moteur montée
symbol motD=C.2			;moteur descente

;**** boucle principale d'attente, les deux moteurs sont arrêtés (donc inutile de vouloir les arrêter ici)
	Do 
		if haut=1  then gosub monte	; test si on appuie sur le poussoir montée		
		if bas=1  then gosub desc	; test si on appuie sur le poussoir descente		
	loop
;***************************************************************************************

; sous programme montée	
monte:
	do loop while haut=1	               ;Ah, on appuie sur le poussoir monté, attente relachement du poussoir	
	high motM				       ;moteur montée sur ON
	time=0					;RAZ du compteur de temps en secondes
	do loop while haut=0 and bas=0 and arret=0 and time <15	       ;moteur ON tant que l'on appuie pas sur un poussoir et temps < 15 s
	do loop while haut=1 OR bas=1	                  ; si appui sur montée ou descente, on attend le relachement (sinon, le volet suivrait la commande et bouclerait..)	
	low motM				       ;moteur montée OFF
return                                               ;retour boucle principale, moteurs arrêtés

;********************************************************************************
;souis programme "descente"  mêmes commentaires (presque)
desc:
	do loop while bas=1
	high motD
	time=0
	do loop while haut=0 and bas=0 and arret=0 and time <10
	do loop while haut=1 OR bas=1	
	low motD
	return
 
Last edited:

BESQUEUT

Senior Member
Bien sur chacun ses gouts, et c'est déjà très bien d'avoir une explication.
Personellement, je préfère (et j'ai déjà expliqué pourquoi...) :
if Poussoir_Montee=Enfonce then gosub Monte
à
if haut=1 then gosub monte ; test si on appuie sur le poussoir montée
Mais nous sommes bien d'accord : c'est une histoire de goûts personnels, et ça ne change strictement rien ni aux performances du programme ni à l'encombrement mémoire.
 

jojo5001

New Member
Merci a vous pour vos commentaires et votre aide "pieds a l étrier"
voir même bien plus.Je vais tenir compte de vos remarques et serais impardonnable si
je n améliore pas l'ensemble .Ton programme fonctionne MGU
et en plus simple, moi qui étais tellement fier de placer un
then gosub !!!! J ai commandé le matériel je vous tiendrais
informe de la suite du projet et un grand merci pour
ces leçons .

Bon week end
 

jojo5001

New Member
Bonjour a tous ,

Je viens de programmer un picaxe et de le tester
le programme fonctionne bien merci pour votre aide
et votre patiente .
je vous souhaite de bonnes fêtes

Georges
 
Top