montage picaxe 14m2

Rolandn

New Member
Bonjour,
Je voudrais faire un quizz avec un boitier à leds et des boutons poussoirs. Le programme en basic semble fonctionner avec le simulateur. Sur le montage, je n'ai aucune réponse sinon la led1 qui clignote. Je joins le programme et le montage des composants. Quelles sont les erreurs?
 

Attachments

PieM

Senior Member
Bonjour,
Je voudrais faire un quizz avec un boitier à leds et des boutons poussoirs. Le programme en basic semble fonctionner avec le simulateur. Sur le montage, je n'ai aucune réponse sinon la led1 qui clignote. Je joins le programme et le montage des composants. Quelles sont les erreurs?
Bonjour,
J'ignore si la simulation fonctionne, car en simulation, vous appliquez une valeur permanente à votre entrée ana, ce qui n'est pas le cas avec des BP.
En outre le schéma n'est pas bon: l'entrée ana, en l'absence d'un appui sur un BP est flottante, donc n'importe quoi peut se passer !
ajoutez une R de forte valeur (470k) entre l'entrée ana et le 0V par exemple.

Que doit faire ce quizz en pratique ?
 

MGU

Senior Member
Bonjour,

Le code en .bas oblige à ouvrir l'éditeur PE5 ou pe6, il est plus facile à lire en faisant un copier - coller entre deux balise CODE (c'est le #).
Et c'est un basic transcrit de flowchart, autant dire illisible.

Code:
#picaxe 14m2
let dirsB = %00111111
let dirsC = %00000000
main:
	b0=0:b1=0:b2=0:b3=0:b4=0:b5=0:b6=0:b7=0	'remise à zero des variables, b7=n°led
	If pinC.3=0 then main
	let outpinsB=%00000000				'attend pression sur "Départ" pour démarrer
	'low 0:low 1:low 2: low 3:low 4: low 5
	goto label_8
label_8:
	readadc 4,b6					'lecture C.4 analogique vers b6
	If pinC.2<>0 then 				'réinitialise sur pression C.2"reset"
	For b8=1 to 5
	let outpinsB=%00111111
	pause 500
	let outpinsB=%00000000
	pause 500
	'high 0:high 1:high 2:pause 500:low 0:low 1:low 2:pause 500
	next b8
	goto main
	Endif
	If b0=0 then label_1			'élimine ceux qui ont déjà joué
	If b1=0 then label_2 			'b0 à b5 labels
	If b2=0 then label_3			'b6=entrée analogique
	If b3=0 then label_4			'b7=led
	If b4=0 then label_5			'b8=boucle
	If b5=0 then label_6
	let outpinsB=%00111111
	'high 0:high 1:high 2: high 3:high 4:high 5
	goto main
	

label_1:
	If b6>=0 and b6<22 then let b0=1	'sélectionne la première réponse
	b7=b0-1
	high b7
	gosub routine
	Endif
	If b1=0 then goto label_2		'passe au joueur n°3 si n°2 a déjà joué
	If b2=0 then goto label_3		
	If b3=0 then goto label_4
	If b4=0 then goto label_5
	If b5=0 then goto label_6
	
label_2:
	If b6>=22 and b6<66 then let b1=2	'sélectionne la deuxième réponse
	b7=b1-1
	high b7
	gosub routine
	Endif
	If b2=0 then goto label_3		'passe le joueur n°3 s'il a déjà joué
	If b3=0 then goto label_4
	If b4=0 then goto label_5
	If b5=0 then goto label_6
	
label_3:
	If b6>=66 and b6< 110 then let b2=3 'sélectionne la réponse 3
	b7=b2-1
	high b7
	gosub routine
	Endif
	If b3=0 then goto label_4
	If b4=0 then goto label_5
	If b5=0 then goto label_6
	
label_4:
	If b6>=110 and b6< 154 then let b3=4 'sélectionne la réponse 4
	b7=b3-1
	high b7
	gosub routine
	Endif
	If b4=0 then goto label_5
	If b5=0 then goto label_6	

label_5:
	If b6>=154 and b6< 198 then let b4=5 'sélectionne la réponse 5
	b7=b4-1
	high b7
	gosub routine
	Endif
	If b5=0 then goto label_6

label_6:
	If b6>=198 and b6< 242 then let b5=6 'sélectionne la réponse 6
	b7=b5-1
	high b7
	gosub routine
	Endif
	goto label_7

label_7:
	If pinC.3=0 then	goto label_8	'remet en route en l'absence de réponses
	let outpinsB=%00111111
	'high 0:high 1:high 2 		
	goto main

routine:
	If pinC.3=0 then routine 		'"Départ" remet en route après mauvaise réponse
	low b7
	return
 
Last edited:

BESQUEUT

Senior Member
C'est sur que des constructions du genre :
Code:
	If b5=0 then goto label_6

label_6:
ou bien
Code:
	goto label_7

label_7:
ou encore
Code:
	goto label_8
label_8:
n'aident pas à la compréhension du code...
Accessoirement, ce serait plus lisible avec des symboles et des labels significatifs (et pas de GOTO...)
 
Last edited:

MGU

Senior Member
En y réfléchissant un peu, ce serait plus simple avec un 20M2, sans ADC

Si j'ai compris quelque chose, il y a 6 joueurs et une question.
Les joueurs pensant avoir la réponse appuient sur un poussoir, le plus rapide a la parole, désigné par une led, disons verte
Bonne réponse, il gagne, reset général
Mauvaise réponse, il est éliminé (sa led pourrait passer rouge) et les autres continuent.
Aucune bonne réponse, reset général

J'ai bon?

MM
 

BESQUEUT

Senior Member
Si j'ai compris quelque chose, il y a 6 joueurs et une question.
Les joueurs pensant avoir la réponse appuient sur un poussoir,...
Il doit manquer une subtilité :
- ou bien la bonne réponse est toujours la même, et le jeu n'a aucun intérêt...
- ou bien la réponse change à chaque question, et dans ce cas, comment le Picaxe sait-il de quelle question il s'agit ?
 

MGU

Senior Member
Il doit manquer une subtilité :
- ou bien la bonne réponse est toujours la même, et le jeu n'a aucun intérêt...
- ou bien la réponse change à chaque question, et dans ce cas, comment le Picaxe sait-il de quelle question il s'agit ?
Il doit y avoir un "Julien Lepers" (Enfin passons..) qui a la bonne réponse et deux poussoirs "Reset général" et "on continue" avec la même question.

A vérifier...

MM
 

BESQUEUT

Senior Member
Il doit y avoir un "Julien Lepers" (Enfin passons..) qui a la bonne réponse et deux poussoirs "Reset général" et "on continue" avec la même question.

A vérifier...

MM
Ah OK !!!! le Picaxe ne sait pas quelle est la bonne réponse. Il dit juste qui a appuyé sur le bouton en premier.
Il doit y avoir moyen de faire bien plus simple...
 

PieM

Senior Member
Ah OK !!!! le Picaxe ne sait pas quelle est la bonne réponse. Il dit juste qui a appuyé sur le bouton en premier.
Il doit y avoir moyen de faire bien plus simple...
Si c'est ça effectivement il y a plus simple ...
La réponse ne serait pas Stéphanie de Monaco ?

MGU said:
En y réfléchissant un peu, ce serait plus simple avec un 20M2, sans ADC
Effectivement, car je vois mal comment ont peut définir l'ordre d'appui via une mesure ana, qui laisse le risque d'une mesure faussée par l'appui simultané (à l'échelle du Picaxe) sur deux BP.
 
Last edited:

BESQUEUT

Senior Member
Si c'est ça effectivement il y a plus simple ...
La réponse ne serait pas Stéphanie de Monaco ?
C'est votre dernier choix ?


Effectivement, car je vois mal comment ont peut définir l'ordre d'appui via une mesure ana, qui laisse le risque d'une mesure faussée par l'appui simultané (à l'échelle du Picaxe) sur deux BP.
Très pertinente remarque en effet...
Cela dit, en enlevant les pauses inutiles et au besoin en mettant la fréquence au max, le risque d'ex-æquo reste faible.
Il est peut-être même possible de détecter ce cas de figure, mais comme déjà dit l'entrée ana ne peut pas rester en l'air en l'absence d'appui sur un bouton.
 
Last edited:

BESQUEUT

Senior Member
Le programme en basic semble fonctionner avec le simulateur.
Je n'ai pas encore lancé le simulateur, mais mon pifobole me dit que :
- ça doit marchoter pendant quelques fractions de secondes puis boucler quelque part (avec tous ces GOTO, pas facile de savoir où...)
- en simulation, c'est tellement lent qu'il faudrait des heures avant d'arriver à ce stade,
- et en outre, comme dit par PieM, en simulation vous fixez arbitrairement la valeur analogique alors qu'en réalité vous avez un n'importe quoi qui ne permet pas de savoir où va le programme...
 

Rolandn

New Member
Bonjour,
J'ignore si la simulation fonctionne, car en simulation, vous appliquez une valeur permanente à votre entrée ana, ce qui n'est pas le cas avec des BP.
En outre le schéma n'est pas bon: l'entrée ana, en l'absence d'un appui sur un BP est flottante, donc n'importe quoi peut se passer !
ajoutez une R de forte valeur (470k) entre l'entrée ana et le 0V par exemple.

Que doit faire ce quizz en pratique ?
Ouah! décidément ce forum m'enchante... Je suis toujours surpris que des "pro" prennent le temps de répondre à des débutants comme moi.
Je vais tenir compte des remarques de PieM et relier l'entrée ANA à la masse avec une grosse résistance.
Le risque de fausser la valeur de l'entrée ANA par l'appui simultané de deux BP m'avait effleuré.
 

Rolandn

New Member
Bonjour,
J'ignore si la simulation fonctionne, car en simulation, vous appliquez une valeur permanente à votre entrée ana, ce qui n'est pas le cas avec des BP.
En outre le schéma n'est pas bon: l'entrée ana, en l'absence d'un appui sur un BP est flottante, donc n'importe quoi peut se passer !
ajoutez une R de forte valeur (470k) entre l'entrée ana et le 0V par exemple.

Que doit faire ce quizz en pratique ?
Ouah! décidément ce forum m'enchante... Je suis toujours surpris que des "pro" prennent le temps de répondre à des débutants comme moi.
Je vais tenir compte des remarques de PieM et relier l'entrée ANA à la masse avec une grosse résistance.
Le risque de fausser la valeur de l'entrée ANA par l'appui simultané de deux BP m'avait effleuré.
MGU a bien expliqué ce que je voudrais faire:
Les joueurs pensant avoir la réponse appuient sur un poussoir, le plus rapide a la parole, désigné par une led, disons verte
Bonne réponse, il gagne, reset général
Mauvaise réponse, il est éliminé (sa led pourrait passer rouge-ça j'ai pas prévu car chaque joueur a une couleur de led correspondant à la couleur du BP) et les autres continuent. Pour donner le temps de la réponse, j'ai fait une boucle dans "routine" avec un BP "on continue" en cas de mauvaise réponse (on m'a dit de pas dire Hardy!!-réponse à Besqueut)
Aucune bonne réponse, reset général.
C'est vrai que (comme c'est mon premier programme) j'ai copié sur le basic de logicator et que "label_1" n'est pas très explicite.
Je vais acheter un 20M2 si cela est plus simple.
Merci à vous tous
 

PieM

Senior Member
MGU a bien expliqué ce que je voudrais faire:
Les joueurs pensant avoir la réponse appuient sur un poussoir, le plus rapide a la parole, désigné par une led, disons verte
Bonne réponse, il gagne, reset général
Michel est un pro du Quizz !

Mauvaise réponse, il est éliminé
Un relais en sortie avec du 400V ?

Je pense comme l'ami Besqueut que la simulation ne sera jamais révélatrice du fonctionnement réel. Faut vite passer sur un petit proto.
Et si ça ne marche pas, on va faire en sorte que ça marche....
 

BESQUEUT

Senior Member
Le programme en basic semble fonctionner avec le simulateur. Sur le montage, je n'ai aucune réponse sinon la led1 qui clignote.
Voici le même programme avec quelques changements de présentation pour tenter d'y voir plus clair.
Code:
#picaxe 14m2
let dirsB = %00111111
let dirsC = %00000000
main:
	b0=0:b1=0:b2=0:b3=0:b4=0:b5=0:b6=0:b7=0	'remise à zero des variables, b7=n°led

	do
	loop until pinC.3=1				'attend pression sur "Départ" pour démarrer
	let outpinsB=%00000000

label_8:
	readadc 4,b6					'lecture C.4 analogique vers b6
	If pinC.2<>0 then 				'réinitialise sur pression C.2 "reset"
		For b8=1 to 5
			let outpinsB=%00111111
			pause 500
			let outpinsB=%00000000
			pause 500
		next b8
		
	Else
		If b0=0 then label_1			'élimine ceux qui ont déjà joué
		If b1=0 then label_2 			'b0 à b5 labels
		If b2=0 then label_3			'b6=entrée analogique
		If b3=0 then label_4			'b7=led
		If b4=0 then label_5			'b8=boucle
		If b5=0 then label_6
		let outpinsB=%00111111
	endif
	goto main
	

label_1:
	If b6>=0 and b6<22 then 
		b0=1	'sélectionne la première réponse
		b7=b0-1
		high b7
		gosub routine
	Endif
	If b1=0 then goto label_2		'passe au joueur n°3 si n°2 a déjà joué
	If b2=0 then goto label_3		
	If b3=0 then goto label_4
	If b4=0 then goto label_5
	If b5=0 then goto label_6
	
label_2:
	If b6>=22 and b6<66 then
		b1=2	'sélectionne la deuxième réponse
		b7=b1-1
		high b7
		gosub routine
	Endif
	If b2=0 then goto label_3		'passe le joueur n°3 s'il a déjà joué
	If b3=0 then goto label_4
	If b4=0 then goto label_5
	If b5=0 then goto label_6
	
label_3:
	If b6>=66 and b6< 110 then
		b2=3 'sélectionne la réponse 3
		b7=b2-1
		high b7
		gosub routine
	Endif
	If b3=0 then goto label_4
	If b4=0 then goto label_5
	If b5=0 then goto label_6
	
label_4:
	If b6>=110 and b6< 154 then
		b3=4 'sélectionne la réponse 4
		b7=b3-1
		high b7
		gosub routine
	Endif
	If b4=0 then goto label_5
	If b5=0 then goto label_6	

label_5:
	If b6>=154 and b6< 198 then
		b4=5 'sélectionne la réponse 5
		b7=b4-1
		high b7
		gosub routine
	Endif
	If b5=0 then goto label_6


label_6:
	If b6>=198 and b6< 242 then
		b5=6 'sélectionne la réponse 6
		b7=b5-1
		high b7
		gosub routine
	Endif


label_7:
	If pinC.3=0 then	goto label_8	'remet en route en l'absence de réponses
	let outpinsB=%00111111		
	goto main

routine:
	do
	loop until pinC.3=1				'"Départ" remet en route après mauvaise réponse		
	low b7
	return
Je n'ai pas encore compris la logique du programme, et en particulier pourquoi seule la led1 clignote, mais j'ai des interrogations :
- en l'absence d'appui sur un bouton, il me semble que le programme devrait passer en revue (sans succès) tous les tests,
jusqu'à label_7 où il allume toutes les LEDs puis revient à main qui efface tout, puis attends un nouveau départ,

- ce programme suppose qu'en l'absence de bouton enfoncé, le readadc donne une valeur supérieure à 242. Avez-vous vérifié que c'est bien le cas ?
 
Last edited:

BESQUEUT

Senior Member
En partant d'un page blanche, j'aurais écrit un truc du genre :
Code:
#picaxe 14m2

symbol lesJoueurs=b0	' chaque bit représente un joueur
symbol Elimine=b1		' variable temporaire pour savoir si un joueur est elimine
symbol I=b2
symbol Clignotant=b3	' Compteur pour faire clignoter les LEDs
symbol Tempo1=10		' Nombre de boucles pour faire clignoter les LEDs
symbol Tempo2=20		' a ajouster pour obtenir un clignotement adéquat
symbol lesLEDs =b5
symbol Volts= b6
symbol LeBouton=b7	' le bouton qui a été enfoncé, on zéro si aucun bouton enfoncé

let dirsB = %00111111
let dirsC = %00000000


do
loop until pinC.3=1				'attend pression sur "Départ" pour démarrer
outpinsB=%00000000



do
	readadc 4,Volts					'lecture C.4 analogique vers b6
	leBouton=Volts/2+11/22
	if leBouton>0 then
'		lesLEDs=DCD leBouton
		gosub _DCD
		Elimine=lesLEDs and lesjoueurs
		if Elimine=0 then
			outpinsB=lesLEDs
			lesJoueurs=lesJoueurs OR lesLEDs	' on coche le joueur qui a tenté sa chance
			gosub Verdict
		endif
	endif

	inc Clignotant			' Ce module fait clignoter les joueurs éliminés
	if Clignotant= Tempo1 then
		outpinsB=lesJoueurs
	elseif Clignotant>Tempo2 then
		outpinsB=0
		Clignotant=0
	endif
loop


Verdict:
	do
		if pinC.3=1 then		' remet en route après mauvaise réponse
			exit
			
		elseif [B][COLOR="#FF0000"]pinC.1[/COLOR][/B]=1 then	' c'est gagné ! on repart au début
			lesJoueurs=0
			outpinsB=%00000000
			exit
		endif
	loop
	return
	
	
_DCD:		' DCD n'étant pas disponible sur un M2, on le simule
	lesLEDs=1
	for i=2 to leBouton
		lesLEDs=lesLEDs*2
	next i
	return
Pas sur que ça donne le résultat escompté, mais c'est à mon humble avis plus lisible.
En outre, il y a un bout de code pour faire clignoter les joueurs éliminés. On peut aussi utiliser ça pour allumer "un peu" la led des joueurs éliminés.
Le calcul du numéro de bouton suppose que la résistance PieM est en place, donc qu'en l'absence de pression sur un bouton la valeur lue par readADC est inférieure à 22.

Il n'est pas possible de détecter l'appui "simultané" de 2 touches avec ce pont diviseur. Par exemple, l'appui simultané sur 1 et 5 laisse une résistance de chaque coté, donc la tension est de 2.5V exactement comme avec appui sur la seule touche 3 (qui laisse 3 résistances de chaque coté). D'autre part, l'appui sur la touche 6 donne toujours 5V, même si une autre touche est pressée en même temps. Il me semble que la seule solution avec ce montage est de faire des readadc suffisamment vite pour que le Picaxe puisse séparer les 2 événements.
A la fréquence de base,, avec ce programme, on devrait pouvoir séparer deux joueurs qui on appuyé avec plus d'un centième de seconde d'écart. ce n'est déjà pas si mal. Avec setfreq m32, on se rapproche des millièmes.

Notez qu'avec un Picaxe permettant d'affecter une broche à chaque touche, il sera possible de détecter des ex-aequo, mais il ne sera pas plus possible de désigner un gagnant.


Si on imagine 6 ponts diviseurs avec en commun 1k vers le 5V
et les résistances suivantes en série avec chaque touche vers la masse : 22k, 10k, 4k7, 2k2, 1k et 470
J'obtiens (sauf erreur) les tensions suivantes :
Code:
Touches	Volts	ReadADC	ReadADC10
5+6	1,21	61	247
4+6	1,40	71	286
3+6	1,50	76	307
2+6	1,55	79	317
1+6	1,58	80	323
6	1,60	81	327
4+5	2,04	104	417
3+5	2,26	115	462
2+5	2,38	121	487
1+5	2,44	124	499
5	2,50	127	512
3+4	3,00	153	614
2+4	3,22	164	659
1+4	3,33	169	681
4	3,44	175	704
2+3	3,81	194	780
1+3	3,97	202	813
3	4,12	210	843
1+2	4,37	222	894
2	4,55	232	931
1	4,78	243	978
Pas jouable avec readADC mais possible avec readADC10.
Il y a probablement des combinaisons de résistances plus pertinentes : à votre bon c&#339;ur...
 
Last edited:

BESQUEUT

Senior Member
La nuit ayant porté conseil, voici une façon plus performante de remplacer DCD.
Du coup, la séparation des ex-æquo devrait être plus performante.
J'ai aussi ajouté un test pour le cas où tous les joueurs sont éliminés.
Accessoirement, il me semble plus convivial de faire clignoter les joueurs restants en lice, plutôt que ceux éliminés.
Code:
[color=Navy]#picaxe [/color][color=Black]14m2[/color]

[color=Blue]symbol [/color][color=Black]lesJoueurs[/color][color=DarkCyan]=[/color][color=Purple]b0    [/color][color=Green]' chaque bit repr?sente un joueur[/color]
[color=Blue]symbol [/color][color=Black]Elimine[/color][color=DarkCyan]=[/color][color=Purple]b1       [/color][color=Green]' variable temporaire pour savoir si un joueur est elimine[/color]
[color=Blue]symbol [/color][color=Black]I[/color][color=DarkCyan]=[/color][color=Purple]b2[/color]
[color=Blue]symbol [/color][color=Black]Clignotant[/color][color=DarkCyan]=[/color][color=Purple]b3    [/color][color=Green]' Compteur pour faire clignoter les LEDs[/color]
[color=Blue]symbol [/color][color=Black]Tempo1[/color][color=DarkCyan]=[/color][color=Navy]10        [/color][color=Green]' Nombre de boucles pour faire clignoter les LEDs[/color]
[color=Blue]symbol [/color][color=Black]Tempo2[/color][color=DarkCyan]=[/color][color=Navy]20        [/color][color=Green]' a ajouster pour obtenir un clignotement ad?quat[/color]
[color=Blue]symbol [/color][color=Black]lesLEDs [/color][color=DarkCyan]=[/color][color=Purple]b5[/color]
[color=Blue]symbol [/color][color=Black]Volts[/color][color=DarkCyan]= [/color][color=Purple]b6[/color]
[color=Blue]symbol [/color][color=Black]LeBouton[/color][color=DarkCyan]=[/color][color=Purple]b7      [/color][color=Green]' le bouton qui a ?t? enfonc?, on z?ro si aucun bouton enfonce[/color]

[color=Blue]table ([/color][color=Navy]0[/color][color=Black],[/color][color=Navy]1[/color][color=Black],[/color][color=Navy]2[/color][color=Black],[/color][color=Navy]4[/color][color=Black],[/color][color=Navy]8[/color][color=Black],[/color][color=Navy]16[/color][color=Black],[/color][color=Navy]32[/color][color=Black],[/color][color=Navy]64[/color][color=Black],[/color][color=Navy]128[/color][color=Blue])

let [/color][color=Purple]dirsB [/color][color=DarkCyan]= [/color][color=Navy]%00111111[/color]
[color=Blue]let [/color][color=Purple]dirsC [/color][color=DarkCyan]= [/color][color=Navy]%00000000[/color]


[color=Blue]do
loop until [/color][color=Purple]pinC.3[/color][color=DarkCyan]=[/color][color=Navy]1                       [/color][color=Green]'attend pression sur "D?part" pour d?marrer[/color]
[color=Purple]outpinsB[/color][color=DarkCyan]=[/color][color=Navy]%00000000[/color]



[color=Blue]do
      readadc [/color][color=Navy]4[/color][color=Black],Volts                           [/color][color=Green]'lecture C.4 analogique vers b6
      [/color][color=Black]leBouton[/color][color=DarkCyan]=[/color][color=Black]Volts[/color][color=DarkCyan]/[/color][color=Navy]2[/color][color=DarkCyan]+[/color][color=Navy]11[/color][color=DarkCyan]/[/color][color=Navy]22
      [/color][color=Blue]if [/color][color=Black]leBouton[/color][color=DarkCyan]>[/color][color=Navy]0 [/color][color=Blue]then[/color]
[color=Green]'           lesLEDs=DCD leBouton
            [/color][color=Blue]readtable [/color][color=Black]leBouton, lesLEDs         [/color][color=Green]' DCD n'etant pas disponible sur un M2, on le simule
            [/color][color=Black]Elimine[/color][color=DarkCyan]=[/color][color=Black]lesLEDs [/color][color=DarkCyan]and [/color][color=Black]lesjoueurs
            [/color][color=Blue]if [/color][color=Black]Elimine[/color][color=DarkCyan]=[/color][color=Navy]0 [/color][color=Blue]then
                  [/color][color=Purple]outpinsB[/color][color=DarkCyan]=[/color][color=Black]lesLEDs
                  lesJoueurs[/color][color=DarkCyan]=[/color][color=Black]lesJoueurs [/color][color=DarkCyan]OR [/color][color=Black]lesLEDs    [/color][color=Green]' on coche le joueur qui a tente sa chance
                  [/color][color=Blue]gosub [/color][color=Black]Verdict
            [/color][color=Blue]endif
      endif

      inc [/color][color=Black]Clignotant                [/color][color=Green]' Ce module fait clignoter les joueurs restants en jeu
      [/color][color=Blue]if [/color][color=Black]Clignotant[/color][color=DarkCyan]= [/color][color=Black]Tempo1 [/color][color=Blue]then
            [/color][color=Purple]outpinsB[/color][color=DarkCyan]=NOT [/color][color=Black]lesJoueurs
      [/color][color=Blue]elseif [/color][color=Black]Clignotant[/color][color=DarkCyan]>[/color][color=Black]Tempo2 [/color][color=Blue]then
            [/color][color=Purple]outpinsB[/color][color=DarkCyan]=[/color][color=Navy]0
            [/color][color=Black]Clignotant[/color][color=DarkCyan]=[/color][color=Navy]0
      [/color][color=Blue]endif
loop[/color]


[color=Black]Verdict:
      [/color][color=Blue]do
            if [/color][color=red][B]pinC.1[/B][/color][color=DarkCyan]=[/color][color=Navy]1 [/color][color=Blue]then  [/color][color=Green]' c'est gagne ! on repart au debut
                  [/color][color=Black]lesJoueurs[/color][color=DarkCyan]=[/color][color=Navy]0
                  [/color][color=Purple]outpinsB[/color][color=DarkCyan]=[/color][color=Navy]%00000000
                  [/color][color=Blue]exit
                  
            elseif [/color][color=Purple]pinC.3[/color][color=DarkCyan]=[/color][color=Navy]1 [/color][color=Blue]then          [/color][color=Green]' remet en route apres mauvaise reponse
                  [/color][color=Blue]if [/color][color=Black]lesJoueurs[/color][color=DarkCyan]=[/color][color=Navy]%00111111 [/color][color=Blue]then [/color][color=Green]' Mais il ne reste plus de joueurs !
                        [/color][color=Black]lesJoueurs[/color][color=DarkCyan]=[/color][color=Navy]0
                        [/color][color=Purple]outpinsB[/color][color=DarkCyan]=[/color][color=Navy]%00000000
                  [/color][color=Blue]endif
                  exit
            endif
      loop
return[/color]
 
Last edited:

PieM

Senior Member
La nuit ayant porté conseil, voici une façon plus performante de remplacer DCD.
Du coup, la séparation des ex-æquo devrait être plus performante.
J'ai aussi ajouté un test pour le cas où tous les joueurs sont éliminés.
Accessoirement, il me semble plus convivial de faire clignoter les joueurs restants en lice, plutôt que ceux éliminés.
Code:
[/QUOTE]

Bonjour,
Y a un truc que je ne comprends pas: dans ce jeu il faut bien classer les joueurs dans l'ordre dans lequel ils ont appuyé sur le BP et savoir ainsi dans quel ordre les interroger dans le cas de mauvaises réponses successives.
Me gourre-je ?
 

BESQUEUT

Senior Member
Bonjour,
Y a un truc que je ne comprends pas: dans ce jeu il faut bien classer les joueurs dans l'ordre dans lequel ils ont appuyé sur le BP et savoir ainsi dans quel ordre les interroger dans le cas de mauvaises réponses successives.
Me gourre-je ?
Au vu de ce que j'ai compris du programme initial (mais je n'ai pas tout compris) je n'ai pas l'impression que ça le fasse...
A priori, on ne désigne que le premier et Julien Lepers donne son verdict :
- soit c'est gagné,
- soit le joueur est éliminé, et on repart pour une nouvelle course à celui qui appuie le plus vite.

Si tel était le cas, il faudrait soit attendre que tout le monde ait enfoncé son bouton, soit donner un temps limite pour appuyer, auquel cas certains candidats peuvent ne pas donner leur réponse.
Il faut aussi donner un moyen d'interroger successivement les candidats dans le bon ordre, donc à priori une touche "joueur suivant" en plus de "gagné" et "on rejoue".
 

PieM

Senior Member
Au vu de ce que j'ai compris du programme initial (mais je n'ai pas tout compris) je n'ai pas l'impression que ça le fasse...
A priori, on ne désigne que le premier et Julien Lepers donne son verdict :
- soit c'est gagné,
- soit le joueur est éliminé, et on repart pour une nouvelle course à celui qui appuie le plus vite.

Si tel était le cas, il faudrait soit attendre que tout le monde ait enfoncé son bouton, soit donner un temps limite pour appuyer, auquel cas certains candidats peuvent ne pas donner leur réponse.
Il faut aussi donner un moyen d'interroger successivement les candidats dans le bon ordre, donc à priori une touche "joueur suivant" en plus de "gagné" et "on rejoue".
Ben oui; sinon un joueur qui a la bonne réponse ne peut pas gagner si quelqu'un tape plus vite avec une mauvaise réponse...
et c'est une seule réponse, bonne ou mauvaise, par question; pas économique!
M'enfin suis pas un pro du truc .... Je ne connais que Stéphanie de Monaco :)

Plus compliqué, donc plus intéressant....
 

BESQUEUT

Senior Member
Ben oui; sinon un joueur qui a la bonne réponse ne peut pas gagner si quelqu'un tape plus vite avec une mauvaise réponse...
et c'est une seule réponse, bonne ou mauvaise, par question; pas économique!
M'enfin suis pas un pro du truc .... Je ne connais que Stéphanie de Monaco :)
On ne s'est pas compris :
- soit le joueur est éliminé, et on repart pour une nouvelle course à celui qui appuie le plus vite pour la même question.
Plus compliqué, donc plus intéressant....
Au lieu de sortir de la boucle principale dès qu'une touche a été enfoncée, il faut y rester tant que le temps limite n'a pas été atteint ou que tous les joueurs aient appuyés.
Dans la boucle, à chaque nouvelle détection de bouton, il faut mémoriser l'impétrant.

Mais pour le coup, il y aura forcément plusieurs boutons enfoncés en même temps. Si ce cahier des charges est retenu, c'est ce problème qu'il faut résoudre en premier !
En passant les boutons dédiés à Julien Lepers sur une seule entrée ANA, on libère une patte. On pourrait donc diviser les 6 boutons en deux séries de 3, ce qui permet de discriminer facilement les appuis simultanés.
 
Last edited:

PieM

Senior Member
On ne s'est pas compris :
- soit le joueur est éliminé, et on repart pour une nouvelle course à celui qui appuie le plus vite pour la même question.
Donc il suffit que les joueurs laissent le doigt sur leur BP en attendant le start de Julien ...
Il est vrai que la complication entraînerait à coup sûr l'utilisation d'entrées affectées à chaque joueur, et mises sur interruptions. Ce qui pour 6 joueurs suppose un 28X2.

une condition OR sur les entrées
on génère une interruption
on mémorise le byte état des entrées
on inverse ce byte qui sert de masque pour l'interruption suivante.
on mémorise et élimine ainsi entrée après entrée dans l'ordre d'apparition.
 
Last edited:

BESQUEUT

Senior Member
Donc il suffit que les joueurs laissent le doigt sur leur BP en attendant le start de Julien ...
Bonne remarque : il faut détecter ça et trouver un moyen de dénoncer le tricheur...
Il est vrai que la complication entraînerait à coup sûr l'utilisation d'entrées affectées à chaque joueur, et mises sur interruptions. Ce qui pour 6 joueurs suppose un 28X2.
Comme indiqué, on peut facilement discriminer toutes les combinaisons de 3 touches sur une entrée ana. Lire deux entrées ana dans la boucle principale ne me semble pas monstrueux. De toutes façons, même une erreur de chronométrage de quelques centièmes de secondes est indétectable par les joueurs.

Mais c'est bien vrai que l'ère du temps est plus d'écrire des programme m....iques et de compenser avec des processeurs plus puissants que de consommer du temps de cerveau... Ceci est une remarque générale : je ne voudrais offenser qui que ce soit bien évidement.
 

Rolandn

New Member
Bonne remarque : il faut détecter ça et trouver un moyen de dénoncer le tricheur...

Comme indiqué, on peut facilement discriminer toutes les combinaisons de 3 touches sur une entrée ana. Lire deux entrées ana dans la boucle principale ne me semble pas monstrueux. De toutes façons, même une erreur de chronométrage de quelques centièmes de secondes est indétectable par les joueurs.

Mais c'est bien vrai que l'ère du temps est plus d'écrire des programme m....iques et de compenser avec des processeurs plus puissants que de consommer du temps de cerveau... Ceci est une remarque générale : je ne voudrais offenser qui que ce soit bien évidement.
Dans quoi me suis embarqué?! Laissez-moi le temps de comprendre les modifications et le programme de Besqueut. La mise à la masse de l'entrée ANA n'a rien changé, mais reste une bonne décision.
A bientôt
Rd
 

PieM

Senior Member
Bonne remarque : il faut détecter ça et trouver un moyen de dénoncer le tricheur...
Il faudrait lire en permanence l'état des entrées et n'autoriser le start que si tout est à 0 et le signaler à tout le monde.
Ce qui n'empêche pas un joueur de faire du morse avec son BP...

On est un peu dans les conditions d'un départ de sprint !
Le jeu consistant à trouver une bonne réponse, puis à démarrer le plus vite possible après une mauvaise réponse d'un concurent...
Mais c'est bien vrai que l'ère du temps est plus d'écrire des programme m....iques et de compenser avec des processeurs plus puissants que de consommer du temps de cerveau...
Pas tout compris le rapport! Si l'objectif est de discriminer des entrées multiples aléatoires avec un maximum de rapidité, la solution des interruptions me semble une approche pas totalement idiote.
Et pour disposer de 6 entrées, le 28X2 est le minimum en Picaxe.

Mais ne connaissant pas la règle du jeu voulu, ce type de fonctionnement ne correspond peut être pas à ce que souhaite Rolandn...

Rolandn said:
La mise à la masse de l'entrée ANA n'a rien changé, mais reste une bonne décision.
Afin de ne pas rester sur des suppositions, il serait bien d'expliciter totalement le déroulement que vous souhaitez: entre autre, que se passe t-il après une mauvaise réponse du joueur le plus rapide.
Une question: qu'est ce qui est relié à la broche C.5 ? merci de mettre le schéma complet
 

MGU

Senior Member
Bonne remarque : il faut détecter ça et trouver un moyen de dénoncer le tricheur...

.
Bonjour,

Belle tempête de neurones...

Pour les "tricheurs", il suffirait de ne valider la relance de Julien que lorsque aucun poussoir n'est appuyé.

Faut pas non plus faire peur à l'ami Rolandn, et le persuader qu'il est plus facile de faire du basic que du flowchart.

L'étape suivante sera un affichage des points (0 à 9) pour chaque joueur. Et pour corser un peu, une bonne réponse=+1, une mauvaise=-1, trop simple de dire n'importe quoi...

MM
 

BESQUEUT

Senior Member
Laissez-moi le temps de comprendre les modifications et le programme de Besqueut.
Je reste à votre disposition pour fournir toutes les explications utiles.
Ne pas tenir compte de #17. Ma dernière version est #18.
 
Last edited:

Rolandn

New Member
M. BESQUEUT
Savez-vous à quoi vous vous engagez?
J'ai essayé de comprendre votre programme et j'ai beaucoup d'interrogations.
1-Sur votre tableau "code/touches/volts/ADC"
a- Avez-vous calculé avec les résistances 1k(côté+),22k,10k,4k7,2k2,1k,470?
b- Comment calculer sur appui simultané de deux touches?
c- Quest-ce que ADC10?
2-Sur le programme 18#
a- Je ne comprends pas le calcul "Volt/2+11/22", le picaxe respecte-t-il les priorités opérationnelles?
b- A quoi sert et comment utiliser la table?
c- Qu'est-ce que le DCD?
... et j'aurai d'autres questions, mais ce serait abuser. Commencer à apprendre qqchose, c'est s'ouvrir à une multitude de questions (quelqu'un a dit, en mieux, qqchose de ce genre).
Pour MGU, je vois bien que le Basic n'est pas simple mais il ouvre des possibilités qu'on n'a pas avec un programme graphique.
 

BESQUEUT

Senior Member
M. BESQUEUT
Savez-vous à quoi vous vous engagez?
Ben... en fait NON... je dois être un peu :p ...
J'ai essayé de comprendre votre programme et j'ai beaucoup d'interrogations.
C'était un peu le but...
1-Sur votre tableau "code/touches/volts/ADC"
a- Avez-vous calculé avec les résistances 1k(côté+),22k,10k,4k7,2k2,1k,470?
OUI (sauf erreur de ma part)
b- Comment calculer sur appui simultané de deux touches?
1/R=1/R1+1/R2
c- Quest-ce que ADC10?
Voir BASIC-Commands/Analogue-InputOutput/readadc10/
C'est exactement la même chose que ReadADC, mais le résultat est sur un word et va de 0 à 1023 au lieu de 0==> 255. Du coup, il est possible de séparer des valeurs proches.
Si on va vers un programme capable de classer l'ordre d'appui des joueurs (et donc pas seulement le premier) ce ne sera pas suffisant, car il peut y avoir des tas de touches enfoncées en même temps. J'ai la solution, mais ne mettons pas la charrue avant les b&#339;ufs...
2-Sur le programme 18#
a- Je ne comprends pas le calcul "Volt/2+11/22", le picaxe respecte-t-il les priorités opérationnelles?
C'est équivalent à Volt/44+22. (je ne voulais pas dépasser 255 dans le calcul intermédiaire, mas à la réflexion, je pense que cette limitation n'existe pas même quand on calcule sur un byte)
Ca remplace toute la série des " if Volt > seuil1 and Volt < seuil2"
Vous pouvez vérifier avec différentes valeurs de Volt que le résultat est un nombre entre 0 et 6 correspondant soit à l'absence de touche enfoncée (zéro), soit au numéro de la touche enfoncée.
"Priorités opérationnelles" ? Je ne comprends pas la question. A une tension donnée correspond une ou plusieurs touches. L'ordre d'appui des touches ne peut être déduit d'une unique tension.
c- Qu'est-ce que le DCD?
Voir BASIC-Commands/Variables/let/ et chercher DCD.
En gros, on lui donne un nombre N entre 0 et 7 et il renvoie un nombre dont seul le bit d'ordre N est à 1
Les joueurs sont codifiés chacun sur un seul bit, dans la variable lesJoueurs.
Du coup, il est facile de tester si un joueur est éliminé, ou si tous ont tenté leur chance.
Il est également facile de faire clignoter la led d'un joueur puisque la variable lesJoueurs correspond bit à bit avec Outpins
b- A quoi sert et comment utiliser la table?
Pas de chance : DCD n'est pas disponible sur un M2 !
Qu'à cela ne tienne : on va le "fabriquer"...
Après une première tentative via un GOSUB, je me suis dit que comme il n'y a que 8 résultats possibles, il est facile de tabuler ces 8 solutions. Voir BASIC-Commands/Variables/table/
Notez que %00000001=1
%00000010=2
%00000100=4
etc...
Mais comme je suis très flemmard, je n'ai pas pris la peine de taper les nombres en base 2...
... et j'aurai d'autres questions, mais ce serait abuser.
que nenni...
Commencer à apprendre qqchose, c'est s'ouvrir à une multitude de questions (quelqu'un a dit, en mieux, qqchose de ce genre).
Pour MGU, je vois bien que le Basic n'est pas simple mais il ouvre des possibilités qu'on n'a pas avec un programme graphique.
Le BASIC (en tout cas celui du Picaxe...) est un langage vraiment simple, accessible à un débutant.
La conceptualisation d'un cahier des charges pouvant paraître simple nécessite un peu de réflexion.
Si cette réflexion est correctement menée, le BASIC du Picaxe propose la plupart du temps une solution simple.
Accessoirement, un code simple est plus facile à maintenir, y compris par des personnes tierces.
A bientôt pour de nouvelles aventures questions...

D'un point de vue général, n'hésitez pas à écrire des petits bouts de code de quelques lignes dans le simulateur, juste pour tester une nouvelle commande. Utilisez sertxd pour voir le résultat.
Sertxd est également très pratique pour débugger un programme. Exemple :
Code:
[color=Blue]table ([/color][color=Navy]0[/color][color=Black],[/color][color=Navy]1[/color][color=Black],[/color][color=Navy]2[/color][color=Black],[/color][color=Navy]4[/color][color=Black],[/color][color=Navy]8[/color][color=Black],[/color][color=Navy]16[/color][color=Black],[/color][color=Navy]32[/color][color=Black],[/color][color=Navy]64[/color][color=Black],[/color][color=Navy]128[/color][color=Blue])

readtable [/color][color=Navy]6[/color][color=Black],[/color][color=Purple]b1[/color]

[color=Blue]sertxd ([/color][color=Red]"b1="[/color][color=Black],#[/color][color=Purple]b1[/color][color=Black],[/color][color=Navy]13[/color][color=Black],[/color][color=Navy]10[/color][color=Blue])[/color]
Notez également que PE6 vous donne la possibilité de voir toutes vos variables suivant différentes représentations, y compris bit par bit, ce qui est commode dans cet exemple pour vérifier quel bit de b1 a été mis à 1.
 
Last edited:

PieM

Senior Member
Amusant de voir qu'on en est à faire un programme sans connaître finalement la règle souhaitée du jeu ...
d'autre part, je persiste : merci de (re?) lire #26...
Car si le montage réel correspond au schéma, il est normal que le programme initial ne fonctionne pas!
 

jojojo

Senior Member
leBouton=Volts/2+11/22

Tain ! Suis sûrement un peu neu neu, mais, je trouve ça génial ! Merci, Besqueut.
Voila un truc qui va bien me servir. Bien mieux que les "if then" ou autres "case".

Georges.
 

Rolandn

New Member
Amusant de voir qu'on en est à faire un programme sans connaître finalement la règle souhaitée du jeu ...
d'autre part, je persiste : merci de (re?) lire #26...
Car si le montage réel correspond au schéma, il est normal que le programme initial ne fonctionne pas!
Bon je vais essayer d'être plus clair pour la règle du jeu.
Je (ou Julien Lepers) pose une question aux six joueurs qui ont chacun un bouton poussoir. Le premier qui appuie doit donner la réponse. Pendant ce temps les autres BP sont bloqués le temps de donner la réponse. J'avais prévu une entrée C.3 pour remettre en route après la réponse. (Besqueut si j'ai bien compris a prévu une temporisation...)
Si la réponse est juste, je remets tout à zéro (reset) et on continue avec une autre question. Les scores des uns et des autres ne sont pas prévus par le programme.
Si la réponse est fausse, le programme attend l'appui des autres joueurs (sur la même question) tout en éliminant celui qui a déjà donné une mauvaise réponse. Et ainsi de suite jusqu'à ce que tous les joueurs aient tenté leur chance. Dans ce cas "reset" et nouvelle question.
S'il reste des joueurs qui n'ont pas donné de réponse et qu'ils n'en donneront pas (les nuls!) je remets tout à zéro "reset" au bout d'un certain temps.

Pour le montage, il correspond au schéma (ne pas tenir compte des liaisons qui ne se touchent pas, mon logiciel dessin n'est pas terrible). J'ai rajouté une résistance vers le - sur la patte C.4. Je n'ai rien mis sur C.1 et C.2. Il ne faut peut-être pas les laisser libres. Pourquoi, le montage ne peut-il fonctionner ainsi (hors programme inadapté)?
 

BESQUEUT

Senior Member
Bon je vais essayer d'être plus clair pour la règle du jeu.
Je (ou Julien Lepers) pose une question aux six joueurs qui ont chacun un bouton poussoir. Le premier qui appuie doit donner la réponse. Pendant ce temps les autres BP sont bloqués le temps de donner la réponse. J'avais prévu une entrée C.3 pour remettre en route après la réponse. (Besqueut si j'ai bien compris a prévu une temporisation...)
Si la réponse est juste, je remets tout à zéro (reset) et on continue avec une autre question. Les scores des uns et des autres ne sont pas prévus par le programme.
Le programme #18 est censé fonctionner sur cette règle du jeu, sauf que je me suis gouré : la touche RESET est bien évidement C.1 (et non C.4) comme dans la version publiée jusqu'à aujourd'hui.
A noter que dans le programme #1, il ne me semble pas avoir vu la touche C.1=RESET...

Dans le programme #18, la temporisation sert uniquement à faire clignoter les LEDs des joueurs encore en lice. Comme je suis très flemmard, je n'ai pas fait le montage. Donc je n'ai pas du tout testé le programme. Il faudra régler les temporisations en fonction du résultat visuel recherché (et de la vitesse du Picaxe réglée avec Setfreq).

Si la réponse est fausse, le programme attend l'appui des autres joueurs (sur la même question) tout en éliminant celui qui a déjà donné une mauvaise réponse. Et ainsi de suite jusqu'à ce que tous les joueurs aient tenté leur chance. Dans ce cas "reset" et nouvelle question.
S'il reste des joueurs qui n'ont pas donné de réponse et qu'ils n'en donneront pas (les nuls!) je remets tout à zéro "reset" au bout d'un certain temps.
Le programme #18 ne dispose pas d'une telle temporisation. C'est à Julien Lepers de décider après chaque appui s'il relance la partie avec les joueurs restants ou si on réinitialise avec tous les joueurs, sauf si tous les joueurs ont tenté leur chance, auquel cas, l'appui sur un des deux boutons donne le même résultat : réinitialisation avec tous les joueurs.

Il y a un soucis si un joueur ne répond pas, car le programme #18 ne lit pas les touches Julien Lepers dans la boucle principale.
Faut-il le faire, (pour qu'il puisse RESETter la partie à tout moment) ou bien mettre une temporisation qui bloque la partie au bout d'un certain temps ? (ce qui serait visualisé par l'arrêt du clignotement des LEDs des joueurs encore en lice). Quel serait l'ordre de grandeur de cette temporisation ? (10s, 20s, 1mn, plus ?)

PieM a proposé un fonctionnement un peu différent :
- une fois la partie lancée, on attends un certain temps (disons 1 mn)
- pendant cette minute, on note les joueurs qui ont enfoncé leur bouton, et dans quel ordre.
- après ça, le Picaxe allume successivement la LED de chaque joueur afin qu'il donne sa réponse.
- Julien Lepers peut à chaque fois le déclarer gagnant, ou passer au suivant dans l'ordre, ou donner un indice et relancer une temporisation sur la même question,
- dans ce cas, il lui faut bien évidement trois touches.

Avec cette règle du jeu, il faut être capable de détecter plusieurs appuis de touches simultanés et il faut 3 touches pour Julien Lepers.
Je pense que c'est possible en utilisant 3 entrées analogiques (celle déjà utilisée plus deux autres, mais on peut utiliser les deux entrées précédemment dédiées aux boutons J. Lepers).
 
Last edited:

Rolandn

New Member
C'est équivalent à Volt/44+22. Vous pouvez vérifier avec différentes valeurs de Volt que le résultat est un nombre entre 0 et 6 correspondant soit à l'absence de touche enfoncée (zéro), soit au numéro de la touche enfoncée.

Bonjour M.Besqueut,
Je reviens vers vous dans le cadre de l'affaire qui nous occupe (formule amusante des agents d'assurance). Comme il pleut, entre deux matches de foot, je déchiffre petit à petit votre programme. Et, ben çà alors! J'ai testé la formule "Volts/2+11/22" et çà marche... mais la logique m'échappe toujours. "Volts" est une variable comprise entre 0 et 256. Donc "Volts/2+11/22" est compris entre 22 et 27. Non? Forcément non puisqu'on trouve entre 0 et 6. Pourquoi?
Par priorité opérationnelle je parlais des priorités dans une suite d'opérations -parenthèses puis / et X puis -et+ . "Volts/2+11/22"<>"Volts/(2+11)/22.
Ceci dit, je crois avoir compris le fonctionnement de la table.
ex: "readtable 6, lesLeds" donne lesLeds=36=%00010000 et outpinsB allume la led B.5 :eek:
Je crois aussi avoir une lueur sur le B.A.BA de "and" et "or"
Le joueur 5 a appuyé ===> les Leds=%00010000 lesLeds=%00010000
lesJoueurs=%00000010 lesJoueurs=%00000010
lesLeds or lesJoueurs=%00010010 Elimine=%00000000 (and)
Quinze jours pour déchiffrer 30 lignes de programme... et je dois encore comprendre le fonctionnement qui élimine ceux qui ont joué! Champollion n'aurait pas fait mieux.
Merci à tous.
 
Last edited:

BESQUEUT

Senior Member
Et, ben çà alors! J'ai testé la formule "Volts/2+11/22" et çà marche... mais la logique m'échappe toujours.

"Volts" est une variable comprise entre 0 et 256. Donc "Volts/2+11/22" est compris entre 22 et 27. Non? Forcément non puisqu'on trouve entre 0 et 6. Pourquoi?
Entre 0 et 255 pour être précis.
Donc Volt/2 est compris entre 0 et 127
Volt/2+11 entre 11 et 138
(Volt/2+11)/22 entre 0 et 6
Notez que le changement d'unité se fait sur les valeurs 22,66,110,154,198 et 242 donc à chaque fois à mi-chemin entre les valeurs théoriques du pont de résistances, de façon a bénéficier d'une bonne tolérance.
Par priorité opérationnelle je parlais des priorités dans une suite d'opérations -parenthèses puis / et X puis -et+ . "Volts/2+11/22"<>"Volts/(2+11)/22.
Sur un Picaxe, les opérations sont effectuées de la gauche vers la droite, sans "priorités opérationnelles"...
Ceci dit, je crois avoir compris le fonctionnement de la table.
ex: "readtable 6, lesLeds" donne lesLeds=36=%00010000 et outpinsB allume la led B.5
32 pour être précis, mais c'est l'idée...
Je crois aussi avoir une lueur sur le B.A.BA de "and" et "or"
Le joueur 5 a appuyé ===> les Leds=%00010000 lesLeds=%00010000
lesJoueurs=%00000010 lesJoueurs=%00000010
lesLeds or lesJoueurs=%00010010
Jusque là tout va bien (comme dit à chaque étage le type qui tombe du haut de la tour Montparnasse) : vous avez effectivement compris.

A ce stade, lesJoueurs contient la liste des joueurs qui ont tentés leur chance, soit :
lesJoueurs=%00010010

Supposons que le joueur 5, essaie de nouveau (ouh le vilain tricheur !) :
lesLEDs__=%00010000
lesJoueurs=%00010010
Elimine = lesLEDs AND lesJoueurs
Seul le 5ième bit étant commun, la réponse est :
Elimine = %00010000 qui est différent de zéro, donc on ne tient pas compte de cet appui.

Supposons maintenant que le gentil joueur N°3 tente sa chance :
lesLEDs__=%00000100
lesJoueurs=%00010010 ' Ca n'a pas changé !

Elimine = lesLEDs AND lesJoueurs
Aucun bit n'étant commun, la réponse est :
Elimine = %00000000 qui est égal à zéro, donc on tient compte de cet appui.

Dans la même veine :
outpinsB=NOT lesJoueurs
si
lesJoueurs=%00010010
alors
outpinsB=%11101101
Donc on allume les LEDs des joueurs pas encore éliminés.



A noter que tout ceci n'a rien à voir avec le langage utilisé. C'est de la logique pure, ou de l'algèbre en base deux, comme on veut. Ça me fait bien rigoler les cours de codage en langage "graphique"...
 
Last edited:

Rolandn

New Member
Merci BESQUEUT pour ces explications. Une éclaircie dans le ciel... Exact que 2 puissance 5= 32.
Je vais installer le montage. J'ai déjà construit deux quizz pour 4 joueurs: l'un avec 4 relais (électrique et mastoc) et l'autre avec 4 timers 555 et 5 portes logiques "or"(un régal de logique tiré du livre "L'électronique en pratique" de Charles Platt. Les deux quizz se contentent de bloquer une réponse en verrouillant les autres.
Bonne soirée
R
 

Rolandn

New Member
montage picaxe 14M2 quizz suite

Bonjour à tous.
Je fais suite à mon problème de quizz "question pour un champion"
J'ai fait le montage tel qu'indiqué dans la pièce jointe. J'ai chargé le programme de BESQUEUT et toutes les leds clignotent sans arrêt même en appuyant sur les BP reset ou "continuer le jeu". Le montage est-il incorrect? Peut-on laisser des broches C.0, C.2, C.5 sans rien? Faut-il laisser en place le branchement pour entrer le programme avec les deux résistances de 10k et 22k? montage quizz.JPG
Merci de vos réponses
Rolandn
 

PieM

Senior Member
Bonjour à tous.
Je fais suite à mon problème de quizz "question pour un champion"
J'ai fait le montage tel qu'indiqué dans la pièce jointe. J'ai chargé le programme de BESQUEUT et toutes les leds clignotent sans arrêt même en appuyant sur les BP reset ou "continuer le jeu". Le montage est-il incorrect? Peut-on laisser des broches C.0, C.2, C.5 sans rien? Faut-il laisser en place le branchement pour entrer le programme avec les deux résistances de 10k et 22k?
Merci de vos réponses
Rolandn
Normal!
comme quoi il faut lire les posts (#32 et #26) ou je vous disais que si le montage était conforme au schéma ça ne marcherai pas. Entre autres ma question: qu'est ce qui est connecté à C.5.
Visblement rien, donc le picaxe fait ce qu'il veut.
Il ne faut jamais laisser l'entrée programmation en l'air! C'est bien spécifié dans la doc. (il faut la lire aussi ...)
donc laissez les R de programmation ça ne coûte pas cher.
 
Top