Testato:
sia facendo partire swsync
Quando attivi la Vcom è normale che Arduino venga resettato, in realtà sfrutto questa cosa per automatizzare l'aggiornamento se è previsto durante il setup().
ma purtroppo anche semplicemente spegnendolo (sia fisicamente con il tasto X rosso, sia solo deselezionando il flag OPEN), sulla seriale arriva il reset.
Questo non dovrebbe succedere se prima di chiudere il programma viene disattivata la seriale, l'ho provato sia con XP che con W7 e non ho rilevato nessun autoreset alla chiusura.
Però potrebbe esserci un problema con qualche servizio, o driver, faccio prima a disattivare completamente il segnale DTR e resettare Arduino solo premendo il relativo tasto.
intendi deselezionando OPEN non deve resettarsi ?
io uso win7-64. faccio un riavvio e riprovo
Ma tu vedi il led L1 lampeggiare nel modo tipico del reset oppure vedi semplicemente del traffico su i due led Rx e Tx ?
Il secondo caso è quello normale quando chiudi la seriale.
riavviato e il problema persiste.
ho notato la differenza, avviene anche con serial monitor, a questo punto confermami se anche il serial monitor fa cosi' a te.
piu' precisamente
- apro il serial monitor: il led si 13 lampeggia, il boot e' completo, ci mette un po' di tempo a partire
- chiudo il serial monitor: il led 13 non lampeggia, c'e' solo un colpetto su led TX, il micro parte velocemente, pero' il SETUP viene rieseguito (ho messo un print nel setup per esserne sicuro)
quindi perdo l'orario sia all'apertura che alla chiusura. stessissimo comportamento selezionando e deselezionando OPEN su swRTC
IDE1.0 win7
Testato:
riavviato e il problema persiste.
Ho aggiunto un controllo sul DTR e ora non dovrebbe più resettare quando disattivi la seriale o chiudi il programma.
Ho aggiornato l'allegato del primo post con il nuovo eseguibile.
yes, funge
non si resetta piu' ne' togliendo il flag OPEN, ne' chiudendo l'applicativo, anche se con il flag selezionato.
grazie mille a nome dei terrestri 
per curiosita', anche a te il serial monitor resetta sia in apertura che chiusura ?
e ti risultano questi due tipi di reset, uno "completo" (con lampeggio led L) ed uno "minimo" ?
Testato:
per curiosita', anche a te il serial monitor resetta sia in apertura che chiusura ?
e ti risultano questi due tipi di reset, uno "completo" (con lampeggio led L) ed uno "minimo" ?
Si pure a me si comporta in questo modo, non ci avevo mai fatto caso, e il secondo reset è alquanto anomalo come comportamento.
Oggi voglio indagare strumentalmente su cosa succede esattamente quando viene chiuso il serial monitor e cosa succede al reset.
astrobeed:
edit 2 : aggiunti i sorgenti C++ del programma per pc, per ricompilare serve il cBuilder Borland.
Astro va bene questo "coso" qui ? C++Builder: Software Overview - Embarcadero
Nei sorgenti allegati c'e' anche la modifica che "abbiamo" fatto per il problema autoreset ?
ho provato a ricompilare senza toccare nulla, ma mi escono questa sflza di errori.
mi mancano delle librerie ?
come si installano ?
all'inizio mi dice che mancano:
- nrcommb6.lib
- Vcwb6.lib
- Iocomp65.lib
e poi tutti gli errori che allego.
forse hanno solo cambiato nome essendo questa l'ultima versione della Embarcadero ?
error.txt (17.2 KB)
Testato:
all'inizio mi dice che mancano:
- nrcommb6.lib
- Vcwb6.lib
- Iocomp65.lib
Quello sono librerie allegate solo alla versione professional.
non esiste un ide compatibile gratuito ?
astrobeed:
Ti dirò di più, anche usando le recenti API 3.x di Java non mi risulta che sia possibile disabilitare i vari segnali di controllo della seriale, puoi solo leggerli, settarli e decidere come la seriale li prende in considerazione.
esiste il metodo setDTR(boolean); quindi è una scelta del team arduino.
si potrebbe chiedere di mettere una checkbox nel serial monitor
lesto:
esiste il metodo setDTR(boolean); quindi è una scelta del team arduino.
si potrebbe chiedere di mettere una checkbox nel serial monitor
In Java setDTR() ti permette solo di modificare lo stato di DTR, non di disabilitarlo, inoltre il suo funzionamento è sottoposto al supporto offerto dal sistema operativo, ovvero non è detto che funzioni su tutte le macchine.
In Windows è possibile disabilitare, nel vero senso della parola, qualunque segnale della seriale, che rammento sono gestiti in automatico dal relativo hardware o dal driver software per Vcom, tramite le API.
E' necessario creare un Handle sfruttando la struttura DCB per poi accedere alla proprietà "dcb.fDtrControl" e settarla come "DTR_CONTROL_DISABLE".
Dato che Java per funzionare utilizza la Jvm, in pratica una P machine, non puoi scavalcarla per accedere direttamente alle API di Windows, o altro S.O., pertanto puoi fare solo quello che la Jvm ti permette, e questo è uno dei limiti più grossi di Java e .net .
In realtà ci sono dei modi che permettono di accedere alle API di Windows da Java, dei veri e propri workaround, però in questo modo perdi la portabilità del software, lo leghi ad uno specifico S.O., ed è facile incorrere in crash del software per errori di chiamate o accesso a zone protette della memoria.
Testato:
non esiste un ide compatibile gratuito ?
Il problema non è l'ambiente di sviluppo, è che il programma sfrutta oggetti grafici, dei widget, che sono allegati solo alla versione professionale completa di librerie estese, ovviamente a pagamento, del compilatore.
astrobeed:
In Java setDTR() ti permette solo di modificare lo stato di DTR, non di disabilitarlo, [...]
hai ragione, bisogna usare staticSetDTR(String nomePorta, boolean flag)
nel 2009 pare fosse buggata, non so se lo è ancora visto lo scarso mantenimento della libreria: http://mailman.qbang.org/pipermail/rxtx/2007-December/9318594.html
ps. forse intendi le native, che non sono workaround, ma un motodo vero e propio per creare un ponte tra java e SO, in realtà tutte le classi base di java sono native, che poi son file .dll o .so
edit: non "tutte" letteralmente, ma spero ci siam capiti 
lesto:
hai ragione, bisogna usare staticSetDTR(String nomePorta, boolean flag)
Quello è un workaround che funziona solo con Windows, infatti invoca la struttura DCB e la relativa dcb.fDtrControl.
astrobeed:
lesto:
hai ragione, bisogna usare staticSetDTR(String nomePorta, boolean flag)
Quello è un workaround che funziona solo con Windows, infatti invoca la struttura DCB e la relativa dcb.fDtrControl.
non ho controllato, ma se è un comando RXTX ci sarà anche l'equivalente .SO per linux (e mac). lì si discute un bug che si prenta(va?) con win XP quindi son capitati a parlare in particolare del .dll e delle api windows
lesto:
non ho controllato, ma se è un comando RXTX ci sarà anche l'equivalente .SO per linux (e mac). lì si discute un bug che si prenta(va?) con win XP quindi son capitati a parlare in particolare del .dll e delle api windows
Allora prova se funziona sotto Windows e Linux, io dico di no, e comunque a me non interessano le scappatoie di Java, per fortuna io uso il C/C++ dove questi problemi non esistono, e vale per tutti i S.O.
mancava la sparata del legacy,
visto che io non ti sto' infastidendo da nessuna parte, la smetti anche tu per favore ?
devo ricominciare a segnalare i tuoi inutili flame ?
Qui si sta parlando di problemi con il java, che influiscono sul reset di arduino e di cui modestamente ho scoperto io l'esistenza, e tu come primo rigo scrivi "non capisco niente di java, pero' sto' facendo un progetto spaziale che fa questo e quello"
entri qui ed inizi a sparare invenzioni su tuoi fantomatici progetti sui quali hai carta bianca. ti invito a fare altro con quella carta.
ormai sappiamo tutti che non conosci nemmeno la legge di Ohm
quando ti banneranno faro' festa
