Temporisation

nicolas81

New Member
Bonjour a tous, premier post sur le furum et premier problème...

je suis entrain de faire une fausse bombe qui reflète la cinématique du jeux counter strike (pour ceux qui connaisse)
Je tiens a précisé quelle enclenche que des klaxon et sirène et sera utilisé pour le paintball

J'ai un petit souci de programmation, pour l'instant je suis arrivé a faire se que je veux mais ma programmation n'est pas des plus conventionnelle,
pour pouvoir faire une temporisation j'utilise une fonction de comptage qui repasse part mon entré 1 car si je fais une temporisation de 5 min je ne sais pas comment l'arrêté car mon programme reste sur la temporisation.
donc pour faire 1 min je compte 60fois 1 seconde :(
je pense qui faut une interruption mais je ne sais pas comment l'utilisé.

Voila si vous arrivé a comprendre quelque chose:

'BASIC converted from flowchart:
'D:\bombe.cad
'Converted on 05/10/2010 at 11:31:38

symbol bipeur = 0
symbol sirenedb = 1
symbol sirenefn = 2
symbol led = 3
symbol accbip = 4
symbol marche = pin1
symbol arret = pin2
symbol nb_bipeur = b0
symbol nb_sirendb = b1
symbol nb_led = b2
symbol nb_sirenfn = b3
symbol nb_accbip = b4

main:
label_D: if marche=1 then label_18
low led
let nb_bipeur = 0
low bipeur
goto label_D


label_18: high bipeur
wait 1
let nb_bipeur=nb_bipeur+ 1
if nb_bipeur= 10 then label_3C
goto label_D

label_3C: high sirenedb
wait 1
low sirenedb
wait 1
let nb_sirendb=nb_sirendb+ 1
if nb_sirendb= 3 then label_6E
goto label_3C

label_6E: high led
wait 1
let nb_led=nb_led+ 1
if nb_led= 200 then label_9A
if arret=1 then label_B8
low sirenefn
let nb_sirenfn = 0
goto label_6E

label_9A: high sirenefn
wait 1
low sirenefn
high sirenedb
wait 1
low sirenedb
let nb_sirenfn=nb_sirenfn+ 1
if nb_sirenfn= 6 then label_14D
goto label_9A

label_B8: high sirenefn
wait 1
let nb_sirenfn=nb_sirenfn+ 1
if nb_sirenfn= 5 then label_E1
goto label_6E

label_E1: pause 2000
low sirenefn
low bipeur
high sirenedb
wait 3
low sirenedb
wait 1
low led
stop

label_14D: low led
stop
Ensuite je voudrai contrôlé le temps assigné a une temporisation avec un potentiomètre, je possède le Starter pack pour PICAXE-18X qui possède des entré potentiomètre mais je suis complétement dépassé en programmation

merci
nicolas
 

Chavaquiah

Senior Member
Bonjour et bienvenu.

Il me semble que vous avez déjà choisie une bonne méthode pour interrompre la temporisation (if arret = 1 then …).

Pour utiliser un potentiomètre, voyez d’abord sur la page 27 du Manuel 3 de Picaxe comment le connecter. Après, il faut utiliser les commandes READADC ou READADC10.

Par exemple :

Code:
#picaxe 18X

SYMBOL Potentiometre = 0 'Entrée analogue 0
SYMBOL LecturePot = w3
SYMBOl Arret = pin2
SYMBOL MAXWAIT = 5000    'secondes
SYMBOL WaitTime = w2
SYMBOL Counter = w3


'....
gosub Temporisation
'....

end


Temporisation:
	READADC10 Potentiometre, LecturePot ' LecturePot = 0..1023
	WaitTime = MAXWAIT * LecturePot / 1024
	DO WHILE WaitTime > 0 AND Arret = 0
		DEC WaitTime
	LOOP
	RETURN
 

Chavaquiah

Senior Member
Désolé, mais quelquefois je suis vraiment stupide. :eek:

Je ne sais pas comment j’ai fait une telle erreur, mais le code que j'ai posté ne fonctionne pas du tout. Je venais d’écrire ailleurs une alerte sur le risque de dépasser 16 bits et je suis venu ici et j’ai commis la même erreur.

Si vous utilisez READADC10, le résultat peut atteindre 1023. En multipliant par 5000 entraînerait un résultat bien supérieur à 65535. Pas acceptable.

La formule doit être ajustée. Par exemple, définir le temps maximum d'attente en secondes.

Aussi, j'ai oublié la déclaration PAUSE.

Je m'excuse de vous induire en erreur. Le code pourrait être:
Code:
#picaxe 18X

SYMBOL Potentiometre = 0 'Entrée analogue 0
SYMBOL LecturePot = w3
SYMBOl Arret = pin2
SYMBOL MAXWAIT = 5    'secondes, ne pas dépasser 64 secondes
SYMBOL WaitTime = w2
SYMBOL Counter = w3


'....
gosub Temporisation
'....

end


Temporisation:
	READADC10 Potentiometre, LecturePot ' LecturePot = 0..1023
	WaitTime = MAXWAIT * LecturePot / 10
	DO WHILE WaitTime > 0 AND Arret = 0
		PAUSE 10
		DEC WaitTime
	LOOP
	RETURN
 
Top