buonasera.
ho caricato maldestramente un programma che continua a scrivere con Serial.println sulla seriale..
di conseguenza non riesco piu a caricare il programma dall'ide
rimane nello stato "sto caricando" e sotto appare "avrdude: stk500_getsync(): not in sync: resp=0x00"
ho fatto qualche ricerca e per questo problema consigliano di resettare il micro premendo il pulsante di reset un attimo prima che l'ide inizi a trsmettere il programma... ho provato in vari modi ma non riesco piu a farlo funzionare
siete la mia unica speranza..
void setup() {
Serial.begin(9600);
}
void loop() {
digitalWrite(ledPin,1); // let led blink
delay(70);
digitalWrite(ledPin,0); // let led blink
int mic=readMic();
long vcc=readVcc();
Serial.print("vcc=" );
Serial.print(vcc );
Serial.print(" mic=" );
Serial.println(mic );
}
si chiama "procedura di emergenza" e purtroppo è l'unico modo immediato per risolvere la questione, devi beccare il momento opportuno per premere il reset manualmente e ciò ti permette di caricare un qualsiasi nuovo sketch, risolvendo il problema. Cerca bene sul Forum e trovi la sequenza precisa per risolvere.
L'alternativa è quella di procurare un qualsiasi altro Arduino e ricaricare il bootloader mediante la tecnica ISP.
miracoloo ce l'ho fatta!!!
ho trovato la spiegazione di come usare un altro arduino per programmare il bootloader crcando "arduino isp" come mi hai detto tu..
purtroppo la procedura con il pulsantino di reset l'ho provata per due giorni .. cosi come indicato nel forum ma non sono riuscito mai a farlo funzionare...
grazie mille!! in 5 minuti ho risolto..
ora pero mi viene un dubbio:
perche lo sketch che ho caricato mi piantava l'arduino..??
tra una scrittura e l'altra sulla seriale c'erano alemeno 70ms
e quindi si pone il problema:
Se uso un loop che prevede la scrittura sulla seriale (ad esempo se devo leggere i valori di un sensore) , quanto tempo devo lasciare inattiva la seriale affinche l'ide riesca acaricare i programmi senza problemi?
noise0:
ora pero mi viene un dubbio:
perche lo sketch che ho caricato mi piantava l'arduino..??
tra una scrittura e l'altra sulla seriale c'erano alemeno 70ms
e quindi si pone il problema:
Se uso un loop che prevede la scrittura sulla seriale (ad esempo se devo leggere i valori di un sensore) , quanto tempo devo lasciare inattiva la seriale affinche l'ide riesca acaricare i programmi senza problemi?
...
70 ms sono niente.. come ti ha detto Michele, ti serve minimo minimo 1 secondo, meglio 2.
infatti inserendo delay(2000) all'inizio del programma non ho piu avuto problemi...
la cosa che non capisco ancora bene però è la seguente:
il programma inizia con 2 secondi di attesa e poi parte un ciclo stretto di scrittura sulla seriale...
io mi aspettavo che i due secondi all'inizio servissero per riuscire a caricare il programma in quei due secondi appunto (quindi reset e caricamento).
mentre ora l'arduino accetta la programmazione anche durante il ciclo di scrittura sulla seriale, senza bisogno di doverlo resettare...
I 2 secondi iniziali vengono trascorsi "girandosi i pollici", ossia introducono un ritardo che possa permettere all'utente di premere materialmente l'icona di upload di un nuovo sketch dopo che si è collegata la scheda al computer.
La seriale della tua applicazione viene condivisa con la porta di comunicazione con il sistema di sviluppo, se la tua applicazione tiene occupata la seriale tutta per lui il sistema di sviluppo viene escluso , un delay iniziale fà sì che si possa recuperare la connessione con il sistema di sviluppo
una cosa simile accade quando si progetta schede in cui il programma rimane più tempo in sleep che attivo, riconnettersi con la scheda mediante ISP durante il debug a volte risulta faticoso
A me è capitato qualche volta di bloccare l'IDE (sia 1.0.5 che 1.0.4) per colpa di troppi dati spediti alla seriale, purtroppo, l'unico rimedio era riavviare l'IDE dopo averlo resettato con Task Manager (e ci metteva un bel po ad essere "killed") poi ho rivisto il modo di inviare dati alla seriale e ho risolto, all'inizio pensavo fosse la versione 1.0.5 perché è iniziato da li, ma poi ho visto che era lo sketch che lo faceva intasare...
un sistema più veloce è di tenere premuto reset PRIMA di inserire alimentare l'arduino (ovvero PRIMA di collegarlo alla USB), cliccare sull'ide upload, appa compare la scritta "sketck size balablabla"lasciare il pulsante di reset.
il problema sui 70ms:
prendiamo il baudrate "standard" di 9600, equivale a 960 byte al secondo, ovvero 0.96 byte o caratteri al MS.
Quindi se la scrittura è più di 70 caratteri, non ce la fai. un sistema per aspettare l'invio di tutti i caratteri è usando la Serial.flush() (negli ide > 1.0.0 se ricordo bene)
il propblema è che questi byte finiscono poi nel 8u2, nel suo buffer interno, e poi da questo nel buffer del PC, che chissà che giri tortuosi può fare.
nel momento in cui resetti, devi anche attendere che i buffer si puliscano, (in particaolare quello dell'8u2), altrimenti il programmatore vedrà arrivare questi dati enon capisce più nulla. In teoria anche tenere premuto a lungo il reset funziona, ma alle volte anche decine di secondi, finchè il led TX si spegne