Salve,
devo inviare ad arduino dei comandi tramite seriale.
dal terminale do:
echo -n 1 > /dev/ttyACM0
mi sono accorto però che finchè non apro almeno una volta il monitor seriale da Arduino IDE c'è qualcosa che non funziona, nel senso che vedo lampeggiare i led sulla scheda ma arduino non reagisce come dovrebbe. una volta aperto e chiuso il monitor seriale dell'IDE invece il tutto funziona perfettamente.
appena riavvio il pc il problema si ripresenta.
immagino che l'IDE configuri qualche parametro tipo bitrate..
interessante comportamento,
che arduino stai usando ? originale o con ch340 ?
effettivamente il serial monitor dovrebbe essere un rpogramma come un altro, non e' che blocca la counicazione.
Cosa succede se metti in stampa un hello world e lato pc apri un altro monitor seriale, non quello arduinico ? un qualsiasi altro sw per la lettura seriale dei dati
Per Arduino basta questo comando "sudo stty -F /dev/ttyS0 57600", al posto di ttyS0 mettere la seriale di Arduino e al posto di 57600 i bps desiderati (quelli impostati sullo sketch), tutto il resto va bene da default di Linux.
questo scriptino php non funziona se prima non ho aperto manualmente il monitor seriale da Arduino IDE.
[la duplicazione dei comandi per i due dev è per evitare che scollegare e ricollegare arduino - e quindi assegnare un nuovo id alla periferica - faccia saltare il tutto]
Usare una marea di exec() da PHP per parlare con la porta seriale è a dir poco orribile. Almeno le scritture potresti rimpiazzarle con delle normali scritture su file.
SukkoPera:
Usare una marea di exec() da PHP per parlare con la porta seriale è a dir poco orribile. Almeno le scritture potresti rimpiazzarle con delle normali scritture su file.
Infatti non ho detto che il problema è PHP, ho detto che è brutto fare le cose in quel modo, ma ciò non ha direttamente a che fare col tuo problema :).
Però usare la libreria potrebbe aiutare, magari basta aprire la porta in lettura.
A me, ma un milione di anni fa, cioè all'epoca di arduino 2009. Ora come ho risolto non me lo ricordo, il forum dovrebbe contenere come ho risolto, ma non lo trovo.
A memoria (ricordo qualcosa vagamente) ricordo che coinvolto il bootloader, poi io l'ho eliminato perché per programmare il chip uso avrispmkII; proverò ancora a cercare sul fourm per un pò.
Ma non è che facendo delle scritture singole, tramite riga di comando, viene riavviato l'arduino tramite il boot loader?
Il convertitore usb seriale fatto con l'U2 usa i segnali di handshake per resettare il 32
Bisogna vedere cosa combina il kernel quando si apre e chiude la porta al volo, se cambia lo stato di rts/cts e pin vari resetta l'arduino e lo sketch non riceve i comandi perché è in esecuzione il bootloader.
Per le prove consiglio minicom preconfigurato senza handshake hardware (senza nessun handshake).
Appena installato sulla mia suse minicom ha l'handshake hardware attivato di default e manco trasmette/riceve i caratteri se ci sono solo i pin tx/rx collegati.
Poi aggiungere all'inizio dello schetch il codice per accendere un led per un secondo e poi spegnerlo appena dopo il reset.
Così si vede bene se viene resettato l'arduino.