Je l'avais expliquer au dessus mais, je recommence ;
Trois LEDs sont connectées à mon Arduino UNO. En communication série, je dis quel LED allumée ou éteindre, ce qui marche parfaitement avec mon PC. Le code :
const byte tailleMax = 50;
char message[tailleMax + 1];
const char marqueurDeFin = '#';
#define LED1 2
#define LED2 3
#define LED3 4
boolean ecouter()
{
static byte positionMsg = 0;
boolean cours = true;
while (Serial.available() && cours) {
int c = Serial.read();
if (c != -1) {
switch (c) {
case marqueurDeFin:
message[positionMsg] = '\0';
positionMsg = 0;
cours = false;
break;
default:
if (positionMsg <= tailleMax - 1) { message[positionMsg]= (char) c; positionMsg = positionMsg + 1; }
break;
}
}
}
return cours;
}
void setup() {
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
Serial.begin(9600);
Serial.println("Bonjour Raspberry");
}
void loop() {
if (! ecouter()) {
Serial.println(message);
if (!strcmp(message, "Allumer")) {
Serial.println ("Salut");
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, HIGH);
}
if (!strcmp(message, "Eteindre")) {
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
}
if (!strcmp(message, "1")) {digitalWrite(LED1, HIGH);}
if (!strcmp(message, "2")) {digitalWrite(LED2, HIGH);}
if (!strcmp(message, "3")) {digitalWrite(LED3, HIGH);}
if (!strcmp(message, "4")) {digitalWrite(LED1, LOW);}
if (!strcmp(message, "5")) {digitalWrite(LED2, LOW);}
if (!strcmp(message, "6")) {digitalWrite(LED3, LOW);}
}
}
Pour le Raspberry PI 3, c'est un peu plus compliqué. Je connecte également l'Arduino en USB, je peux lire un message, et en envoyer un.
Quand je lis le message venant de l'Arduino, je le lis sous la forme [b'message\r\n'] et, c'est dû au type du message voir plus haut.
Je peux très simplement en envoyer un en écrivant ser.write(b'Eteindre#'). Le résultat, toutes les LEDs s'éteignent. ser.write(b'Allumer#') allument toutes les LEDs et, l'Arduino repond [b'Salut\r\n'].
Néanmoins, cela ne fait pas ce que je voudrais car, si j'envoye le message et que je lis la réponse de l'Arduino, cela me renvoye le message envoyé :
J'envoie : (b'Allumer#')
Je reçois : (b'Allumer#')
Et, si je lis une deuxième fois, je lis ; (b'Salut')
Pourquoi le message envoyé est-il lu ?
Le code raspberry est :
#!/usr/bin/python3
import time
import serial
ser=serial.Serial('/dev/ttyACM0', 9600)
time.sleep(1)
print(ser.readline())
while True :
ser.write(b'Allumer#')
time.sleep(1)
input = ser.readline()
time.sleep(1)
print(input)
Pouvez-vous me dire quel est le problème avec la réception du message ?