Bonsoir à tous,
J'essaie de connecter un arduino à mon PC via un script Python.
Le script Python doit envoyer une chaine de caractère représentant un entier, et l'arduino allume des leds sur le port F (de A0 à A7)
Lorsque j'essaie avec le moniteur série, les leds s'allument correctement, la représentation binaire de cet entier.
Par contre, lorsque j'utilise mon script Python simplifié, c'est l'échec.
Le script python est sensé n'envoyer qu'une chaîne de caractère représentant un entier.
Bien entendu, je reset l'arduino avant chaque tentative d’exécution du script Python.
J'ai beau modifier mon python en fonction de ce que j'ai lu un peu à gauche et à droite, mais je ne comprends pas pourquoi cela ne fonctionne pas.
Est ce que quelqu'un a déja eu ce genre de soucis? Et comment établir la communication entre les 2 programmes?
Code Arduino :
/* Source : https://forum.arduino.cc/index.php?topic=288234.0
Receive an int value, then lights up leds on port F (A0 to A7) */
#define port PORTF
const byte numChars = 32;
char receivedChars[numChars]; // an array to store the received data
boolean newData = false;
int value;
void setup() {
Serial.begin(9600);
Serial.println("<Ready!>");
//PORTF :
pinMode(A0, OUTPUT);
pinMode(A1, OUTPUT);
pinMode(A2, OUTPUT);
pinMode(A3, OUTPUT);
pinMode(A4, OUTPUT);
pinMode(A5, OUTPUT);
pinMode(A6, OUTPUT);
pinMode(A7, OUTPUT);
}
void loop() {
recvWithEndMarker();
showNewData();
}
void recvWithEndMarker() {
static byte ndx = 0; /*Index of array*/
char endMarker = '\n';
char rc; /*received char*/
while (Serial.available() > 0 && newData == false) {
rc = Serial.read();
if (rc != endMarker) {
receivedChars[ndx] = rc;
ndx++;
if (ndx >= numChars) {
ndx = numChars - 1;
}
}
else {
receivedChars[ndx] = '\0'; // terminate the string
ndx = 0;
newData = true;
}
}
}
void showNewData() {
if (newData == true) {
value = atoi(receivedChars);
/*
Serial.print("Resp :");
Serial.println(value);
*/
port = value; //light up leds
newData = false;
}
}
Script Python :
#!/usr/bin/env python
#-*-coding:utf-8-*-
#test d'encoding ascii : sans effet
import serial
def send(chaine):
""" """
cnx = serial.Serial(port = "/dev/ttyACM0",
baudrate = 9600
)
#cnx.flush() #Doesnt work
#cnx.write(chaine.encode()) #Doesnt work
cnx.write(chaine) #Doesnt work
cnx.close()
if __name__ == "__main__":
""" """
send("45")
Matériel et logiciels utilisés :
- Arduino IDE, V1.8.13,
- Board Arduino Mega 2560
- Python 2.7
- Système d'exploitation : Ubuntu 18.04
Par le passé, j'ai effectué de nombreux projets avec arduino, j'ai réussi à trouver des solutions sur le net.
Mais là, je sèche vraiment.
Merci de votre soutien.