Pour ce faire, j'ai besoin que l arduino recoivent une implusion et lancer le servo moteur en delay 5 en angle 90 degre. ( pour bouger une machoire non stop jusqu'a une autre impulsion)
Alors j'ai mis de nouveau longtemps a revenir mais c'est pour une bonne raison lol
Mon ami et moi avons beaucoup travailler notre programme.
Pour vous expliquer, nous recevons une information exterieur qui est censée mettre en route le servo moteur lorsque je le lui demande.
Sauf que, au point ou nous en sommes, mon moteur tourne sans arret.... il demarre bien quand je le lui demande mais ne s'arrete pas
pourriez vous m aider ? ce serait super sympa, je vous colle mon code ci dessous:
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// a maximum of eight servo objects can be created
int pos = 0; // variable to store the servo position
int F = 6;
int G = 7;
int H = 8;
int I = 9;
int J = 10;
int K = 11;
int valI = 0;
int valJ = 0;
int valK = 0;
int led2 = 41;
int led3 = 42;
Votre code est à moitié en italique parce que le logiciel du forum a interprété une partie de votre code (un [i]) comme étant une instruction de formatage ce qui rend le tout illisible
Lisez les posts épinglés en haut du forum et corrigez votre post en utilisant les balises de code
Sinon pour votre question c’est assez simple
while (valI == HIGH)
{servo1();}
comme rien dans l’exécution de servo1() ne modifie valI, une fois rentré dans la boucle vous n’en sortez plus jamais...
je travail avec damien sur son projet et je vais essayé d'expliqué de manière plus claire ce que l'on veut faire et où on veut allé
donc à la base nous avons un sketch qui fonctionne bien, celui-ci nous à recevoir des données en generical serial depuis une raspberrypi, l'arduino reçoit les info et il allume des led.
voici le code:
int F = 6;
int G = 7;
int H = 8;
int i = 0;
int incomingByte[3];
void setup()
{
Serial.begin(57600);
pinMode(F, OUTPUT); // sortie digital sur la pin6
pinMode(G, OUTPUT); // sortie digital sur la pin7
pinMode(H, OUTPUT); // sortie digital sur la pin8
}
void loop()
{
if (Serial.available() >= 3)
{
for (int i = 0; i < 3; i++)
{
incomingByte[i] = Serial.read();
}
digitalWrite(F, incomingByte[0]); // led1
digitalWrite(G, incomingByte[1]); // led2
digitalWrite(H, incomingByte[2]); // led3
}
}
maintenant le but et de pouvoir transformer les infos reçue en incomingbyte pour déclencher un sketch qui contrôle des servomoteur.
voici le code que j'avais essayé au départ (car celui de damien est une alternative en essayant de faire des boutons digital par des pontages entre pin) mais je pense qu'il y a moyen de faire beaucoup plus simple, c'est juste que nous sommes encore débutant avec l'arduino.
#include <Servo.h>
Servo myservo; // créer un object servo pour controler le servo
int pos = 0; // variable pour controler la position du servo
int A = 0; // déclaration de la variable A
int led2 = 7; // affectation de la led2 à la pin7
int led3 = 8; // affectation de la led2 à la pin8
int i = 0;
int incomingByte[3];
void setup()
{
Serial.begin(57600);
myservo.attach(6);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
}
void loop()
{
if (Serial.available() >= 3)
{
for (int i = 0; i < 3; i++)
{
incomingByte[i] = Serial.read();
} // Arduino pins
A = incomingByte[0]; // affectation des données incomingbyte[0] à la variable A
digitalWrite(led2, incomingByte[1]); // led2
digitalWrite(led3, incomingByte[2]); // led3
}
if (A == HIGH)
{servo1();}
}
void servo1(){
for(pos = 70; pos < 130; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(50); // waits 15ms for the servo to reach the position
}
myservo.write(130);
delay (2000);
for(pos = 130; pos > 70; pos -= 1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(50); // waits 15ms for the servo to reach the position
}
}
voilà le problème, dés que le moteur s'enclenche, le reste ne suis pas et le moteur ne s'arrête pas.
j'espère avoir pu être claire et espérant avoir de l'aide pour nous aider à grandir dans le monde l'arduino.
faire le traçage de la variable A, je crois comprendre, je dois donc sortir les lectures de données de serial.begin par seria1.begin. mais pour connecter serial1.begin à mon pc j'utilise un adaptateur rs232?
ou il y a un notre moyen?
Et moi pour ma part, vu que je n'ai pas le niveau pour commencer les serial print, j'ai beau tenter de modifier le code
while (valI == HIGH)
{servo1();}
de mille et une facon mais rien ne se passe grrrrrrrrrr
j'ai tenter 30 facons differente de lui dire de se stopper mais rien n'y fait... toujours en me disant que la suivante sera la bonne mdr mais non concluant...
il ne nous manque que cela pour mettre enfin notre projet a execution tout en ayant les enfants du quartier sur le dos mdr. Je sais que donner la solution n'est pas dans vos habitudes, je sais que la meilleur facon d'apprendre est de rechercher , encore et encore
Mais une facon d'apprendre est aussi de recevoir la réponse avec les explications qui vont avec ce qui permet aussi de comprendre notre erreur et en tenir la lecon
alors si qq a ce niveau et se sent l'ame généreuse, se sentant l'envie d'aider deux pauvres petits malheureux mdr, ce serait , SUPER MEGA TROP TOP GENIAL mdr
allez, deja un grand merci de votre suivi et de votre aide deja apportée
Désolé j’avais mal lu hier soir et pas vu le if au lieu de while - vous relisez bien la donnée
La question est plutôt de savoir si c’est la bonne donnée versus ce que vous envoyez : des octets ou de entiers ? un entier c’est plusieurs octets donc si côté emettteur vous envoyez deux ou 4 octets pour un int, là côté récepteur vous n’en lisez qu’un seul par entier émis
La seconde question est sur le timing. si pour une raison quelconque votre arduino rate le premier octet envoyé il est décalé « à vie » sur la réception. il est généralement clé dans un protocole de communication d’indiquer le début (et éventuellement la fin) d’une trame de données. par exemple envoyer [‘#’ V1 V2 V3] et vous attendez d’avoir reçu le ‘#’ avant de lire les 3 valeurs dans l’ordre
Pouvez vous expliquer pourquoi vous avez besoin de RPI et de l’arduino?
ça fait plaisir de voir que je ne suis pas le seul matinal
la rpi envoit des infos de type séquenceur musical.
dans notre cas, c'est configurer pour des guirland normal donc normalement on/off il est possible que le programme envoie 255 pour ON est du 0 pour OFF car il possible avec d'autre configuration d'utiliser des guirlande rgb.
mais comment le savoir?
pour le timing le programme est 50 fps.
maintenant quand exécute le programme en enlevant le servo et faire fonctionné qu'avec des leds ça tourne nickel(bon timing) -> arduino reçoit l'info et il allume aussi vite les leds. mais dés que je remplace la led par le servo, il me fait la séquence servo1 quand on lui demande mais le programme ne s'arrête pas et il n'envoie pas l'info à la led2 ni led3...
encore une fois et cela a été dit plus haut il faut s’intéresser a ce que vous envoyé et a ce que vous recevez (type de la donnée) une lettre un groupe de lettre un chiffre ou autre chose (code hexa ....)
et évidemment dans la comparaison ne pas comparer des cerises avec des bananes car même s'il y en a 1 kg de chaque c'est pas pour autant que la comparaison va donner une valeur vraie ou fausse ! il faut donc tracer le résultat de cette comparaison car a mon avis c'est la que ce trouve le problème des que vous recevez qq chose ca boucle et ca ne peut plus sortir car le résultat de la comparaison est toujours le même ...
il est possible que le programme envoie 255 pour ON est du 0 pour OFF
Vous n'avez qu'un fil - comment envoie-t-il 255 ? une tension de 5V ?
faudrait mesurer
le fait que votre premier programme fait clignoter les LEDs ne vous dit pas qu'elle clignote correctement par rapport à ce que vous envoyez et dans l'ordre. à moins que vous ayez vérifié cela?
Oui nous utilisons un prg qui nous permet de sequencer l'arret et la mise en route de nos leds. Donc si nous lui disons qu'elle doit allumer la led1 a 4sec et l'eteindre a 6secondes, ensuite allumer et eteindre la suivante telle que je le lui demande, tout se passe exactement comme je le demande et au moment ou je le demande.
Nous avons donc creer une sequence pour le servo en se disant BINGOOOOOOOOO
je vous dis pas l'ampleur de notre joie quand le servo s'est allumé et notre desillution lorsque celui-ci ne s'arretais plus lol...
D'ou notre appel à l'aide.
Deja un super grand merci de votre aide car je sais que ce n'est pas evident d'aider sans voir concretement le projet
Je vais voir avec Mickali pour vos propositions car cela sort reelement de mes competences ( je suis en apprentissage mdr) et je reviens vers vous pour vous en donner le resultat
Faudrait faire un petit programme avec software Serial qui écoute ce que dit le RPI et imprime sur votre PC comme ça vous saurez vraiment ce qu’il en est
il est aussi possible aussi de simuler le RPI en mode console et envoyer a l'arduino ce que le RPI est censé lui envoyer ce qui permet de mettre des traceurs 'console' dans tout le code