Come posso cancellare la memoria di Arduino Uno?


15

Sto solo imparando Arduino con mio figlio e sono rimasto sorpreso dal fatto che quando ho ricollegato il cavo USB ad Arduino il programma era ancora in esecuzione e ho pensato tra me e me: "è una buona cosa non aver semplicemente soffiato nulla su."

Quindi, qual è il modo normale in cui le persone lo chiamano un giorno con queste cose? Di solito carichi le ossa nude senza fare nulla di schizzo o semplicemente scolleghi tutto?


4
Cosa intendi con "quando ho ricollegato il cavo USB ad Arduino il programma era ancora in esecuzione", quale comportamento hai osservato e quale comportamento ti aspettavi? Qualcosa era collegato ad Arduino?
jippie,

@jippie sì, avevo un sacco di LED collegati e tutti si sono accesi. Per qualche ragione pensavo che i programmi fossero stati caricati in memoria e sarebbero andati al riavvio, ma dal momento che non esiste ...
Peter Turner,

7
I programmi vengono caricati nella memoria flash, non nella RAM, quindi vengono conservati anche dopo lo spegnimento.
Ricardo,

Risposte:


15

Una volta avviato, Arduino eseguirà l'ultimo programma su cui è stato installato. Soluzione: non accenderlo se non si desidera che funzioni.

Quando è pronto, Arduino di solito esegue il programma Blink. Quindi puoi semplicemente caricarlo e chiamarlo un giorno se vuoi "ripristinarlo".

O avere un programma in loop con un comando sleep.

Se hai pasticciato con il bootloader USB tramite i pin icsp, questo non è abbastanza, dovrai reinstallare il bootloader. Ma se hai caricato programmi tramite USB o direttamente utilizzando un programmatore, non c'è alcun problema con il caricamento di Blink o qualche altro programma fittizio per ripristinarlo.


è possibile far funzionare un programma autodistruttivo senza nulla collegato ai terminali di tensione?
Peter Turner,

@PeterTurner quando non c'è alimentazione? No. Ma puoi aggiungere un programma che abusa dei pin, e se lo lasci con qualche danno può essere chiamato (non molto a meno che i pin non siano collegati)
Manishearth,

9

Se la sicurezza è una delle principali preoccupazioni, allora dovresti quasi sempre caricare uno schizzo di stop * sulla scheda prima di chiamarlo un giorno. Questa sarebbe una buona idea, ad esempio, quando la tua scheda è semi-permanentemente parte di un sistema più grande. Puoi farlo da:

  • Carica il minimo indispensabile schizzo si trovano in File-> Examples-> Basicnella
  • Carica uno schizzo con un grande ritardo nel loop.
#include <limits.h>

void setup()
{}

void loop()
{
  delay(ULONG_MAX);
}
void setup()
{
   exit(0);
}

void loop()
{}

* Stop è semplicemente figurativo. La scheda non smette davvero di funzionare.


2
Potresti ottenere un effetto simile (e più permanente) chiamando exit()dall'interno setup()o loop()?
Peter Bloomfield,

@ PeterR.Bloomfield Non riesco a credere che me ne sia dimenticato!
asheeshr,

Perché preoccuparsi dell'uscita o del ritardo? Basta void setup () { } void loop () { }- in ogni caso internamente il processore sta semplicemente girando "senza fare nulla di utile".
Nick Gammon

1

La cosa principale che può andare storta è se metti da parte il tuo Arduino per un paio di settimane, dimentica quale schizzo (codice) viene caricato su di esso, quindi torna a lavorare su di esso, collega l'hardware (come un interruttore, un LED o un motore ) e accenderlo / accenderlo inaspettatamente, perché il codice precedente indicava il pin a cui era collegato.


Soluzione 1. Caricare prima il nuovo codice.

Una tecnica semplice e sicura è quella di caricare il nuovo codice su cui stai lavorando oggi prima di collegare qualsiasi hardware. Ora sai cosa fa il codice, quali pin utilizza e quindi collega l'hardware in seguito (preferibilmente girando Arduino per prima cosa scollegandolo).

Quindi quando riconnetti l'alimentazione, esegue lo schizzo che hai caricato, hai l'hardware collegato e tutto dovrebbe andare bene.


Soluzione 2. Caricare uno schizzo "non fare nulla".

Puoi caricare questo breve schizzo:

int main () { }

"Non fa niente". Tutti i pin rimarranno come input, quindi puoi tranquillamente collegare il tuo hardware e quindi iniziare a programmare il tuo nuovo progetto.


La sicurezza prima

Una buona regola è quella di non collegare o scollegare l'hardware (ad es. LED, interruttori, motori) con l'alimentazione applicata. Se vieni distratto e collegato alla presa sbagliata sulla scheda, potresti danneggiare immediatamente ciò che sei collegato, o l'Arduino, o entrambi.

Con l'alimentazione spenta, è possibile quindi verificare all'ultimo minuto che tutto sia collegato nel posto giusto, che le polarità siano corrette e così via.

Assicurati anche di non avere elettricità statica sul tuo corpo, in particolare se indossi un maglione o qualcosa di soffice o sei seduto sul tappeto.

Personalmente allungo sempre la mano e tocco alcune parti metalliche vicine per "radicarmi" da solo, prima di raggiungere l'Arduino. Un esempio è la custodia in metallo di un PC, una presa per cuffie o qualcosa del genere.

Se, dopo aver collegato l'alimentazione ad Arduino (ad es. Tramite il cavo USB) non si vede immediatamente il LED di accensione, scollegare immediatamente l'alimentazione! Potresti aver cortocircuito qualcosa, e meno tempo lo fai, meglio è.


1

La mia più grande preoccupazione quando ciò accade è che di solito ho collegato Arduino per il mio nuovo progetto e sto collegando l'USB per il download iniziale del nuovo schizzo. Mi preoccupo, non avendo idea di cosa proverà il programma precedente, essendo connesso a hardware totalmente diverso.

Finora non è successo niente di male e non credo che adotterò il BLINK ogni volta che rimetterò uno dei miei Arduinos nel cestino. Tuttavia, probabilmente è solo una questione di tempo.


0

Se la scheda arduino è collegata a qualsiasi altro dispositivo, scollega tutto e collega l'arduino al computer utilizzando il cavo USB e prova a caricare un nuovo schizzo, spero che ti sarà di aiuto.


Benvenuti in Arduino SE! C'è qualche motivo per cui questa risposta è migliore delle altre risposte fornite? Grazie!
Pinguino anonimo il

0

Nell'IDE di Arduino, vai agli esempi, seleziona Eeprom, seleziona eeprom cancella e quindi carica lo schizzo.

Quando si accende il LED sul pin 13, il gioco è fatto.

NB. Questo potrebbe richiedere del tempo a seconda della dimensione della EEPROM in Arduino.


Quindi qual è il punto? Esegui qualcosa che non tocca l'I / O (ma cancella la EEPROM ad ogni accensione)?
Peter Mortensen,

Hai davvero provato questo? Il pin 13 non sembra essere impostato come output (Arduino IDE 1.6.5)
Peter Mortensen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.