Salve
sto testando uno sketch che riceve sulla porta seriale da uno script in python un valore n o m (in ascii)
int val;
const int LED = 9;
void setup()
{
Serial.begin(9600);
Serial.flush();
pinMode(LED, OUTPUT);
}
void loop()
{
if (Serial.available())
{
val = Serial.read();
Serial.println(val);
if (val == 110) // n = 110 in dec
{
digitalWrite(LED,LOW);
}
else if (val == 109) //109 = m in dec
{
digitalWrite(LED,HIGH);
delay(3000);
digitalWrite(LED,LOW);
}
}
}
lo sketch è molto semplice ed accende solo un led.
quando lancio lo script in python però, non funge se non apro il serial monitor dell’ide di arduino.
quando lo apro invece funziona a dovere.
come posso fare a non dover stare sempre con il monitor acceso??
grazie a tutti XD
la cosa è parecchio strana... non puoi avere due pc connessi alla medesima porta seriale quindi non capisco come possa funzionare sia il serial monitor che il tuo programma python contemporaneamente.
Posta il programma così vediamo...
lo sript è questo... modificato a dovere ovviamente XD
import serial, sys, feedparser
#Settings - Change these to match your account details
USERNAME="XXXXXXX@gmail.com"
PASSWORD="PASSWORDXXWD"
PROTO="https://"
SERVER="mail.google.com"
PATH="/gmail/feed/atom"
SERIALPORT = "/dev/tty.usbserial-FTE3RS4J" # Change this to your serial port!
# Set up serial port
try:
ser = serial.Serial(SERIALPORT, 9600)
except serial.SerialException:
print "no device connected - exiting"
sys.exit()
newmails = int(feedparser.parse(PROTO + USERNAME + ":" + PASSWORD + "@" + SERVER + PATH)["feed"]["fullcount"])
ser.open()
# Output data to serial port
if newmails > 0:
ser.write("m")
print "some mail"
else:
ser.write("n")
print "no mail"
#print data to terminal
# Close serial port
ser.close()
si sono sotto linux.
se lo lancio senza il monitor attivo oppure anche senza IDE aperto mi stampa "some mail".
solo se apro il monitor mi si accende il led, e non capisco il perchè...
mmm però se ti stampa "some mail" sembra riuscire a collegarsi via seriale... dovrebbe inviare "m" via seriale e arduino dovrebbe accendere il led (m in ascii equivale a 109).
Se lasci aperto anche il serial monitor cosa vedi apparire?
se apro il serial monitor mi appare appunto 109 (m) e il led ci accende.
non credo che non comunichi via seriale perchè se ad esempio provo a scollegare arduino, mi segnala errore lo script.
ad occhio direi che il SO non invii il carattere ma lo tenga nel buffer... esiste sicuramente un comando per forzare lo svuotamento del buffer, ad esempio flush (attento che alle volte flush CANCELLA e non svuota il buffer), se proprio non c'è allora chiudere la comunicazione dovrebbe forzare anche lo svuotamento del buffer
ho usato Serial.flush nello sketch ma non credo che il problema sia sulla comunicazione seriale perchè ho osservato che quando lancio lo script senza il monitor aperto si accendono comunque i led RX e L.
Non riesco a capire perchè ci vuole il monitor aperto per accendere il led...
sisi lo settato se no mi avrebbe dato errore.
pyserial non ricordo... forse da repository cmq v 2.5
vorrei leggermi un po di documentazione sul sito ufficiale del progetto ma è due giorni che è down...