Oui .On est d'accord qu'il faut remplacer tes "position" par les données souhaités ?
Tu as toutes les cartes en main pour y arrivé . je file au lit .Et pour qu'il revienne moins vite en position 0 ?
Ca t'oblige de changer la disposition de tes servos physiquement , mais c'est sur que pour le programme se serait plus simple ; comme ca tu ne fais qu'un seul calcul , que tu apllique au deux servos.mon point 0 est 75 pour l'un et 150 pour l'autre, ne serait-il pas plus judicieux de les mettre à 150 tous les deux (au milieu quoi...)
C'est exactement la même chose qu' l'aller mais à l'envers . au lieu de augmenter de 1 avec inc ( pour incrementation voir le manuel) tu fais dec ( pour decrementaiton voir manuel) .Je n'arrive pas à comprendre le chemin de retour à 0 du servo et donc n'arrive pas à le ralentir à son retour....
#Picaxe 08M2
low 1,2
pulsout 1,75
pulsout 2,150
do
if pin3=1 then
pulsout 1,100
else
pulsout 1,75
endif
If pin4=1 then
pulsout 2,125
else
pulsout 2,150
endif
pause 18
loop
En tout cas, le bout de code que tu m'a envoyé fonctionne trés bien (sauf le retour à 0 trop rapide) mais c'est exactement le résultat souhaité...Montre moi un bout de code , je regarderais et t'aiguillerais ; Attention je suis loin d'avoir al science infuse . peut être qu'il existe d'autre solution
Ca c'est bon signe lolEn tout cas, le bout de code que tu m'a envoyé fonctionne trés bien
Ben c'est fais exprès , pour que tu bosse , Si je te le file tout fait , t un'auras rien appris du tout . regarde déjà la , tu va avoir le manuel . j'ose aussi esperer que tu as compris la difference entre un pulsout et un servopos .(sauf le retour à 0 trop rapide)
je sais ....mais c'est exactement le résultat souhaité...
reprends mon code qui fonctionne , et essaye, pour commencer de faire revenir le servo à 0 doucement . Presque la même chose que pour l'aller mais à l'envers ; et montre moi .Le code que j'utilise actuellement est celui la :
Le voila à l'envers.....#Picaxe 08M2
symbol position = b1
position = 75
servo C.1,position
do
if pinC.4=1 then
do
inc position
pause 10
servopos C.1,position
loop while position < 100
do
loop while position > 75
servopos C.1,position
pause 10
dec position
end if
position = 75
servopos C.1, position
loop
#Picaxe 08M2
symbol position = b1
position = 75
servo C.1,position
do
if pinC.4=1 then
do
inc position
pause 10
servopos C.1,position
loop while position < 100
do
dec position
pause 10
servopos C.1,position
loop while position < 75
loop while pinC.4 = 1
end if
position = 75
servopos C.1, position
loop
programme [C0DE/]
Ensuite il faut que tu mette des commentaires , ca t'aideras pour la compréhension de ton propre programme , tu verras tu trouveras des erreurs tout seul . Et aussi pour que les autres puisse bien le comprendre en le lisant . Si apres quelques mois tu veux faire une modif , ca t'aideras bien aussi .
Afin de ne pas se mélanger les pinceaux essaye de nommé tes broches , variables etc .... ainsi c'est beaucoup plus claur dans le programme.
Je te donne ces petits conseils à la va vite hein .... ; mais c'est quand même important .
Voila j'ai commenté ton programme pour essayé de bien décortiquer tes problémes ;
J'allais oublié , merci de mettre un programme qui fonctionne à minima en simulation . Ce n'est pas le cas en #93 .
[code]
#Picaxe 08M2
symbol position = b1
position = 75
servo C.1,position
do
if pinC.4=1 then ' donc ici tu regarde si ton inter est appuyé ou non .
' Si il est appuyé tu execute les instructions de dessous
do ' tu ouvre une boucle pour faire bouger ton servo doucement
inc position
pause 10
servopos C.1,position
loop while position < 100 ' Quand tu as atteint la valeur tu sort de la boucle .
'La deja ca coince car tu va rentré dans une nouvelle boucle à la suite de l'autre .
do ' Donc dans la foulée du fais redecndre ton servo doucement
' a ce moment précis la valeur de position = 100
dec position ' tu enleve 1 à 100 donc postion = 99
pause 10
servopos C.1,position 'tu place ton servo à la position 99
loop while position < 75 ' Mais la tu fais une boucle si position INFERIEUR à 75 ????
' mais position = 100 quand tu sort de la boucle du dessus, donc tu ne fais pas la boucle
'loop while pinC.4 = 1 ' Ca je sais pas ce que ca fou la
end if
position = 75 '
servopos C.1, position 'la tu utilise servopos alors que l'on doit l'utilisé seulement pour avancer doucement après il faut du Pulsout
loop
#Picaxe 08M2
'########################## configuration ################################
symbol position = b1
symbol inter1 = pinC.4
symbol EN1 = b11
'########################## Initialisation ################################
setfreq m4
EN1 = 0 ' Au démarrage on met le flag à 0
position = 75 ' On rentre la position d'origine
servo C.1,position' On place le servo
'#################################################################################
'########################## Programme Principal ############################
'#################################################################################
do
if inter1 = 1 and EN1 = 0 then gosub servo1up ' Si l'inter est à 1 et que le flag à 0 cela signifie que c'est la premiere fois qu'on bascile l'inter
if inter1 = 0 and EN1 = 1 then détecter servo1down ' Si l'inter est à 0 et que le flag à 1 cela signifie que c'est la premiere fois qu'on bascile l'inter
pulsout C.1, position ' on positionne le servo avec pulssout pour la stabilité
pause 10 ' pour ralentir la Mise à Jour
loop
'#################################################################################
'########################## Programme Secondaire ###########################
'#################################################################################
servo1up:
do
inc position ' On augmente de 1 la position
pause 10 ' on fais une pause pour ralentir
servopos C.1,position ' On place le servo a sa nouvelle place
loop while position < 100 ' Tant qu'on a pas atteint la valeur on continue
EN1 = 1 ' Une fois le servo à sa position On met le flag a 1
return ' On retourne au programme principal
'--------------------------
servo1down:
do
dec position ' On descend de 1 la position
pause 10 ' on fais une pause pour ralentir
servopos C.1,position ' On place le servo a sa nouvelle place
loop while position > 75 ' Tant qu'on a pas atteint la valeur on continue
EN1 = 0 ' Une fois le servo à sa position On met le flag a 0
return ' On retourne au programme principal
#Picaxe 08M2
'Entrées Sorties ------------------------
symbol servo1 = C.1
symbol servo2 = C.2
symbol capteur1 = pinC.3
symbol capteur2 = pinC.4
'Variables ------------------------------
symbol position1 = b1
symbol position2 = b2
symbol fdc1 = b3
symbol fdc2 = b4
'initialisation--------------------------
symbol delai = 10
position1 = 90
position2 = 140
servo C.1,position1 'init servo 1 vers milieu de sa course
servo C.2,position2 'init servo 2 vers milieu de sa course
main:
'SERVO 1 ========= pos0 = 75 --> 100 ==================
if capteur1=1 then
fdc1=100 'fin de course à atteindre
if position1 < fdc1 then 'si position pas atteinte
inc position1 'on incremente
pause delai 'on attend
servopos servo1,position1 'nouveau positionnement du servo
else ' quand le servo est en position fin de course,
pulsout servo1,fdc1 ' on passe en pulsout
endif
else
fdc1 = 75 'fin de course à atteindre
if position1 > fdc1 then
dec position1
pause delai
servopos servo1,position1
else
pulsout servo1,fdc1 ' quand le servo est en position fin de course,
endif
endif
'SERVO 2 ============ pos0 = 150 --> 125 ===============
if capteur2 =1 then
fdc2=125 'fin de course à atteindre
if position2 > fdc2 then
dec position2
pause delai
servopos servo2,position2
else
pulsout servo2,fdc2 ' quand le servo est en position fin de course,
endif
else
fdc2 = 150 'fin de course à atteindre
if position2 < fdc2 then
inc position2
pause delai
servopos servo2,position2
else
pulsout servo2,fdc2 ' quand le servo est en position fin de course,
endif
endif
goto main
bien sur , un delay pour chacunPeut-on mettre deux delais ?
bien sûrje voyais plus un pour la course vers la position 1 et un autre delay pour le retour... Mais je suppose que ca marche aussi...
sur quel servo, et dans quelle position ?Et pour ces acouts, ca peut venir d'où à votre avis ?
Nein ! Un servo jitte si il ne rçoit PAS assez de mises à jour, ou si ses mises à jours sont mal fichues (Cas bien connu des picaxes, et certains servos le supportent mieux que d'autres. Pour info, les Futabas vont très bien, les Models Craft beaucoup moins bien).et le servo recoit certainement trop de mise à jour
je ne vois pas pourquoi le phénomène se produirait uniquement quand les servos sont dans cette position car les instructions sont les mêmes pour les deux extrêmes.les servo pour le modèle final, seront des feetech...
Mais vu la réaction des servos actuel, je pense qu'il y a quand même un truc à modifier dans le programme non ?
Ca le fait moins mais ca le fait, et lors de la fermeture du tor les servos bouge légèrement saccadés...tu as essayé en mettant une pause de 10ms avec le rebouclage , que je l'avais dis ?
?
Avec ton code pas de probleme, juste le retour trop rapide...ca donne quoi avec mon programme ?
L'autre code , celui pour un seul servo , tiens:Avec ton code pas de probleme, juste le retour trop rapide...
#Picaxe 08M2
'########################## configuration ################################
symbol position = b1
symbol inter1 = pinC.4
symbol EN1 = b11
'########################## Initialisation ################################
setfreq m4
EN1 = 0 ' Au démarrage on met le flag à 0
position = 75 ' On rentre la position d'origine
servo C.1,position' On place le servo
'#################################################################################
'########################## Programme Principal ############################
'#################################################################################
do
if inter1 = 1 and EN1 = 0 then gosub servo1up ' Si l'inter est à 1 et que le flag à 0 cela signifie que c'est la premiere fois qu'on bascile l'inter
if inter1 = 0 and EN1 = 1 then détecter servo1down ' Si l'inter est à 0 et que le flag à 1 cela signifie que c'est la premiere fois qu'on bascile l'inter
pulsout C.1, position ' on positionne le servo avec pulssout pour la stabilité
pause 10 ' pour ralentir la Mise à Jour
loop
'#################################################################################
'########################## Programme Secondaire ###########################
'#################################################################################
servo1up:
do
inc position ' On augmente de 1 la position
pause 10 ' on fais une pause pour ralentir
servopos C.1,position ' On place le servo a sa nouvelle place
loop while position < 100 ' Tant qu'on a pas atteint la valeur on continue
EN1 = 1 ' Une fois le servo à sa position On met le flag a 1
return ' On retourne au programme principal
'--------------------------
servo1down:
do
dec position ' On descend de 1 la position
pause 10 ' on fais une pause pour ralentir
servopos C.1,position ' On place le servo a sa nouvelle place
loop while position > 75 ' Tant qu'on a pas atteint la valeur on continue
EN1 = 0 ' Une fois le servo à sa position On met le flag a 0
return ' On retourne au programme principal