Bonjour à tous,
Je débute dans le monde d'Arduino, et je me retrouve face à un souci que je ne parviens pas à résoudre.
J'utilise : - Raspberry Pi 3 B => Raspbian Stretch, IDE Arduino 1.8.5, Pyserial 3.4
-
Arduino Mega 2560
-
Liaison USB entre la Pi et l'Arduino
Ce que je cherche à faire (objectif final) : du tracking d'objet en envoyant des données chiffrées (la position du barycentre d'une tâche colorée par exemple) à l'Arduino pour contrôler des servo moteurs. Les données sont récupérées à l'aide d'un traitement d'image effectué par la Pi.
Là où j'en suis : envoyer à l'Arduino l'information "compteur" pouvant prendre la valeur 1 ou 2. Cette action est réalisée par un code python sur la Pi, avec comme objectif de contrôler la LED 13 de l'Arduino (1 => la led s'allume & 2 => la led s'éteint).
Ce qui me pose problème : le time.sleep(x) ... Pour x >= 1, il n'y a aucun souci, l'Arduino m'affiche avec le bon délai l'information envoyé par la Pi, la led s'allume / s'éteint quand elle le doit, et les leds Rx et Tx clignotent toutes les deux.
Toutefois, je vois mal le bon déroulement du tracking avec la nouvelle position du barycentre envoyée seulement chaque seconde ... J'ai donc essayé de mettre x < 1, et là, la led 13 ne s'allume plus et rien ne s'affiche dans le moniteur série
Ai-je oublié une chose importante ? Ai-je mal codé ? Est-ce seulement possible de passer sous la barre de 1 seconde ?
Bref, je suis coincé malgré avoir passé pas mal de temps à chercher une solution (peut-être suis-je passé à côté), et c'est pour cela que j'aimerais savoir si vous auriez des éléments de réponses à me proposer.
Ci-dessous vous trouverez mes codes Python et Arduino, ainsi que 2 images reflétant les 2 situations décrites ci-dessus.
Code python
import serial
import time
ser = serial.Serial('/dev/ttyACM0', 9600)
compteur = 1
while True:
if compteur < 2:
compteur = compteur + 1
else:
compteur = 1
ser.write(str(compteur).encode())
time.sleep(1)
Code Arduino
int message = 0;
void setup() {
pinMode(13, OUTPUT);
Serial.begin(9600);
}
void loop() {
if(Serial.available() > 0){
message = Serial.read() - '0';
Serial.println(message);
switch(message){
case 1:
digitalWrite(13, HIGH);
break;
case 2:
digitalWrite(13, LOW);
break;
}
}
}