Jak mogę skasować pamięć Arduino Uno?


15

Jestem majsterkowiczem uczącym się Arduino z moim synem i byłem zaskoczony, że kiedy ponownie podłączyłem kabel USB do Arduino, program nadal działał i pomyślałem sobie: „Dobrze, że niczego nie wysadziłem w górę."

Więc jak zwykle ludzie nazywają to dniem z tymi rzeczami? Czy zwykle ładujesz gołe kości, nic nie szkicujesz, czy po prostu odłączasz wszystko?


4
Co rozumiesz przez „kiedy ponownie podłączyłem kabel USB do Arduino, program nadal działał”, jakie zachowanie zaobserwowałeś i jakiego zachowania się spodziewałeś? Czy coś było związane z Arduino?
jippie

@jippie tak, miałem kilka diod LED podłączonych i wszystkie świeciły. Z jakiegoś powodu myślałem, że programy zostały załadowane do pamięci i znikną po ponownym uruchomieniu, ale ponieważ to nie istnieje ...
Peter Turner

7
Programy są ładowane do pamięci flash, a nie RAM, więc są przechowywane nawet po wyłączeniu zasilania.
Ricardo

Odpowiedzi:


15

Po uruchomieniu Arduino uruchomi każdy program, który został na nim zainstalowany jako ostatni. Rozwiązanie: Nie włączaj go, jeśli nie chcesz, aby działał.

Po wyjęciu z pudełka Arduino zwykle uruchamia program Blink. Możesz więc po prostu załadować i nazwać to dzień, jeśli chcesz go „zresetować”.

Lub masz program pętli z poleceniem uśpienia.

Jeśli bałaganiłeś bootloadera USB za pośrednictwem pinów icsp, to nie wystarczy, musisz ponownie zainstalować bootloader. Ale jeśli przesyłasz programy przez usb lub bezpośrednio za pomocą programatora, nie ma problemu z przesłaniem Blink lub innego programu zastępczego, aby go zresetować.


czy możliwe jest uruchomienie programu autodestrukcyjnego bez podłączania niczego do zacisków napięcia?
Peter Turner

@PeterTurner, gdy nie ma na to mocy? Nie. Ale możesz dodać program, który niewłaściwie wykorzystuje piny, a jeśli zostawisz go na pewne uszkodzenia, możesz je wywołać (niewiele, chyba że piny są połączone)
Manishearth

9

Jeśli bezpieczeństwo jest poważnym problemem, prawie zawsze powinieneś załadować szkic stop * na tablicę przed wezwaniem go na jeden dzień. Byłby to dobry pomysł, na przykład, gdy twoja tablica jest częściowo na stałe częścią większego systemu. Możesz to zrobić przez:

  • Prześlij szkic Bare Minimum znaleziony w File-> Examples-> Basicw
  • Prześlij szkic z dużym opóźnieniem w pętli.
#include <limits.h>

void setup()
{}

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

void loop()
{}

* Stop ma po prostu charakter przenośny. Płyta naprawdę nie przestaje działać.


2
Czy możesz uzyskać podobny (i bardziej trwały) efekt dzwoniąc exit()z wewnątrz setup()lub loop()?
Peter Bloomfield

@ PeterR.Bloomfield Nie mogę uwierzyć, że o tym zapomniałem!
asheeshr

Po co zawracać sobie głowę wyjściem lub opóźnieniem? Po prostu void setup () { } void loop () { }- w każdym razie wewnętrznie procesor zapętla się wokół „nie robiąc nic użytecznego”.
Nick Gammon

1

Najważniejszą rzeczą, która może pójść nie tak, jest odłożenie Arduino na kilka tygodni, zapomnienie, jaki szkic (kod) jest do niego załadowany, a następnie powrót do pracy i podłączenie sprzętu (np. Przełącznika, diody LED lub silnika) ) i niech niespodziewanie zaświeci się / włączy, ponieważ poprzedni kod dotyczył pinu, z którym był podłączony.


Rozwiązanie 1. Najpierw załaduj nowy kod.

Prostą i bezpieczną techniką jest załadowanie nowego kodu, nad którym dziś pracujesz, przed podłączeniem jakiegokolwiek sprzętu. Teraz wiesz, co robi kod, z jakich pinów korzysta, a następnie podłączasz sprzęt później (najlepiej włączając Arduino najpierw przez odłączenie go).

Następnie po ponownym podłączeniu zasilania uruchamia przesłany szkic, masz podłączony sprzęt i wszystko powinno być w porządku.


Rozwiązanie 2. Załaduj szkic „nic nie rób”.

Możesz przesłać ten krótki szkic:

int main () { }

„Nic nie robi”. Wszystkie piny pozostaną wejściowe, więc możesz bezpiecznie podłączyć sprzęt, a następnie rozpocząć kodowanie nowego projektu.


Bezpieczeństwo przede wszystkim

Dobrą zasadą jest, aby nie podłączać ani nie odłączać sprzętu (np. Diod LED, przełączników, silników) przy podłączonym zasilaniu. Jeśli zostaniesz rozproszony i podłączysz do niewłaściwego gniazda na płycie, możesz natychmiast uszkodzić to, co jesteś podłączony, Arduino lub jedno i drugie.

Przy wyłączonym zasilaniu możesz w ostatniej chwili sprawdzić, czy wszystko jest podłączone do właściwego miejsca, czy masz prawidłowe polaryzacje i tak dalej.

Upewnij się również, że nie masz elektryczności statycznej na swoim ciele, szczególnie jeśli masz na sobie sweter lub coś puszystego lub siedzisz na dywanie.

Osobiście zawsze sięgam ręką i dotykam metalowych części w pobliżu, aby „uziemić” siebie, zanim sięgam po Arduino. Przykładem jest metalowa obudowa komputera, gniazdo słuchawkowe lub coś w tym rodzaju.

Jeśli po podłączeniu zasilania do Arduino (np. Za pomocą kabla USB) nie widać od razu diody LED zasilania, natychmiast odłącz zasilanie! Być może coś zwarłeś, a im mniej czasu to zrobisz, tym lepiej.


1

Moim największym zmartwieniem, kiedy to się dzieje, jest to, że zwykle podłączam Arduino do mojego nowego projektu i podłączam USB do pierwszego pobrania nowego szkicu. Martwię się, nie mając pojęcia, co będzie próbował poprzedni program, będąc podłączonym do zupełnie innego sprzętu.

Do tej pory nic złego się nie wydarzyło i nie sądzę, że za każdym razem, gdy wrzucę jedno z moich Arduino do kosza, przyjmę Płonący BLINK. To chyba tylko kwestia czasu.


0

Jeśli płyta arduino jest podłączona do dowolnego innego urządzenia, odłącz wszystko i po prostu podłącz arduino do komputera za pomocą kabla USB i spróbuj załadować nowy szkic, mam nadzieję, że to pomoże.


Witamy w Arduino SE! Czy jest jakiś powód, dla którego ta odpowiedź jest lepsza niż inne dostarczone odpowiedzi? Dzięki!
Anonimowy pingwin

0

W Arduino IDE przejdź do przykładów, wybierz Eeprom, wybierz eeprom wyczyść, a następnie prześlij szkic.

Gdy dioda LED na pinie 13 zaświeci się, gotowe.

NB Może to zająć trochę czasu, w zależności od wielkości EEPROM w Arduino.


Więc o co chodzi? Uruchamiasz coś, co nie dotyka I / O (ale czyści EEPROM przy każdym włączeniu zasilania)?
Peter Mortensen

Czy rzeczywiście tego próbowałeś? Pin 13 nie wydaje się być ustawiony jako wyjście (Arduino IDE 1.6.5)
Peter Mortensen
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.