Télécommande voiture RC + caméra

dje8269

Senior Member
Presque lol .

La difficulté se trouve dans les déclenchements des actions, pas les actions en elle même .

Car on appui ( bref) sur le bouton sirène . Cela doit entrainer un changement permanent de la sirène pour qu'elle reste activée . ( inter a bascule)
Si on appui bref sur le changement de sirène ; Cela doit entraine un changement momentané pour changer une valeur définitivement ( inter télé-rupteur)
et enfin si j'appuie sur le klaxon ; cela doit entraine un changement momentané pour changer une valeur momentanément ( inter poussoir) .

Tout ça a ajuster avec un adclevel , pour lire sur un readadc .

Je suis en train de vérifier le programme du 08M2, après je passe au 28X2 et ensuite les essais.
 

jojojo

Senior Member
Jeremy, tu DOIS travailler (fx)=ax + b

Tu ne le dis pas, là, mais ... Tu as des misères récurentes, avec les mises à l'échelle. Non ?...
 

dje8269

Senior Member
Non non , il n'y as pas de mise a l'échelle la . La fourchette est large j'ai 32 niveaux avec le daclevel , j'en utilise que 4 ( pour mes instruction) , donc y'as de la place pour calibrer le readadc .

Mais c'est vrai que pour la formule de pente d'une droite linéaire j'ai eu du mal ; Mais cela n'était valable que pour la courbe du servo de direction . Que je vais retrouvé d'ailleurs avec les servos de la caméra .lol .
 

dje8269

Senior Member
Un programme aussi tordu ne peut pas fonctionner du premier c'est sur .

Pffff !!! j'y suis presque, j'y suis presque
 

dje8269

Senior Member
alléluia, ca fonctionne enfin ........

Bon j'ai peur de vous le montrer comme d'hab car je sens que je vais devoir tout refaire lol .

Je fais un petit changement, car en fait je dois passer par une interruption , sinon pendant les pause des musiques il faut laisser appuyer longtemps, et ce n'est pas fonctionnel du tout.

Bon après lecture de l'interrupt , je suis pas sur de pouvoir y arrivé de façon "normale" . Ma question du jour , est il possible de créer une interruption sur un readadc ?

En fait je souhaite détecter si une information est envoyé au 08M2 par le biais de la liaison daclevel-readadc . ceci afin d'intervenir pendant les pauses des différentes mélodies . Mais est ce qu'un faible tension sur le readadc est considéré comme un etat haut ? je crois me souvenir qu'il faut 2.8V non ? donc mon daclevel doit varier entre 2.8v et 5 v ? j'ai bon , ou y'as une astuce
 

dje8269

Senior Member
Bon, ben la je coince car ça ne fonctionne pas ;

Voici mon programme "test d'interruption". Peut être qu'il y as quelque chose qui cloche ? je me permet donc de vous le sousmettre pour verification

Quand j'appuie sur le bouton je mets daclevel a 30 du 28X2 .
Donc le readadc du 08M2, sur la broche C.4, enregistre comme valeur 240 .
Donc il devrait y avoir une tension comprise comme un "1" et donc lancé l'interruption . Mais voila ca ne fonctionne pas, donc je suppose, que la broche en readadc ne peut pas être comprise comme a "1" par le picaxe.

Code:
#picaxe 08M2

'########################  Configuration  ########################

dirsC = %00011010 'declare les broches C.1, C.3 et C.4 en entrée
 
symbol ordre = b1
 
 
'########################  Initialisation  ########################
 
 setfreq m4 		'Fréquence à 4MHz,les pauses sont en mS
 
  pwmout 2,off		'On eteint le son
 
 ordre = 0
 	
 setint %00010000,%00010000
 
'####################################################################################################
'					Programme Principal
'####################################################################################################
 
 main:
do
 
	readadc C.4,ordre					' Lecture de l'action a realiser
    	 	
loop
 
'####################################################################################################
'					Programme Secondaire
'####################################################################################################

'############################

interrupt:

for b2= 0 to 255
pwmout pwmdiv16, 2, 143, 287 
next

setint %00010000,%00010000

return
 

PieM

Senior Member
Pas le temps de regarder en détail, mais il n'y a pas d'interruption possible avec un readadc !
 

dje8269

Senior Member
Aie, je suis coincé alors.

Je n'ai plus qu'a utiliser le joker que tu m'as fait mettre ! a savoir une liaison filiaire entre le 28X2 et le 08M2 par une resistance de 1K . normalement cela devrais me sauvé la vie !!!

Encore merci PieM, pour cette liaison de secours !

Avec ce schéma la , si je met A.3 du 28X2 a 1 , la broche C.3 du 08M2 sera comprise comme un "1" et donc je pourrais utiliser l'interruption ?

Sans titre.jpg
 
Last edited:

PieM

Senior Member
Je ne comprends pas ce que tu veux faire !
tu peux lire en permanence ton entrée ana et modifier l'ordre. Tes PWM sont des tâches de fond donc ne sont pas perturbées.
ton interruption est inutile. En plus des pauses éventuelles sont gérables par le multitache.
Essaie d'expliquer clairement ton objectif:
tes différentes commandes, et comment y met on fin: sur ordre ou sur tempo.

Ton 08M2 doit être autonome, et ne dépendre que de la tension lue sur l'entrée ana.
 

dje8269

Senior Member
L'objectif est d'arrivé a couper la sirène pendant qu'elle hurle .

Par exemple la sirène des pompiers c'est :

Code:
do
	pwmout pwmdiv16, 2, 143, 287
	pause 1070
 	pwmout pwmdiv16, 2, 127, 256
 	pause 1070
 	
gosub verification		' Vérifie si il y a du changement par a un appui
 
loop
dans cet exemple on fait joué le pwm en tache de fond sur une note. mais il y as une pause qui détermine la durée de la note . si j'appuie sur le bouton "stop" de la sirène pendant cette pause, il ne sera pas pris en compte, car pour le moment, comme dans l'exemple, je fais une vérification de l'état de mes boutons a la fin, ce qui n'est vraiment pas réactif car je dois appuyer plus ou moins longtemps

J'ai donc besoin d'une interruption pour interrompre cette pause ? Mais l'interruption avec son return, reviendras dans la boucle et donc impossible d'en sortir ;

Je ne vois pas de solution sauf en partitionnement la pause en plusieurs petites pauses et en intercalant une vérification à chaque fois. Ce n'est pas très orthodoxe , mais ça devrait fonctionner ;

Par exemple , je divise la pause de "1000" par 10 pauses de "100" et entre je vérifie si y'as un appui ou non.Cela exige donc que l'appui sur le bouton dur plus de 100ms. Peut etre que je pourrais en louper.

Je peux aussi faire une vérification après chaque pause, après être passé par une interruption . car l'interruption ne prends en compte le temps de la pause pour revenir au programme principale. Donc en gros l'interruption me sert juste a "sauté" ma pause et a allez directement a la vérification de l'ordre recu .

Je ne vois aucune autre solution ..... de mon niveau
 
Last edited:

dje8269

Senior Member
Il se fait tard, mais j'ai enfin fini .

La réactivité est très bonne, pas excellente, mais très bonne .
J'ai augmenter la vitesse du 08M2 a 16Mhz .

J'ai utilisé la méthode des interruptions qui fonctionne très bien . L'interruption me sert juste a passé au travers des pauses ;

Je me confie a votre expertise pour m'apporté des améliorations .

Le but :

Quand j'appuie sur klaxon, ça klaxonne tant que le bouton est appuyé. style bouton poussoir .

Quand j'appuie sur sirène , ça lance la sirène ( style inter a bascule) . quand je re-appui ca éteint la sirène ; quand je re-re-appui ca relance la dernière sirène enregistrer .

Quand j'appuie sur changement pendant qu'une sirène est en route , cela change la sirène et lance la nouvelle tout de suite ( style télé-rupteur) . un appui bref = un changement bref.
Quand j'appuie sur changement si la sirène est éteinte un changement est effectué sans lancé de sirène ;

Un klaxon peut être appuyé pendant un sirène ; cela met la sirène en pause qui reprendras après relâchement du klaxon ;

J'en aurais mis du temps, et moi qui pensais juste recopié celui de Michel ....... A qui d'ailleurs je dis un grand merci pour les fréquences, et le programme, dont je me suis bien inspiré ( voir recopié pour les sirènes) .

Demain je chercherais d'autre mélodies sympa car les 4 premières se ressemblent beaucoup, j'ai d'ailleurs enlever le "samu"

Voici la bête , attention les yeux , c'est la logique de Jérémy lol ;

Code:
#picaxe 08M2

'########################  Configuration  ########################

dirsC = %00011010 'declare les broches C.1, C.3 et C.4 en entrée
 
symbol ordre = b1
symbol type_sirene = b6
symbol inter = b3
'variable pour pompier b2,b4,b5,b20,b21, w9 ,w10

 
'########################  Initialisation  ########################
 
 setfreq m16 		'Fréquence à 16MHz,
 
 read 0,type_sirene	'On lit la derniére sirene enregistrée
 
 pwmout 2,off		'On eteint le son
 
 ordre = 0			'valeur de l'ordre à 0
 inter = 0 			'interrutpeut sur Off	
 
  
'####################################################################################################
'					Programme Principal
'####################################################################################################
 
main:

do
 
readadc C.4,ordre				' Lecture de l'action a realiser
   
	if ordre=24 then			' Si appui sur klaxon
 		gosub klaxon	
 	end if
 	
 	if ordre=72 then			' Si appui sur changement
 		gosub changement
 	end if	
 	
 	if ordre=120 then			' Si appui sur sirene
 		gosub Interrupteur
 	end if
 	 	
loop
 
'####################################################################################################
'					Programme Secondaire
'####################################################################################################

'############################
' Sub Klaxon
klaxon:
do
	readadc C.4,ordre 		' On verifie l'etat du bouton en permanence
	pwmout pwmdiv64, 2, 143, 287 	' Le klaxon doit durer tant que la valeur est recu

loop while ordre=24			' on boucle tant que le bouton est appuyé
 	
pwmout 2,off				'On eteint le son

return

'############################
' Sub changement
changement:
do					' Anti-rebond
	readadc C.4,ordre 	' On attend que le bouton soit relaché pour avancé
loop while ordre=72

inc type_sirene			' On change la sirene
			
if type_sirene >= 6 then	' On reboucle entre 1 et 5
	type_sirene = 1
end if

write 0 , type_sirene		' On enregsitre la nouvelle valeur en EEPROM

return

'############################
' Sub Interrupteur
Interrupteur:
do					' Anti-rebond
	readadc C.4,ordre 	' On attend que le bouton soit relaché pour avancé
loop while ordre=120
 	
inter = inter+1			' On inverse l'interrupteur
	if inter >= 2 then	' Permet de reboucler entre 0 et 1	
	inter =0
	end if
	
if inter = 1 then 		' Si il est mis sur On, on va à lancement
	gosub lancement
 else
 	pwmout 2,off		' Si il est mis sur Off, on eteint
end if
 			
return
'############################
' Sub verification
verification:

readadc C.4,ordre				

if ordre=24 then				' Si appui sur klaxon
 		gosub klaxon
 		setint %00001000,%00001000		' armement de l'interrutpion car la verification est toujours effectué pendant une sirène 	
 	end if						' Il faut donc la ré-armé avant de revenir dans la sirène

if ordre=72 then				' Si appui sur changement		
	gosub changement			' On va changer
	gosub lancement			' puis on revient a lancement
end if
 
if ordre=120 then				' Si appui sur interrupteur
	gosub Interrupteur		' On va changer la position
	goto main				' puis on reveint au debut
end if

return

'############################
' Sub interruption			' L'interruption me sert seulement a sauté les pauses
interrupt:
return

'############################
' Sub Lancement

lancement: 
setint %00001000,%00001000		' armement de l'interrutpion
on type_sirene goto pompier,police,gendarme,ambulance,pompierUS	' On va à la sirene correspondante

'------------------------------------ 
pompier:
do
	pwmout pwmdiv64, 2, 143, 287
	pause 4280
gosub verification
 	pwmout pwmdiv64, 2, 127, 256
 	pause 4280
 gosub verification
loop
'------------------------------------ 
police:
do
 	pwmout pwmdiv64, 2, 143, 287
 	pause 2180
 gosub verification
 	pwmout pwmdiv64, 2, 107, 216
 	pause 2180
 gosub verification
 	 
loop
'------------------------------------  
gendarme:
 do
	pwmout pwmdiv64, 2, 143, 287
	pause 2180
gosub verification
	pwmout pwmdiv64, 2, 84, 171
	pause 2180
gosub verification
		 
 loop
'------------------------------------  
ambulance: 
do
	pwmout pwmdiv64, 2, 148, 298
	pause 664
gosub verification
	pwmout pwmdiv64, 2, 120, 242
	pause 664
gosub verification
	pwmout pwmdiv64, 2, 148, 298
	pause 664
gosub verification
	pwmout 2, off
	pause 6000
gosub verification
  
loop
'------------------------------------  
pompierUS:
b2=205
 w9=b2*2
 b4=65
 
Do
 random w10 		'w10=(b21,b20)
 w10=5*b20 +400*4		'w10 aléatoire de 400 à 1675 mS
gosub verification 
 
do 
dec b2 			'glissement fréquence montée 
w9=b2*2 			'rapp cyclique 50%
gosub verification
 pwmout pwmdiv64, 2, b2, w9
 pause 120
 gosub verification
 loop while b2>b4 	'b4=65 -->940 Hz
gosub verification
pause w10
gosub verification 
random w10 			'w10=(b21,b20)
 w10=4*b20*4 			'b20 = 0 à 255 --> w10= 0 à 765
 b21=b21//4 		'b21=0,1,2,3
 b5=51*b21+100 		'b5 aléatoire: 100(620Hz) , 151(410Hz), 202(308Hz), 253(246Hz)
 
do
 inc b2 			'glissement fréquence descente
 w9=b2*2
 pwmout pwmdiv64, 2, b2, w9
 pause 200
 gosub verification
 loop while b2<b5 	'relance sirène suivant fréquences
 gosub verification
pause w10
gosub verification 
 
Loop
 

PieM

Senior Member
Je t'ai dit en #490 d'utiliser le multitâche:
ton programme principal lit les ordres, et ta sirène est en tâche parallèle avec ses propres pauses. Sur une autre tâche tu peux avoir simultanément un gyrophare avec ses pauses différentes...
 

dje8269

Senior Member
Je t'ai dit en #490 d'utiliser le multitâche:
Oui PieM , mais je sais pas faire ....... . J'ai regarder l'histoire des start0 et strat1 mais le manuel reste assez succint la dessus .

Si tu veux me donner le debut d'une piste ; j'examinerai cela

Je vois quelques choses comme ca .

Start0:

On fais que verifie les ordres !!

start1:
les differetentes melodies

Donc dans start0 il suspend ou non start 1 . quelque chose dans ce genre ?
 
Last edited:

PieM

Senior Member
il faut que tu mettes en start1 tout ce qui concerne tes sirènes, avec au début la condition de lancement. si il n'y a pas la condition, ordre = 72 on boucle après avoir arrêté la sirène.
Je trouve ton système changement / lancement de sirène bien compliqué. Le changement de sirène est une chose, le lancement une autre.
Pourquoi utiliser le même ordre pour les deux ?
tu peux avec un autre ordre changer le type sans pour autant arrêter ta sirène .

pour l'inter, il ne faut pas prendre une variable byte !
il n'y a que deux positions, donc c'est un bit.

si tu poses symbol inter = bit0

ton
inter = inter+1
if inter >= 2 then
inter =0
end if
if inter = 1 then
gosub lancement
else
pwmout 2,off


devient :

inc inter
if inter = 1 then
gosub lancement
else
pwmout 2,off
 

dje8269

Senior Member
Je trouve ton système changement / lancement de sirène bien compliqué
Oui je sais , moi aussi je le trouve très compliqué lol .

Le changement de sirène est une chose, le lancement une autre.
Je ne comprends pas ce que tu veux dire par la . car j'ai bien deux fonctions distinctes ! pour les deux taches . le changement ne fais que incrémenter la valeur :confused:

Pourquoi utiliser le même ordre pour les deux ?
L'ordre n'est pas le même , pour le changement c'est 72 pour le lancement c'est 120 .

tu peux avec un autre ordre changer le type sans pour autant arrêter ta sirène .
C'est déjà le cas, pendant une sirène, quand je fais changement , ça lance la deuxième sirène de suite .

il n'y a que deux positions, donc c'est un bit.
exact , j'y avais pensé , je devais le changer mais hier soir, j'ai oublié .

En tout cas merci . Je suis en travailler sur le multitaches , ca m'as l'air du coup bien plus simple ; si ca fonctionne bien sur !!
 

dje8269

Senior Member
Voici le nouveau programme en utilisant le multitache :

MAis je comprends pas pourquoi il me met une erreur sur la premiere ligne "#PICAXE 08M2"

Code:
#PICAXE 08M2

'########################  Configuration  ########################

dirsC = %00011010 'declare les broches C.1, C.3 et C.4 en entrée
 
symbol ordre = b1
symbol type_sirene = b6
symbol inter = b3
'variable pour pompier b2,b4,b5,b20,b21, w9 ,w10

 
'########################  Initialisation  ########################
 
 setfreq m16 		'Fréquence à 16MHz,
 
 read 0,type_sirene	'On lit la derniére sirene enregistrée
 
 pwmout 2,off		'On eteint le son
 
 ordre = 0			'valeur de l'ordre à 0
 inter = 0 			'interrutpeut sur Off	
 
  
'####################################################################################################
'					Programme Principal
'####################################################################################################
start0:

do
 
readadc C.4,ordre				' Lecture de l'action a realiser
   
   	'##### KLAXON #####
	if ordre=24 then			' Si appui sur klaxon
 		do
			readadc C.4,ordre 		' On verifie l'etat du bouton en permanence
			pwmout pwmdiv64, 2, 143, 287 	' Le klaxon doit durer tant que la valeur est recu
		loop while ordre=24			' on boucle tant que le bouton est appuyé
 	
		pwmout 2,off				'On eteint le son
 	end if
 	
 	'##### CHANGEMENT #####
 	if ordre=72 then			' Si appui sur changement
 		
 		do					' Anti-rebond
			readadc C.4,ordre 	' On attend que le bouton soit relaché pour avancé
		loop while ordre=72

		inc type_sirene			' On change la sirene
			
			if type_sirene >= 6 then	' On reboucle entre 1 et 5
				type_sirene = 1
			end if

		write 0 , type_sirene		' On enregsitre la nouvelle valeur en EEPROM
		resume 1				' Relance la ou on c'est arreté
 	end if	
 	
 	'##### LANCEMENT #####
 	if ordre=120 then			' Si appui sur sirene
 		
 		do					' Anti-rebond
			readadc C.4,ordre 	' On attend que le bouton soit relaché pour avancé
		loop while ordre=120
 	
		inter = inter+1			' On inverse l'interrupteur
		if inter >= 2 then	' Permet de reboucler entre 0 et 1	
		inter =0
		end if
	
		if inter = 1 then 		' Si il est mis sur On, on va à lancement
			restart 1
 		else
 		suspend 1
 		pwmout 2,off		' Si il est mis sur Off, on eteint
		
		end if
 
 	end if
 	 	
loop

'############################
' deuxiéme programme

start1:
 
on type_sirene goto pompier,police,gendarme,ambulance,pompierUS	' On va à la sirene correspondante

'------------------------------------ 
pompier:
do
	pwmout pwmdiv64, 2, 143, 287
	pause 4280
gosub verification
 	pwmout pwmdiv64, 2, 127, 256
 	pause 4280
 gosub verification
loop
'------------------------------------ 
police:
do
 	pwmout pwmdiv64, 2, 143, 287
 	pause 2180
 gosub verification
 	pwmout pwmdiv64, 2, 107, 216
 	pause 2180
 gosub verification
 	 
loop
'------------------------------------  
gendarme:
 do
	pwmout pwmdiv64, 2, 143, 287
	pause 2180
gosub verification
	pwmout pwmdiv64, 2, 84, 171
	pause 2180
gosub verification
		 
 loop
'------------------------------------  
ambulance: 
do
	pwmout pwmdiv64, 2, 148, 298
	pause 664
gosub verification
	pwmout pwmdiv64, 2, 120, 242
	pause 664
gosub verification
	pwmout pwmdiv64, 2, 148, 298
	pause 664
gosub verification
	pwmout 2, off
	pause 6000
gosub verification
  
loop
'------------------------------------  
pompierUS:
b2=205
 w9=b2*2
 b4=65
 
Do
 random w10 		'w10=(b21,b20)
 w10=5*b20 +400*4		'w10 aléatoire de 400 à 1675 mS
gosub verification 
 
do 
dec b2 			'glissement fréquence montée 
w9=b2*2 			'rapp cyclique 50%
gosub verification
 pwmout pwmdiv64, 2, b2, w9
 pause 120
 gosub verification
 loop while b2>b4 	'b4=65 -->940 Hz
gosub verification
pause w10
gosub verification 
random w10 			'w10=(b21,b20)
 w10=4*b20*4 			'b20 = 0 à 255 --> w10= 0 à 765
 b21=b21//4 		'b21=0,1,2,3
 b5=51*b21+100 		'b5 aléatoire: 100(620Hz) , 151(410Hz), 202(308Hz), 253(246Hz)
 
do
 inc b2 			'glissement fréquence descente
 w9=b2*2
 pwmout pwmdiv64, 2, b2, w9
 pause 200
 gosub verification
 loop while b2<b5 	'relance sirène suivant fréquences
 gosub verification
pause w10
gosub verification 
 
Loop
 

PieM

Senior Member
L'ordre n'est pas le même , pour le changement c'est 72 pour le lancement c'est 120 .
avec ton

if ordre=72 then ' Si appui sur changement
gosub changement ' On va changer
gosub lancement ' puis on revient a lancement

tu vas sur lancement avec un ordre 72 . Pas très logique.
 

dje8269

Senior Member
tu vas sur lancement avec un ordre 72 . Pas très logique.
C'est la que tout est compliqué lol .

En fait ceci se trouve dans la vérification, qui n'est pas tout a fait pareil que le programme principal. en fait la vérification, ne peut arrivé que d'une siréne lancée. donc apres un changement il faut revenir au début de lancement de sirène pour savoir ou redirigé la sirène

C'est très subtil je te l'accorde
 

PieM

Senior Member
Tu as fait du n'importe quoi dans ce nouveau programme !

en multitâche:
pas de setfreq16 .
si tu mets un start0 il doit être sur la première ligne.
des gosub vérification ne correspondent à rien.
Il n'y a pas de vérification à faire puisque le code est relu en permanence dans la tâche principale.
tu aurait pu corriger ton symbol inter et le code correspondant.

Passer en multitâche ne consiste pas à ajouter deux étiquettes Start! c'est le principe que tu n'a pas bien assimilé.
 

dje8269

Senior Member
Tu as fait du n'importe quoi dans ce nouveau programme !
C'est vrai j'avoue............ :rolleyes:

Passer en multitâche ne consiste pas à ajouter deux étiquettes Start! c'est le principe que tu n'a pas bien assimilé
.
Effectivement , comme je devais partir, j'ai fais ca dans la précipitation . autant pour moi .

J'ai donc revu et corrigé ma copie, que dire de plus a part un grand bravo . J'ai bossé tard hier pour y arrivé, et en deux coups de cuillére a pot tu me fais faire un programme nickel, encore plus réactif . Je reste content d'avoir bossé tard, pour montré que je n'aime pas le tout cuit ! ma solution etait farfelue, moins reactive , mais elle fonctionnait. Je suis donc très satisfait de l'ensemble.

Il ne me reste qu'une seule chose a faire sur la musique maintenant c'est le fameux potar de 100K .
Peut tu me confirmer qu'il devras faire varier le duty du pwm afin de modifier le volume sonore du HP ? Je dois donc faire varier la valeur lue en corelation avec le duty ?

Encore merci PieM ! et hop un fonction de plus apprise : le multitache . c'est génial ce truc . y'a t il des limites ou contraintes importantes a savoir ?

Voici le programme parfait avec le multitache

Code:
#PICAXE 08M2
start0:
'########################  Configuration  ########################

dirsC = %00011010 'declare les broches C.1, C.3 et C.4 en entrée
 
symbol ordre = b1
symbol type_sirene = b6
symbol inter = bit0
'variable pour pompier b2,b4,b5,b20,b21, w9 ,w10

 
'########################  Initialisation  ########################
 
 read 0,type_sirene	'On lit la derniére sirene enregistrée
 
 suspend 1
 pwmout 2,off		'On eteint le son
 
 ordre = 0			'valeur de l'ordre à 0
 inter = 0 			'interrutpeut sur Off	
 
  
'####################################################################################################
'					Programme Principal
'####################################################################################################

do
 
readadc C.4,ordre				' Lecture de l'action a realiser
   
   	'##### KLAXON #####
	if ordre=24 then			' Si appui sur klaxon
 		do
			readadc C.4,ordre 		' On verifie l'etat du bouton en permanence
			pwmout pwmdiv64, 2, 143, 287 	' Le klaxon doit durer tant que la valeur est recu
		loop while ordre=24			' on boucle tant que le bouton est appuyé
 	
		pwmout 2,off				'On eteint le son
 	end if
 	
 	'##### CHANGEMENT #####
 	if ordre=72 then			' Si appui sur changement
 		
 		do					' Anti-rebond
			readadc C.4,ordre 	' On attend que le bouton soit relaché pour avancé
		loop while ordre=72

		inc type_sirene			' On change la sirene
			
			if type_sirene >= 6 then	' On reboucle entre 1 et 5
				type_sirene = 1
			end if

		write 0 , type_sirene		' On enregsitre la nouvelle valeur en EEPROM
		
		if bit1=1 then
			restart 1
		end if				' Relance la ou on c'est arreté
 	end if	
 	
 	'##### LANCEMENT #####
 	if ordre=120 then			' Si appui sur sirene
 		
 		do					' Anti-rebond
			readadc C.4,ordre 	' On attend que le bouton soit relaché pour avancé
		loop while ordre=120
 	
		inc inter
 			
		if inter = 1 then 		' Si il est mis sur On, on va à lancement
			restart 1
 		   else
 			suspend 1
 			pwmout 2,off		' Si il est mis sur Off, on eteint
 			bit1=0
		end if
 
 	end if
 	 	
loop

'############################
' deuxiéme programme

start1:
bit1=1
on type_sirene goto pompier,police,gendarme,ambulance,pompierUS


'---------------------------- 
pompier:
  
do
 pwmout pwmdiv16, 2, 143, 287
 pause 1070
 pwmout pwmdiv16, 2, 127, 256
 pause 1070
 loop
 
'---------------------------- 
police:
do
 pwmout pwmdiv16, 2, 143, 287
 pause 545
 pwmout pwmdiv16, 2, 107, 216
 pause 545
 loop
 
'----------------------------  
gendarme:
 
do
 pwmout pwmdiv16, 2, 143, 287
 pause 545
 pwmout pwmdiv16, 2, 84, 171
 pause 545
 loop
 
'----------------------------  
ambulance: 

do
 pwmout pwmdiv16, 2, 148, 298
 pause 166
 pwmout pwmdiv16, 2, 120, 242
 pause 166
 pwmout pwmdiv16, 2, 148, 298
 pause 166
 pwmout 2, off
 pause 1500 
loop
'----------------------------  
pompierUS:
 
b2=205
 w9=b2*2
 b4=65
 
Do
 random w10 'w10=(b21,b20)
 w10=5*b20 +400 'w10 aléatoire de 400 à 1675 mS
 
do 
dec b2 'glissement fréquence montée 
w9=b2*2 'rapp cyclique 50%
 pwmout pwmdiv16, 2, b2, w9
 pause 30
 loop while b2>b4 'b4=65 -->940 Hz
 
pause w10
 
random w10 'w10=(b21,b20)
 w10=4*b20 'b20 = 0 à 255 --> w10= 0 à 765
 b21=b21//4 'b21=0,1,2,3
 b5=51*b21+100 'b5 aléatoire: 100(620Hz) , 151(410Hz), 202(308Hz), 253(246Hz)
 
do
 inc b2 'glissement fréquence descente
 w9=b2*2
 pwmout pwmdiv16, 2, b2, w9
 pause 50
 loop while b2<b5 'relance sirène suivant fréquences
 
pause w10
 
Loop
 

PieM

Senior Member
Tu essaieras ce programme (pas en simulation) . Tu diras ce qui va et ce qui ne vas pas car pas facile pour moi sans faire de test.
D'autant plus que j'ai enlevé 40% des instructions !

un prog principal qui ne fait que lire les ordres.
une tâche pour tes sirènes avec ses pauses
une tâche pour le reste.

a tout instant les ordres sont lus et dispo pour toutes les tâches .
l'arrêt de tes sirènes se fait par le pwm OFF de l'interrupteur

Il ne faut pas utiliser les tâches comme des sous programme que l'on appelle ou que l'on arrête.


Code:
#picaxe 08M2

'########################  Configuration  ########################

dirsC = %00011010 'declare les broches C.1, C.3 et C.4 en entrée
 
symbol ordre = b1
symbol type_sirene = b6
symbol inter = bit0
'variable pour pompier b2,b4,b5,b20,b21, w9 ,w10

  
'####################################################################################################
'					Programme Principal
'####################################################################################################

main:
do
	readadc C.4,ordre				' Lecture de l'action a realiser
loop	

'############################
' deuxiéme tâche
	
Start1:	
   
   	'##### KLAXON #####
	if ordre=24 then			' Si appui sur klaxon
 				pwmout pwmdiv64, 2, 143, 287 	' Le klaxon doit durer tant que la valeur est recu
	else 	
		pwmout 2,off				'On eteint le son
 	end if
 	
 	'##### CHANGEMENT #####
 	if ordre=72 then			' Si appui sur changement
 		
 		do					' Anti-rebond
		loop while ordre=72

		inc type_sirene			' On change la sirene
			
			if type_sirene >5 then	' On reboucle entre 1 et 5
				type_sirene = 1
			end if

		write 0 , type_sirene		' On enregsitre la nouvelle valeur en EEPROM
 	end if	
 	
 	'##### LANCEMENT #####
 	if ordre=120 then			' Si appui sur sirene
 		
 		do					' Anti-rebond
		loop while ordre=120
 	
		inc inter ' On inverse l'interrupteur
		if inter = 0 then 			
 			pwmout 2, OFF
		end if
 	end if
 	 	
goto start1

'############################
' troisiéme tâche

start2:

If inter = 1 then
	read 0,type_sirene	'On lit la derniére sirene enregistrée 
	on type_sirene goto pompier,police,gendarme,ambulance,pompierUS	' On va à la sirene correspondante

'------------------------------------ 
pompier:
	do
		pwmout pwmdiv64, 2, 143, 287
		pause 4280
	 	pwmout pwmdiv64, 2, 127, 256
	 	pause 4280
	loop
'------------------------------------ 
police:
	do
	 	pwmout pwmdiv64, 2, 143, 287
	 	pause 2180
	 	pwmout pwmdiv64, 2, 107, 216
	 	pause 2180
	loop
'------------------------------------  
gendarme:
	 do 
		pwmout pwmdiv64, 2, 143, 287
		pause 2180
		pwmout pwmdiv64, 2, 84, 171
		pause 2180
	 loop
'------------------------------------  
ambulance: 
	do
		pwmout pwmdiv64, 2, 148, 298
		pause 664
		pwmout pwmdiv64, 2, 120, 242
		pause 664
		pwmout pwmdiv64, 2, 148, 298
		pause 664
		pwmout 2, off
		pause 6000
	loop
'------------------------------------  
pompierUS:

	b2=205
 	w9=b2*2
 	b4=65
 
	Do
	 random w10 		'w10=(b21,b20)
	 w10=5*b20 +400*4		'w10 aléatoire de 400 à 1675 mS
	 
		do 
			dec b2 			'glissement fréquence montée 
			w9=b2*2 			'rapp cyclique 50%
			pwmout pwmdiv64, 2, b2, w9
			pause 120
		 loop while b2>b4 	'b4=65 -->940 Hz
	
		pause w10
	 
		random w10 			'w10=(b21,b20)
	 	w10=4*b20*4 			'b20 = 0 à 255 --> w10= 0 à 765
	 	b21=b21//4 		'b21=0,1,2,3
	 	b5=51*b21+100 		'b5 aléatoire: 100(620Hz) , 151(410Hz), 202(308Hz), 253(246Hz)
	 
		do
			inc b2 			'glissement fréquence descente
			w9=b2*2
			pwmout pwmdiv64, 2, b2, w9
			pause 200
		 loop while b2<b5 	'relance sirène suivant fréquences
	
		pause w10
	
	Loop

Else
goto start2
endif
 

dje8269

Senior Member
Exemple en vidéo .

Bien sur mettez le son !!! .

Je n'ai pas fabriquer les boutons sur la télécommande, je l'ai donc démontée pour pouvoir y acceder .

En plein écran par ici

[video=dailymotion;x1rvxqa]http://www.dailymotion.com/video/x1rvxqa_voiture-rc-avec-picaxe-et-sirene_tech[/video]


Tu essaieras ce programme (pas en simulation) . Tu diras ce qui va et ce qui ne vas pas car pas facile pour moi sans faire de test.
Pas de soucis, et même avec plaisir ;

Le test est fait ;

Klaxon nickel .
Par contre je dois rester appuyé sur le bouton lancement pour que la sirène chante . Un appui bref et il se passe un tout petit bruit sur le HP toutes les secondes environ .

Changement fais émettre la sirène aussi quand on laisse appuyé dessus ;
Je me suis pas permis de cherché a le corriger . mais dis moi si tu veux que je regarde ce qui cloche ;
 

PieM

Senior Member
Je me suis pas permis de cherché a le corriger . mais dis moi si tu veux que je regarde ce qui cloche ;
Ben pas de problème ! c'est ton programme ...

je dois rester appuyé sur le bouton lancement pour que la sirène chante
voir l'état de inter. il ne doit pas changer normalement.

Changement fais émettre la sirène aussi quand on laisse appuyé dessus
comprends pas car non lié à l'inter qui seul peut actionner la sirène !
 

PieM

Senior Member
Je dois donc faire varier la valeur lue en corelation avec le duty ?
Fais un essai avec une sirène, par ex:

pompier:
do
pwmout pwmdiv64, 2, 143, 70
pause 4280
pwmout pwmdiv64, 2, 127, 60
pause 4280
loop
 

dje8269

Senior Member
Fais un essai avec une sirène, par ex:
Cela ne fonctionne pas .

Mais je me rend compte que tu utilise les valeurs à 16Mhz , alors que maintenant , grâce au multitache, le 08M2 tourne à 4Mhz

La sirène a 4Mhz des pompiers c'est

pwmout pwmdiv16, 2, 143, 287
pause 1070
pwmout pwmdiv16, 2, 127, 256
pause 1070
Concernant ton programme ,je comprends pas pkoi ca ne fonctionne après mes modif ! .
Dans tous les cas le programme "sirène" doit être lancé de l'extérieur . car sinon les pauses gênent . mais même en changeant cela , j'ai pas réussis a le faire fonctionner . je vais comparer au mien pour voir .
 

dje8269

Senior Member
Ok ,

Alors en fait ca fonctionne, mais faut y aller plus franchement . j'ai mis 1% en duty, pour bien entendre la différence .

Et a 100% ca ne fonctionne pas. à 80% ca fonctionne .

Disons qu'il faudrais une variation de 1% à 80% mais les valeurs de duty sont toutes différentes , alors la pour le coup la mise a l'echelle, je vois pas comment faire .

Je pense que je vais garder le ratio de 50% qui va tres bien , peut etre juste augmenter le klaxon à la limite.
 

MGU

Senior Member
Bonjour,

Dans tous les cas, il ne faut pas laisser ce petit HP tout nu, il faut l'habiller un peu, en le fixant sur un plan fixe ou en le mettant dans une petite boite, enfin, n'importe quoi pour éviter que les ondes avant et arrière s'annulent et lui donnent un rendement lamentable.

MM
 

PieM

Senior Member
Dans tous les cas le programme "sirène" doit être lancé de l'extérieur .
Non ça ne marche pas comme ça.
Il ne faut pas considérer les taches comme des sous prog qu'on lance.
Toutes les tâches s'exécutent en même temps. toutes las variables sont disponibles partout, et les pauses n'ont aucune incidence sur les autres tâches.
En résumé, utiliser des restart et des suspend est une erreur ici.
Tes sirènes doivent s'exécuter si inter est à 1 est doivent cesser quant inter est à 0 car le pwm est mis sur OFF.

Quant au PWM il ne sert à rien d'aller plus haut que 50 %. à 100 % ça ne peut pas marcher car tu as un signal continu !!
Par contre ça sera plus lourd à gérer que si tu avais mis un petit ampli BF avec potard de volume!

là dans le principe il faut que les duty soient un % de période si duty = 200% de la période tu as un signal carré (50%)
 

dje8269

Senior Member
Toutes les tâches s'exécutent en même temps. toutes las variables sont disponibles partout, et les pauses n'ont aucune incidence sur les autres tâches.
Je suis à 100% d'accord la dessus .

Il ne faut pas considérer les taches comme des sous prog qu'on lance.
La ça se corse . Je suis d'accord pour dire qu'une tache n'a pas le rôle d'être considéré comme un sous prog qu'on lance, mais comme un autre programme qui tourne en // .

Mais , et je dis bien mais, dans ce cas précis , nous sommes obligé de raisonner ainsi . car la tache sirène tourne en boucle sur elle même, avec des pauses . Il est donc impossible d'arrêter la boucle instantanément de l'intérieur . A la limite en faisant des tests régulièrement , mais alors ,même la réactivité dépendras des pauses ; car tous les tests de conditions se feront après les pauses


Pour mieux s'en rendre compte , amplifions le problème .

Do
high led
pause 5000
low led
pause 5000
loop
Comment faire pour sortir de cette boucle instantanément ? presque impossible !!!! ;
je ne vois que 4 solutions :
Une interruption : mais celle ci devra obligatoirement revenir à la l'endroit même ou elle a été lancée (return) , donc on revient dans notre boucle , nous l'avons juste arrêté momentanément .
Une interruption : suivis d'un reset ( j'ai essayé sa fonctionne) , mais la réactivité est pas terrible le temps de relancé la bête.
Sinon il faut supprimer les pauses , méthode du lapin blanc, j'y avais pensé aussi , mais il utilise le timer qui est en seconde , et nous devons être bien plus précis que ça dans ce cas de figure.
L'autre et la plus efficace reste l'arrêt de l'extérieur; et de la redémarré dès qu'on as besoin.


Moi je ne vois que ca, ou alors j'ai loupé un épisode quelques part ! . Si une autre solution a laquelle j'ai pas pensé existe , je suis preneur de la connaitre .
 

PieM

Senior Member
L'autre et la plus efficace reste l'arrêt de l'extérieur; et de la redémarré dès qu'on as besoin.
Oui, je pense que c'est effectivement le plus efficace. Le problème ici vient du fait que l'on utilise des pwmout et non des pwmduty.

Mais cet arrêt est à faire avec un restart qui renvoie à la première ligne de la tache qui doit démarrer par :

start 2:
pwmout 2, OFF
do
If inter = 1 then
read 0,type_sirene 'On lit la derniére sirene enregistrée
on type_sirene goto pompier,police,gendarme,ambulance,pompierUS etc ...
.....................
loop

et en tache 1 tu auras:

if inter = 0 then
restart 2
.......

ta tâche 2 reste toujours active et en attente de l'ordre lié à inter
 

dje8269

Senior Member
La je suis entièrement d'accord ! .

je vais refaire ton programme après avoir réparé ma fuite dans la baignoire.

Mais je pense que ça devrait le faire, et même de façon propre et élégante .

J'aurais tout de même une question, pour pouvoir dormir sur mes deux oreilles ; Est ce que ca abime le µC de faire des suspend ! pourquoi ne préconise tu pas cela ? .
car il me semble que cela va poser un tout petit problème de rien du tout .

sur la vidéo , on remarque que quand je klaxonne pendant une sirène , a l'arrêt du Klaxon , la sirène repart de la ou elle c'est arrêté . avec ta méthode il redémarrera du début .
 

PieM

Senior Member
Est ce que ca abime le µC de faire des suspend
Ben non, ça ne lui fait rien !

la sirène repart de la ou elle c'est arrêté . avec ta méthode il redémarrera du début
Tu es sérieux là ? Une vraie sirène continuerait pendant le klaxon ... ça ne pose pas de problème ?
Enfin tu fais comme tu le sens ....
 

dje8269

Senior Member
J'ai enfin trouvé le bug dans ton programme . Quand tu klaxonne pas (ordre différent de 24), tu éteins le son . mais l'autre programme(start2) lui le rallume ......
J'ai fini par faire un mix de ton programme et du mien .

Une vraie sirène continuerait pendant le klaxon ... ça ne pose pas de problème ?
J'ai donc essayé , mais il y as conflit, le son devient nasillard quand on klaxonne pendant une sirène ; Car en fait les deux programmes veulent passés un son en même temps . J'ai donc été oblige de suspendre la sirène pendant le klaxon .

Je pense que ton programme est plus réactif car il y a en permanence une lecture des ordres, tandis que sur le mien il est dans une boucle plus longue . Ceci dit c'est complètement imperceptible.

Voila le nouveau programme qui fonctionne aussi a merveille ;

Code:
#PICAXE 08M2

'########################  Configuration  ########################

dirsC = %00011010 'declare les broches C.1, C.3 et C.4 en entrée
 
symbol ordre = b1
symbol type_sirene = b6
symbol inter = bit0
'variable pour pompier b2,b4,b5,b20,b21, w9 ,w10

'########################  Initialisation  ########################
 
 read 0,type_sirene	'On lit la derniére sirene enregistrée
 
 pwmout 2,off		'On eteint le son
 
 ordre = 0			'valeur de l'ordre à 0
 inter = 0 			'interrutpeut sur Off	
 
  
'####################################################################################################
'					Programme Principal
'####################################################################################################

do
 
readadc C.4,ordre				' Lecture de l'action a realiser

loop
'############################
' deuxiéme tâche
Start1:
do
   	'##### KLAXON #####
	if ordre=24 then
						' Si appui sur klaxon
		if inter = 1 then		' On arrete start2 pour ne pas se marcher dessus
			suspend 2
		end if
 		 
 		do
			pwmout pwmdiv16, 2, 143, 460 	' Le klaxon doit durer tant que la valeur est recu
		loop while ordre=24			' on boucle tant que le bouton est appuyé
 	
		pwmout 2,off				' On eteint le son
		
		if inter = 1 then 		' On reprend start2
			resume 2
		end if					
 	end if
 	
 	'##### CHANGEMENT #####
 	if ordre=72 then				' Si appui sur changement
 		
 		do					' Anti-rebond
		loop while ordre=72

		inc type_sirene			' On change la sirene
			
			if type_sirene >4  then	' On reboucle entre 0 et 4
				type_sirene = 0
			end if

		write 0 , type_sirene		' On enregsitre la nouvelle valeur en EEPROM
		
		restart 2				' RAZ de start2 "sirene" pour en compte le nouveau changement
	end if
 	 	
 	'##### LANCEMENT #####
 	if ordre=120 then				' Si appui sur sirene
 		
 		do					' Anti-rebond
		loop while ordre=120
 	
		inc inter
 			
		if inter = 0 then 
			restart 2			'Si l'interrupteur est a 0, on eteint le son en resetant la start2 ;
		end if
 	end if
 	 	
loop

'############################
' troisiéme programme

start2:
pwmout 2,off		' On eteint le son au lancement du start2

do

	if inter = 1 then	' Si l'inter est à ON , alors on jour la sirene correspondante
		on type_sirene goto pompier,police,gendarme,ambulance,pompierUS
	end if
loop

'---------------------------- 
pompier:
  
do
 pwmout pwmdiv16, 2, 143, 287		'fréq = 435 Hz
 pause 1070
 pwmout pwmdiv16, 2, 127, 256		'fréq = 488 Hz
 pause 1070
 loop
 
'---------------------------- 
police:
do
 pwmout pwmdiv16, 2, 143, 287		'fréq = 435 Hz
 pause 545
 pwmout pwmdiv16, 2, 107, 216		'fréq = 580 Hz
 pause 545
 loop
 
'----------------------------  
gendarme:
 
do
 pwmout pwmdiv16, 2, 143, 287		'fréq = 435 Hz
 pause 545
 pwmout pwmdiv16, 2, 84, 171		'fréq = 732 Hz
 pause 545
 loop
 
'----------------------------  
ambulance: 

do
 pwmout pwmdiv16, 2, 148, 298		'fréq = 420Hz
 pause 166
 pwmout pwmdiv16, 2, 120, 242		'fréq = 516Hz
 pause 166
 pwmout pwmdiv16, 2, 148, 298		'fréq = 420Hz
 pause 166
 pwmout 2, off
 pause 1500 
loop
'----------------------------  
pompierUS:
 
b2=205
 w9=b2*2
 b4=65
 
Do
 random w10 'w10=(b21,b20)
 w10=5*b20 +400 'w10 aléatoire de 400 à 1675 mS
 
do 
dec b2 'glissement fréquence montée 
w9=b2*2 'rapp cyclique 50%
 pwmout pwmdiv16, 2, b2, w9
 pause 30
 loop while b2>b4 'b4=65 -->940 Hz
 
pause w10
 
random w10 'w10=(b21,b20)
 w10=4*b20 'b20 = 0 à 255 --> w10= 0 à 765
 b21=b21//4 'b21=0,1,2,3
 b5=51*b21+100 'b5 aléatoire: 100(620Hz) , 151(410Hz), 202(308Hz), 253(246Hz)
 
do
 inc b2 'glissement fréquence descente
 w9=b2*2
 pwmout pwmdiv16, 2, b2, w9
 pause 50
 loop while b2<b5 'relance sirène suivant fréquences
 
pause w10
 
Loop
Allez hop je file à la gestion de la camera vidéo maintenant !!! la fin approche !!!
 
Last edited:

dje8269

Senior Member
Bonjour à tous,

J'avance doucement , mais je tombe encore sur un problème de mise a l'échelle. Vraiment c'est ma bête noire ce truc. Je travaille , je travaille , à fond dessus , et après je me mélange les pinceaux . J'en appelle donc à votre savoir , car en plus des maths , il faudra de la logique ;

Je m'explique .

tout d'abord il faut savoir que le point milieu des joysticks se situe à 127 pile poil . le débattement de sécurité que je m'imposais , est déjà existant physiquement en fait ( exprès ou non , ça m'arrange). C'est a dire qu'on peut commencer a travailler à 126 et 128 sans risque de déclenchement intempestif .

"Pour le moment" j'ai supprimer le devers , sinon la caméra tape sur mon condo . de plus il ne seras pas très gros de toute façon, voir inexistant suivant l'angle de la caméra et la position finale .

La caméra va donc de droite a gauche sur 90° de chaque cotés . Et 90° en haut .

Allez je complique la chose . Je cherche a simplifier au maximum le calcul quitte a perdre ( dans certaines mesure évidemment) de la précision . Le but c'est que l'angle de la caméra ne soit pas dégradé lui . Par exemple commencé a bougé a 130 plutôt que 128 ça simplifie la mise a l'échelle ;

Au exagérant le problème ca me dérange pas que la caméra arrive en fin de course , quand mon joystick est a la moitié .

Vous remarquerez que pour le haut , je démarre a partir de 240 , je perds donc la course de 255 à 240 du joystick . ca m'arrange en fait, dans tous les cas ; j'ai une sécurité avant de monter la caméra, et surtout je simplifie énormément mon calcul . Il tient juste sur deux opérations . C'est ce que je voudrais reussir a faire avec droite/gauche ; mais je m'arrache kles cheveux depuis hier soir .

Pourquoi simplifier autant les calculs ; Car j'ai dans l'idée si la vitesse de traitement d'infos du picaxe le permet, de vérifier la valeur lue sur deux ou trois boucle avant d'envoyer l'ordre ; Ainsi je ferais disparaitre les nano-bugs parasites, qui des fois , arrivent a déclenchés la sirène !!!! et la sirène qui hurle a 23h30 quand le petit dors c'est moyen !!.

Voila je vous mets mon dessin explicatif , plus la partie "calcul" du programme farfelus ( qui fonctionnent hein!!!!) mais dont je suis pas fier .

potar joystick.jpg

Code:
'--------------------------------------
'#####  Commande Pan de la camera  #####

Select case b5			' Lecture valeur du pan de la camera

case  < 127				'tourne a gauche     de 150 à 235 .			'
	b5 = 127 - b5		' Mise a l'echelle
	b5 = b5*10/16 +150
		
case > 127				' tourne a droite	   de 65 à 150
	b5 = b5-127
	b5 = b5*10/16
	b5 = 150 - b5		' Mise a l'echelle

else
	b5=150			'Sinon point milieu
	
end select

servopos Pan,b5			' Positionnement du servo

'--------------------------------------
'#####  Commande Tilt de la camera  #####

Select case b7			' Lecture valeur du Tilt de la camera

case  < 240				' Vers le haut	de 70 à 150			
	b7 = b7/3+70

else
	b7=150			'Sinon point milieu
	
end select

servopos Tilt,b7			' Positionnement du servo
 

PieM

Senior Member
Je t'ai un peu simplifié ton truc:

pour le tilt, et pour le pan: celui ci varie entre 66 et 234 pour une variation de 7 à 247 du joystick.

Code:
'--------------------------------------
'#####  Commande Pan de la camera  #####
		'
	b5 = b5 * 7 / 10		' Mise a l'echelle
	b5 = 238- b5
        servopos Pan,b5			' Positionnement du servo

'--------------------------------------
'#####  Commande Tilt de la camera  #####
		
        b7 = b7/3+70 max 150
        servopos Tilt,b7			' Positionnement du servo
Je ne comprends pas trop tes histoires de nano-bugs parasites !
on est en numérique partout sauf entre le 28X2 et le 08M2.
Il faut trouver d'où vient la mauvaise info si il y en a une.
 

dje8269

Senior Member
Merci PieM,

J'essaye ton programme tout de suite .

Je ne comprends pas trop tes histoires de nano-bugs parasites
Ça arrive , mais peut être que c'est normal et/ou inévitable,que des fois la voiture fasse des petits a-coups toute seule . Je ne pourrais pas le filmer car , c'est très aléatoire .
Hier soir exemple , je travaillais sur la camera . La voiture toute seule , c'est mise à fond les ballons , et la sirène c'est mise en route ....... j'ai du tout coupé à l'interrupteur .
Il arrive régulièrement , qu'elle fasse comme un petit spasme au repos ;

Je me demandais , si ce serais possible de faire un moyennage glissant sur deux ou trois valeurs par exemple ; Ou faire un compteur pour chaque infos reçue et la comparée a la suivante, mais la je pense perdre en réactivité et en précision du coup .
 

PieM

Senior Member
déjà il faut procéder par élimination ... Est ce que ça arrive quand le TX est éteint ?
 
Top