Ubuntu non mi carica più gli sketch su Arduino?

Ciao, dopo preparato hardware per il nuovo esperimento e creato il nuovo sketch, compilato senza errori mi accingo caricare lo sketch su Arduino niente da fare un sacco di errori java e comunicazione seriale con la porta USB durante uploading che non capisco!
Con il precedente esperimento tutto ok, ho provato a reinstallare il programma niente ho ricaricato anche lo sketch del precedente esperimento problema sempre uguale, con la versione Windows funziona nessun problema, ma con Ubuntu zero che fare?

Done compiling

Binary sketch size: 990 bytes (of a 32256 byte maximum)

processing.app.SerialException: Error opening serial port ‘/dev/ttyACM0’.
at processing.app.Serial.(Serial.java:146)
at processing.app.Serial.(Serial.java:76)
at processing.app.debug.Uploader.flushSerialBuffer(Uploader.java:75)
at processing.app.debug.AvrdudeUploader.uploadViaBootloader(AvrdudeUploader.java:93)
at processing.app.debug.AvrdudeUploader.uploadUsingPreferences(AvrdudeUploader.java:56)
at processing.app.Sketch.upload(Sketch.java:1603)
at processing.app.Sketch.exportApplet(Sketch.java:1568)
at processing.app.Sketch.exportApplet(Sketch.java:1524)
at processing.app.Editor$DefaultExportHandler.run(Editor.java:2293)
at java.lang.Thread.run(Thread.java:679)
Caused by: gnu.io.UnsupportedCommOperationException: Invalid Parameter
at gnu.io.RXTXPort.setSerialPortParams(RXTXPort.java:171)
at processing.app.Serial.(Serial.java:136)
… 9 more
processing.app.debug.RunnerException: Error opening serial port ‘/dev/ttyACM0’.
at processing.app.debug.Uploader.flushSerialBuffer(Uploader.java:99)
at processing.app.debug.AvrdudeUploader.uploadViaBootloader(AvrdudeUploader.java:93)
at processing.app.debug.AvrdudeUploader.uploadUsingPreferences(AvrdudeUploader.java:56)
at processing.app.Sketch.upload(Sketch.java:1603)
at processing.app.Sketch.exportApplet(Sketch.java:1568)
at processing.app.Sketch.exportApplet(Sketch.java:1524)
at processing.app.Editor$DefaultExportHandler.run(Editor.java:2293)
at java.lang.Thread.run(Thread.java:679)

Il sistema ti sta dicendo che non riesce ad aprire la porta /dev/ttyACM0, quella su cui viene normalmente montato l'Arduino.

Possono esserci diverse cause, tra cui: 1) hai uno sketch sull'Arduino che occupa la seriale? Ad esempio, vedi i led RX/TX accesi fissi? 2) hai controllato che il sistema non ti abbia montato l'Arduino su un'altra porta? Controlla nell'IDE in Tools/Serial port che l'Arduino non sia visto come /dev/ttyACM1, per esempio

1) hai uno sketch sull'Arduino che occupa la seriale? Ad esempio, vedi i led RX/TX accesi fissi? - Si prima di caricare lo sketch con Windows avevo uno sketch che mi dava dati in TX da Arduino al Serial Monitor sul PC e mi restava acceso o lampeggiante TX, ma ora ho caricato il nuovo sketch da Windows che non contiene nessuna trasmissione RX TX da Arduino al PC, ed entrambi i LED sono spenti, ma ricaricando da Ubuntu lo stesso sketch mi da il medesimo errore! - Ne caso avessi i uno o entrambi i LED accesi o lampeggianti che dovrei fare per evitare l'interferenza?

2) hai controllato che il sistema non ti abbia montato l'Arduino su un'altra porta? Controlla nell'IDE in Tools/Serial port che l'Arduino non sia visto come /dev/ttyACM1, per esempio - Si ho controllato anche questa possibilità ma non mi da altre porte? - ho provato anche con uno sketch vuoto e reinserire il cavo USB, mi da stessa porta e nessun'altra, anzi premendo Serial Monitor mi da ancora errore sulla connessione della porta, (questo test non so se serviva!) ma visto che avevo impostato il baud rate a 14400 previsto per la trasmissione dei dati dello sketch precedente. invece dei 9900 di default, ma non so se è si ripristina o se era importante ripristinare il valore di default, e come cambiarlo ora visto che Serial Monitor non si apre a causa dell'errore?

Bene, il problema è nato tutto dallo sketch che occupa la seriale.
Arduino trasmette appena avviato, il problema è il convertitore USB/seriale (quel chippettino piccolo a DX del connettore USB). Ha un buffer di 128 byte: se l’Atmega riempie quel buffer prima che tu colleghi l’Arduino al PC ed apri il serial monitor, il buffer si satura e la seriale resta occupata col risultato che il SO non riesce più ad aprire la connessione verso Arduino.

Quindi:

  1. inserire SEMPRE un delay(3000) nel setup() PRIMA di Serial.begin(xxx) in modo da darti il tempo di collegare la scheda ed aprire un canale di ricezione.
  2. nel caso ti risucceda, basta aprire l’IDE, caricare lo sketch Blink o qualunque altra cosa che NON usa la seriale, collegare l’Arduino tenendo i pusante RESET premuto, poi cliccare con l’altra mano sull’icona “upload” e solo dopo questa azione rilasciare il pulsantino di reset. L’IDE riuscirà a comunicare con l’Arduino prima che la seriale si blocchi ed a programmare lo sketch senza seriale.

-Ho provato sempre con lo stesso errore!
-Ho ricaricato anche lo sketch precedente mettendo un delay(3000) prima di Serial.begin(XXXX) come suggerito con Windows caricato con successo e poi con Ubuntu ho ricaricato blink…ma nulla!
-Dal terminale di Ubuntu con lsusb e lsusb -v la porta risulta collegata ad Arduino sia prima che dopo, anche se dalla IDE dopo l’errore sparisce da Tools>Serial Port!

  • Visto che di recente ho aggiornato il kernel di Ubuntu sono ritornato alla versione precedente, ma nulla!

Ps. comunque i due esperimenti sono stati svolti di seguito, a parte vedere funzionamento del primo e il seguente smontaggio dei componenti dell’esperimento e il montaggio dei componenti del nuovo esperimento e la scrittura del nuovo sketch sul PC e caricarlo, sul PC non è stato fatto nulla.

Ma il problema non è lato PC, è lato Arduino. Se l'Arduino occupa la seriale, l'IDE non riesce ad aprire una comunicazione con la scheda e, di conseguenza, non riesci a programmarla.

Ora, tu hai detto che quando avevi questo problema, prima di riflashare la scheda da Windows, avevi il led TX acceso (TX=trasmissione) quindi l'Arduino STAVA occupando la seriale.

Si prima di caricare lo sketch con Windows avevo uno sketch che mi dava dati in TX da Arduino al Serial Monitor sul PC e mi restava acceso o lampeggiante TX

Quel delay(3000) serve per attaccare la scheda al PC ed aprire la seriale. Oppure per aprire il serial monitor prima che parta la trasmissione dei dati. Devi comunque fare qualcosa PRIMA che finisca quell'intervallo.

PS: ma che Ubuntu hai?

Ubuntu 11.04, ma è sempre funzionato ! Ma se è Arduino perchè in Windows non ho problemi, non potrebbe essere la IDE che non riesce a mantenere la comunicazione o qualche libreria o java? Potrebbe essere il driver installato in Ubuntu FTDI?

A parte che Linux non ha bisogno dei driver, la UNO non ha il chip FTDI.

Su Windows la gestione della seriale è differente, può darsi che questo SO riesca ad inviare il segnale di reset all'Arduino anche se la seriale è bloccata. Così facendo riesci a programmare il chip. Cmq è un problema di tempi perché se fai come ti ho detto io e "becchi" il momento giusto in cui rilasciare il pulsantino di reset, recuperi sempre l'Arduino piantato con il led TX acceso.

Comunque da quando ho programmato da Windows non ho più led accesi ne RX ne TX, teoricamente dovrebbe andare?
Ho un’altra Arduino Uno (mai usata) ho provato a caricare blink con Ubuntu mi da lo stesso problema!
Facendo lsusb dal terminale di Ubuntu mi dice che la porta è occupata ma non c’è scritto da cosa ad esempio “Arduino Uno”, ma indica solo ID ossia ID 2341:0001 e cosi anche per quella nuova!
Non c’è il FTDI sulla Uno, che cosa monta ?

Forse manca qualcosa su Ubuntu o si è corrotto, ma cosa?

La UNO monta un Atmega8U2 fino alla versione 2 della scheda, dalla 3 monta un Atmega16U2.

Ricontrolla di aver installato tutta la toolchain e di avere i permessi come utente per accedere alla periferica. http://www.arduino.cc/playground/Linux/Ubuntu

Ciao Leo, ho risolto il problema era un errore del runtimer del java....ora tutto bene reinstallando

Bene, mi fa piacere :D

Comunque ho imparato qualcosa, di mettere un delay prima della configurazione per i dati seriali da arduino al pc con il serial monitor che non appare da nessuna parte a quanto sembra!

Il monitor seriale non si apre in automatico, ma il trucco del delay ne ammortizza i danni.

Ma chi sa ? magari un giorno il serial monitor si apre in automatico quando trova la funzione di chiamata o di configurazione al monitor..... ritornado, ma se veramente avessi avuto un problema di comunicazione per la coda o il buffer pieno della seriale mi dava tutte quelle righe di debuger il java(xxx)?

Etti: ritornado, ma se veramente avessi avuto un problema di comunicazione per la coda o il buffer pieno della seriale mi dava tutte quelle righe di debuger il java(xxx)?

Non ho capito...