Como apago a memória do Arduino Uno?

15

Sou apenas uma pessoa que aprende Arduino com meu filho e fiquei surpreso que, quando conectei o cabo USB ao Arduino, o programa ainda estava em execução e pensei: "é bom que eu não tenha estragado nada acima."

Então, como as pessoas costumam chamar isso de dia com essas coisas? Você costuma carregar os esqueletos, não esboça nada ou simplesmente desconecta tudo?

Peter Turner
fonte
4
O que você quer dizer com "quando conectei o cabo USB ao Arduino, o programa ainda estava em execução", que comportamento você observou e qual o que esperava? Alguma coisa estava conectada ao Arduino?
jippie
@ippie sim, eu tinha um monte de LEDs conectados e todos acenderam. Por alguma razão eu pensei que os programas foram carregados na memória e teria ido na reinicialização, mas desde que não existe ....
Peter Turner
7
Os programas são carregados na memória flash, não na RAM, e são mantidos mesmo após o desligamento.
Ricardo

Respostas:

15

Quando inicializado, o Arduino executará qualquer programa que tenha sido colocado nele por último. Solução: não o ligue se não quiser que ele seja executado.

Quando pronto para uso, o Arduino geralmente executa o programa Blink. Portanto, você pode simplesmente carregar isso e encerrar o dia se quiser "redefinir".

Ou tenha um programa de loop com um comando de suspensão.

Se você estiver mexendo com o carregador de inicialização USB por meio dos pinos icsp, isso não basta, você precisará reinstalar o carregador de inicialização. Mas se você estiver carregando programas via USB ou diretamente usando um programador, não há problema em carregar o Blink ou algum outro programa fictício para redefini-lo.

Manishearth
fonte
é possível executar um programa autodestrutivo sem nada conectado aos terminais de tensão?
Peter Turner
@ PeterTurner quando não há energia? Não. Mas você pode adicionar um programa que a aplicação abusiva dos pinos, e se você deixá-lo em algum dano pode ser chamado (não muito menos que os pinos estão conectados)
Manishearth
9

Se a segurança é uma grande preocupação, você quase sempre deve colocar um esboço de parada * no quadro antes de encerrar o dia. Seria uma boa ideia, por exemplo, quando sua placa é semi-permanentemente parte de um sistema maior. Você pode fazer isso:

  • Faça o upload do esboço mínimo vazio encontrado em File-> Examples-> Basicno
  • Carregue um esboço com um grande atraso no loop.
#include <limits.h>

void setup()
{}

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

void loop()
{}

* Stop é simplesmente figurativo. O quadro realmente não para de correr.

asheeshr
fonte
2
Você poderia obter um efeito semelhante (e mais permanente) ligando exit()de dentro setup()ou loop()?
Peter Bloomfield
@ PeterR.Bloomfield Não posso acreditar que eu esqueci disso!
precisa saber é
Por que se preocupar com a saída ou o atraso? Basta ter void setup () { } void loop () { }- em qualquer caso, internamente, o processador está circulando "sem fazer nada útil".
Nick Gammon
1

A principal coisa que pode dar errado é se você deixar o seu Arduino de lado por algumas semanas, esquecer o esboço (código) carregado nele e voltar ao trabalho nele, conectar o hardware (como um interruptor, LED ou motor) ) e acenda / ligue inesperadamente, porque o código anterior abordava o pino ao qual estava conectado.


Solução 1. Carregue o novo código primeiro.

Uma técnica simples e segura é carregar o novo código no qual você está trabalhando hoje antes de conectar qualquer hardware. Agora você sabe o que o código faz, quais pinos ele usa e depois conecta o hardware depois (de preferência, ligando o Arduino primeiro desconectando-o).

Então, quando você reconecta a energia, ele executa o esboço que você enviou, você tem o hardware conectado e tudo deve ficar bem.


Solução 2. Carregue um esboço "não faça nada".

Você pode enviar este pequeno esboço:

int main () { }

"Não faz nada". Todos os pinos permanecerão como entradas, para que você possa conectar seu hardware com segurança e começar a codificar seu novo projeto.


Segurança primeiro

Uma boa regra é não conectar ou desconectar o hardware (por exemplo, LEDs, interruptores, motores) com a energia aplicada. Se você se distrair e conectar o soquete errado na placa, poderá danificar imediatamente o que está conectado ou o Arduino, ou ambos.

Com a energia desligada, você poderá verificar de última hora se tudo está conectado ao lugar certo, se suas polaridades estão corretas e assim por diante.

Além disso, verifique se você não possui eletricidade estática no corpo, principalmente se estiver usando um suéter ou algo fofo ou se estiver sentado no tapete.

Pessoalmente, sempre estendo a mão e toco em alguma parte de metal próxima a "aterrar" antes de pegar o Arduino. Um exemplo é o gabinete de metal de um PC, um soquete de fone de ouvido ou algo assim.

Se, após conectar a energia ao Arduino (por exemplo, pelo cabo USB), você não vir imediatamente o LED de energia acender, desconecte a energia imediatamente! Você pode ter colocado um curto-circuito em algo e, quanto menos tempo fizer, melhor.

Nick Gammon
fonte
1

Minha maior preocupação quando isso acontece é que eu geralmente conecto o Arduino para o meu novo projeto e estou conectando o USB para o download inicial do novo esboço. Eu me preocupo, sem ter idéia do que o programa anterior tentará, sendo conectado a um hardware totalmente diferente.

Até agora, nada de ruim aconteceu e eu acho que não vou adotar o BLINK ardente toda vez que colocar um dos meus Arduinos de volta na lixeira. Provavelmente é apenas uma questão de tempo.

linhartr22
fonte
0

Se a placa do arduino estiver conectada a qualquer outro dispositivo, desconecte tudo e conecte o arduino ao computador usando o cabo usb e tente fazer o upload de um novo esboço, espero que ajude.

nipi
fonte
Bem-vindo ao Arduino SE! Existe alguma razão para esta resposta ser melhor do que as outras respostas fornecidas? Obrigado!
Anonymous Penguin
0

No IDE do Arduino, vá para exemplos, selecione Eeprom, selecione eeprom clear e faça o upload do esboço.

Quando o LED do pino 13 acender, estará pronto.

NB Isso pode levar algum tempo, dependendo do tamanho da EEPROM no Arduino.

Victor Peters
fonte
Então qual é o ponto? Executando algo que não toca em E / S (mas limpa a EEPROM a cada energia ligada)?
Peter Mortensen
Você realmente tentou isso? Faz o pino 13 não parecem ser configurado como saída (Arduino IDE 1.6.5)
Peter Mortensen