Bonjour tout le monde
Je me présente, Vincent 48 ans, habitant Béziers, passionné de maquettes de planeurs anciens et webmaster du site et forum retroplane.
J'ai découvert il y a peu de temps Arduino, mais je n'ai aucune connaissance en programmation. j'ai eu l'aide du forum robot-maker, mais je suis actuellement encore bloqué par un problème, et j'ai l'impression que je leur ai fait perdre patience. Donc si vous le voulez bien, ce serait sympa de m'aider a finir un code d'animation, sur lequel je bloque
ce code est destiné à animer le pilote de ma dernière maquette
vous pouvez voir une petite vidéo de l'animation ici
http://www.retroplane.net/mira3/animation_pilote2.wmv
et le détail de la construction est ici
http://www.retroplane.net/mira3/page2.htm
je vous explique ce que je souhaterais faire
actuellement j'ai 3 servos dans mon pilote, tete, bras, machoire
toutes mes actions se font les unes derrière les autres
mais je voudrais pouvoir faire de petits mouvements de tête pendant que le pilote parle ou bouge le bras. il faut donc modifier le code pour que 2 servos "tete et machoire" marchent simultanément.
C'est surement tout simple et pourtant je n'y arrive pas, je vous met un bout de mon code avec les servos les uns derriere les autres, je vous serais tres reconnaissant si vous pouviez m'aider
#include <Servo.h>
Servo bras;
Servo tete;
Servo machoire;
int bra = 0;
int tet = 0;
int mache = 0;
int bouton = 2;
void setup()
{
bras.attach(3);
tete.attach(5);
machoire.attach(6);
Serial.begin(9600);
pinMode(bouton, INPUT);
}
void loop() {
if (digitalRead(bouton) == HIGH)
{
delay(2000); //pause 2s avant commencer animation
for(bra = 90; bra>=50; bra-=1) //leve le bras
{
bras.write(bra);
delay(30);
}
delay(300);
int compteur = 0;
while (compteur < 14) //bras va et vient de 7° sur la trompette
{
for(bra = 50; bra < 57; bra += 1) //baisse le bras
{
bras.write(bra);
delay(15);
}
for(bra = 57; bra>=50; bra-=1) //leve le bras
{
bras.write(bra);
delay(15);
}
compteur++;
}
{
delay(300);
for(bra = 50; bra < 90; bra += 1) //baisse le bras
{
bras.write(bra);
delay(20);
}
delay(100);
for(tet = 90; tet < 130; tet += 1) //bouge la tete
{
tete.write(tet);
delay(15);
}
for(tet = 130; tet>=50; tet-=1)
{
tete.write(tet);
delay(15);
}
delay(100);
for(tet = 50; tet < 110; tet += 1)
{
tete.write(tet);
delay(20);
}
delay(500); //commence à parler
int compteur = 0;
while (compteur < 20) //dis son nom
{
for(mache = 90; mache < 120; mache += 1)
{
machoire.write(mache);
delay(4);
}
for(mache = 120; mache>=90; mache-=1)
{
machoire.write(mache);
delay(4);
}
compteur++;
}
}
}
}
et le bout de ce code modifié, mais qui ne marche pas sans que je comprenne pourquoi, (j'ai commenté les problemes sur le code)
#include <Servo.h>
Servo bras;
Servo tete;
Servo machoire;
int bra = 0;
int tet = 0;
int mache = 0;
int bouton = 2;
void setup()
{
bras.attach(3);
tete.attach(5);
machoire.attach(6);
Serial.begin(9600);
pinMode(bouton, INPUT);
}
void loop() {
if (digitalRead(bouton) == HIGH)
{
delay(2000); //pause 2s avant commencer animation
for(bra = 90; bra>=50; bra-=1) //leve le bras
{
bras.write(bra);
delay(30);
}
delay(300);
int compteur = 0;
while (compteur < 14) //bras va et vient de 7° sur la trompette
{
for(bra = 50; bra < 57; bra += 1) //baisse le bras
{
bras.write(bra);
delay(15);
}
for(bra = 57; bra>=50; bra-=1) //leve le bras
{
bras.write(bra);
delay(15);
}
compteur++;
}
{
delay(300);
for(bra = 50; bra < 90; bra += 1) //baisse le bras
{
bras.write(bra);
delay(20);
}
delay(100);
for(tet = 90; tet < 130; tet += 1) //bouge la tete
{
tete.write(tet);
delay(15);
}
for(tet = 130; tet>=50; tet-=1)
{
tete.write(tet);
delay(15);
}
delay(100);
for(tet = 50; tet < 110; tet += 1)
{
tete.write(tet);
delay(20);
}
delay(500); //commence à parler
int compteur = 0;
while (compteur < 3) //dis son nom
{
for(mache = 90; mache < 120; mache += 1)
{
for(tet = 110; tet>=90; tet-=1) //je voudrais que la tête bouge en même temps que la machoire marche, mais avec ce code la tete bouge en boucle rapidement et la machoire marche hyper lentement, en fait les delay ne sont pas pris en compte et gènent et seulement apres le reste de l'animation se joue
{
machoire.write(mache);
delay(4); //ce sont ces delay qui genent l'anim, si je les enlève ça marcherait mais les servo s'actionnent trop rapidement
tete.write(tet);
delay(15); //ce sont ces delay qui genent l'anim, si je les enlève ça marcherait mais les servo s'actionnent trop rapidement
}
}
for(mache = 120; mache>=90; mache-=1)
{
machoire.write(mache);
delay(4);
}
compteur++;
}
}
}
}