Sono nuovo di Arduino (e della programmazione per computer in generale), quindi mi scuso se questa domanda sembra sciocca.
Una volta impostato un collegamento arduino-LED di base, ho problemi a inviare INTEGERS ad arduino attraverso la porta seriale. Posso facilmente inviare caratteri come 'm', 'o' e così via .. Tuttavia, se invio un numero sembra che semplicemente non lo capisca.
Ecco il codice Arduino, idealmente dovrebbe ottenere un valore dalla porta USB tramite Python o il monitor seriale e quindi regolare la luminosità del LED in base al valore. (il valore deve essere compreso nell'intervallo [0,255]).
NOTA: sto usando ARDUINO UNO e PYTHON 3
// --------------------------
int LED = 10;
int number;
void setup(){
pinMode(LED,OUTPUT);
Serial.begin(9600);
}
void loop(){
number = Serial.read();
Serial.print(number);
Serial.print('\n');
if(number == -1){
number = 0;
}
else if(number > 255){
number = 255;
}
else if(number < 0){
number = 0;
}
analogWrite(LED,number);
delay(1000);
}
Tuttavia, quando inserisco un valore nella porta seriale o tramite Python, ad esempio 0, mi dà 48 come risposta (che, cosa interessante, è il codice ASCII per 0!) E illumina il LED che non è ciò che dovrebbe accadere da allora a 0 il LED dovrebbe essere spento !! Mi manca qualcosa ma non riesco a trovare cosa ... Potresti dirmi cosa c'è che non va?
Ecco il codice che uso in Python:
import serial
import time
try:
arduino = serial.Serial(port,speed)
time.sleep(2)
print("Connection to " + port + " established succesfully!\n")
except Exception as e:
print(e)
#Note: for characters such as 'a' I set data = b'a' to convert the data in bytes
#However the same thing does not work with numbers...
data = 0
data = arduino.write(valueToWrite)
time.sleep(2)
arduino.close()
cosa sto facendo di sbagliato o incomprensione? Grazie.
arduino.write(chr(valueToWrite))