Salve, sto cencando di far comunicare il mio PC con Arduinouno.
In particolare devo far inviare la lettera “a" attraverso un programma in python ad ARDUINOUNO che la riceve attraverso un programma in C e la stampa nel monitor dell' IDE. Riporto di seguito il codice in python che invia la lettera “a”:import time
import time
import serial
try:
ser = serial.Serial("/dev/ttyACM0", 115200)
if ser.is_open:
print ("\n Il collegamento è stato effettuato con successo \n")
#ser.close()
except:
print("""
Collegamento fallito,
controllare se il dispositivo è stato connesso correttamente,
o di avere inserito il nome della porta corretto \n""")
dato = "aaa"
while 1:
time.sleep(1)
ser.write(dato)
Riporto di seguito il codice che riceve le lettera “a” lato ARDUINOUNO:
#include <TimerOne.h>
#define MAX_BUFFER 10
void read_USB();
int elemento_buffer=10;
char buffer[MAX_BUFFER];
void setup(void)
{
Serial.begin(115200);
while (!Serial)
delay(10); // will pause Zero, Leonardo, etc until serial console opens
Serial.println("OK!");
Timer1.initialize(500000); //testa se ci sono comandi sulla USB ogni 1msec
Timer1.attachInterrupt(read_USB); // read USB to run every 0.15 seconds
}
void loop()
{
while((Serial.available())>0)
{
// se c'è qualche byte da leggere, allora...
char carattere=Serial.read(); // ...leggi byte
if(carattere=='\r') continue;
if(carattere=='\n')
{
buffer[elemento_buffer]=0; // inserisco un carettere NULL per indicare la fine dell'array
elemento_buffer=0; // resetto l'indice dell'array
break; // esco dal ciclo while
}
buffer[elemento_buffer]=carattere; // creo l'array di caratteri
elemento_buffer++; // incremento l'indice del buffer
if(elemento_buffer==MAX_BUFFER) // se si raggiunge il limite di byte del buffer allora...
{
elemento_buffer=MAX_BUFFER-1; // ...sovrascrivi quello precedente
}
if(buffer[0] == 'a')
{
Serial.println(buffer);
}
buffer[0]='0'; //pulisci buffer
}
}
void read_USB()
{
if((Serial.available())>0)
{
buffer[0]='0';
}
}
Avviando il programmino in python ottengo il seguente errore:
Il collegamento è stato effettuato con successo
Traceback (most recent call last):
File "/home/fabio/Scrivania/prova.py", line 23, in <module>
ser.write(dato)
File "/usr/local/lib/python3.10/dist-packages/serial/serialposix.py", line 616, in write
d = to_bytes(data)
File "/usr/local/lib/python3.10/dist-packages/serial/serialutil.py", line 65, in to_bytes
raise TypeError('unicode strings are not supported, please encode to bytes: {!r}'.format(seq))
TypeError: unicode strings are not supported, please encode to bytes: 'aaa'
Il collegamento tra i due sistemi avviene ma mi da errore sulla write() e non capisco perchè. Aiutatemi per favore