Depuis un moment et apres multipes recherches, je suis arrivé a trouver et modifié un code qui fonctionne comme je lui demande lol
Cependant, il me reste un problème... J'aimerai que lorsque mon arduino recevra une info sur une entree ( info recue d'une rapsberry ) l'arduino execute le sketch que je lui demande. Malgré les differentes tenatives, je reste toujours dans l'echec.
Attention, exemple : si arduino recoit une impulsion sur l'entrée 2, il executera 1 mouvement
si il recoit une impulsion sur entree 3 il executera un autre mouvement, et ainsi de suite.
Y aurait il un expert qui aurait la gentillesse de m'aider?
Voici mon code
void setup() //initialise la communication
{
Serial.begin(9600);
}
void homes()//retours aux positions initiales
{
Serial.print("#1P1000T500\r\n");
delay(1000);
Serial.print("#2P1300T500\r\n");
delay(1000);
}
void back1()//mouvements des bras
{
Serial.print("#1P1500T500\r\n");
delay(1000);
Serial.print("#2P2300T500\r\n");
delay(1000);
}
void back2()//mouvement des bras
{
Serial.print("#1P2330T500\r\n");
delay(500);
Serial.print("#2P1500T1000\r\n");
delay(500);
}
void loop()
{
homes();
delay(1000);
back1();
delay(1000);
back2();
delay(500);
}
Materiel utilisé :
-Arduino mega 2560
-carte smarian mini usb 16 servo
-servomoteurs
-raspberry pi3
=> pour info, les données se transmettent ia Tx Rx
Salut
Je ne vois rien dans ton code qui permettent de lancer tes fonctions depuis l'extérieur.
Tu peux regarder du côté des interruptions. C'est ce que je connais qui s'en approche le mieux.
Quel type de donnés tu reçois ?
Si tu reçois uniquement un courant sur tes pins alors c'est comme si tu avais un bouton en entré. Tu dis, si le courant est reçu (comme un bouton appuyé) sur la broche 2, alors faire tel action, etc...
Si votre Raspberry va passer l'éntrée à LOW pour activer, soit à HIGH pour désactiver (et il faut bien sûr que ce soit du 5V partout et que les GND soient reliés entre l'arduino et le RPI) alors ça se comporte comme un bouton avec un PULLUP.
Une solution toute simple si le signal que vous recevez est l'équivalent d'un bouton connecté sur une des pins de l'arduino et si vous ne voulez pas vous embêter vous pouvez prendre cette libraire (ou toute autre similaire) qui gère les boutons (cf le début de mon tuto sur les machines à états où je parle de cette librairie) et ça vous donnerait un code du genre (absolument non testé!)
#include <OneButton.h> // on inclut la librairie https://github.com/mathertel/OneButton
const byte brocheHome = 2;
const byte brocheBack1 = 3;
const byte brocheBack2 = 4;
OneButton boutonHome(brocheHome, true); // true pour dire qu'on est en INPUT_PULLUP, donc actif LOW, connecté à GND
OneButton boutonBack1(brocheBack1, true); // true pour dire qu'on est en INPUT_PULLUP, donc actif LOW, connecté à GND
OneButton boutonBack2(brocheBack2, true); // true pour dire qu'on est en INPUT_PULLUP, donc actif LOW, connecté à GND
void homes()//retours aux positions initiales
{
Serial.print("#1P1000T500\r\n");
delay(1000);
Serial.print("#2P1300T500\r\n");
delay(1000);
}
void back1()//mouvements des bras
{
Serial.print("#1P1500T500\r\n");
delay(1000);
Serial.print("#2P2300T500\r\n");
delay(1000);
}
void back2()//mouvement des bras
{
Serial.print("#1P2330T500\r\n");
delay(500);
Serial.print("#2P1500T1000\r\n");
delay(500);
}
void setup()
{
Serial.begin(9600);
boutonHome.attachClick(homes);
boutonBack1.attachClick(back1);
boutonBack2.attachClick(back2);
}
void loop()
{
// On vérifie l'état des boutons, ce qui déclenche les appels aux fonctions lors du relâchement du bouton (ie transition HIGH --> LOW ---> HIGH = déclenchement)
boutonHome.tick();
boutonBack1.tick();
boutonBack2.tick();
// ici vous pouvez faire autre chose si ça ne prend pas trop longtemps
// .....
}