Skocz do zawartości

Sterownik silnika 1 przycisk pamieć po utracie zasilania


nebraska

Pomocna odpowiedź

1 godzinę temu, nebraska napisał:

 

Musze pomyśleć bo w tym moim programie powinno się to rozwiązać bez epromu.

Jeśli zmienna ile==2 i utrata zasilania to program zaczyna od ile==1 czyli obroty kręcą się w stronę przeciwną, muszę tylko rozwiązać tą zmienną ile==1, żeby po utracie zasilania i wciśnięciu przycisku wchodizła  ile==2.

 

Nie da się tak zrobić...przecież zmienna zawsze będzie zainicjowana ta samą wartością...

Link do komentarza
Share on other sites

Przed chwilą, farmaceuta napisał:

Nie da się tak zrobić...przecież zmienna zawsze będzie zainicjowana ta samą wartością...

Miałbyś pomysł jak zrobić to z EPROM?

Próbowałem i nic mi nie wychodzi.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

1 godzinę temu, nebraska napisał:

Ja już zacząłem temat o erpomie. Czy taka forma będzie ok w Atmedze? Program działa  tylko nie zajeżdże eprom? Użyłem update żeby zapisał tylko wtedy kiedy cyfra się zmieni.

 ile++;
  delay(50);

  if (ile == 1) {

    block_time = 2; 
    block_time2 = 1; 
    delay(100);
  }
  if (ile == 2) {
  
    block_time = 6;  
    block_time2 = 3; 
    delay(100);
  }
  if (ile == 3) {
  
    block_time = 10;   
    block_time2 = 5;  
    delay(100);
  }
  if (ile == 4) {
    
    block_time = 20;   
    block_time2 = 10;  
    delay(100);
  }
  if (ile == 5) {
    block_time = 40;    
    block_time2 = 20;  
    delay(100);
  }
  if (ile == 6) {
    block_time = 60;    
    block_time2 = 30; 
    delay(100);
  }
  if (ile == 7) {
    block_time = 113;      
    block_time2 = 60;     
    delay(100);
  }
  if (ile >= 7) {
    ile = 0;
  }
   EEPROM.update(0, block_time);
   EEPROM.update(1, block_time2);
   EEPROM.update(2, ile);
   delay(150);
}

 

W ten sposób zajezdzisz eeprom...masz napisać coś w stylu... 

int dane;
int kopia;

if (dane != kopia) {
  //zapisz do eeprom
  kopia = dane; 
 }

Wtedy zapiszesz tylko jeśli dane się zmienią...

Link do komentarza
Share on other sites

2 minuty temu, farmaceuta napisał:

https://microdigisoft.com/esp8266-save-data-permanently-using-preferences-library/ tu masz link gdzie jest opisane jak zapisać/odczytać dane do preferencji...

To wiem czytałem poradniki wiele razy. Wiem jak zapisać żeby dioda się świeciła bądź nie po resecie procka. Mi chodzi o stan przeciwny odniesieniu do mojego kodu. 

Co do update myślałem że tak może zostać żeby zapisze kiedy się zmieni no przynajmniej tak rozumowałem update

Link do komentarza
Share on other sites

10 minut temu, nebraska napisał:

To wiem czytałem poradniki wiele razy. Wiem jak zapisać żeby dioda się świeciła bądź nie po resecie procka. Mi chodzi o stan przeciwny odniesieniu do mojego kodu. 

To musisz tak napisać kod żeby korzystał z flagi i ta flagę zapisywał...stan tej flagi ma określać kierunek obrotów...

Link do komentarza
Share on other sites

if (guzik) { 
  delay(1000);
  ile++; 
  stan = 1;
  } 
if (ile == 1 || ile == 3 && stan == 1) { 
  flaga = !flaga; 
  digitalWrite(silnik, flaga);
  //zapisz flaga 
  stan = 0;
} 

if (ile == 2 || ile == 4 && stan == 1) { 
  // silnik STOP!
  stan = 0;
}
  if (ile == 4) { 
    ile = 0; 
  }
  

To taka uproszczona wersja, ale ma robić to co ty chcesz...oczywiście do "flaga" musisz wczytać ostatnio zapisaną wartość (w setup())

Edytowano przez farmaceuta
Link do komentarza
Share on other sites

Tak przy okazji - nie znalazłem na Allegro tego co kupowałem, ale choćby coś takiego: https://allegro.pl/oferta/pamiec-serial-eeprom-24aa02-i2c-smd-10szt-12816057728 (wychodzi 40 groszy za sztukę).

6 godzin temu, farmaceuta napisał:
if (ile == 1 && ile == 3 && stan == 1) { 

A teraz powiedz dlaczego to nie ma prawa działać :):):)

Poza tym już pokazałem jak zrobić coś co działa na różnych urządzeniach. Tyle że nie zwyczajem co poniektórych pchać bandę ifów i casów w kod, a zrobić sobie dwie funkcje typu store_state() i restore_state(). W oddzielnym pliku. Wtedy można zrobić tak, że Atmegi korzystają z wbudowanego EE, ESP8266 z emulacji EEPROM, ESP32 z Preferences a w ogóle można podłączyć zewnętrzny EE za te całe 40 groszy i wtedy używasz po prostu Wire.

 

  • Lubię! 1
Link do komentarza
Share on other sites

15 godzin temu, ethanak napisał:

Rozumiem że Preferences i LittleFS nie są we flashu?

Eeprom 128 bajtów kosztuje złotówkę...

Oczywiście że są we flashu.

Uwalniają jednak od zastanawiania się, czy jak zapiszę swoją zmienną pod adres X, to następna zmienna będzie pod adresem X+4 czy może X+18

Przy jednej fladze to nie ma znaczenia, ale jak program się zaczyna rozrastać i przychodzą pomysły "a to sobie jeszcze kilka stanów zapamiętam, bo się miejsce marnuje" to powstaje bajzel.

 

Link do komentarza
Share on other sites

18 minut temu, kostuch napisał:

to powstaje bajzel.

Niekoniecznie - ja np. używam struktur, mogę zapisać/odczytać całą albo tylko jedno pole. Trzeba tylko pamiętać, żeby nowe pola dodawać na końcu 🙂

Poza tym owszem, używam preferences ale nie do zapisywania flag co chwilę tylko (jak sama nazwa wskazuje) do trzymania ustawień. Do takich flag jednak mały eeprom (jak pisałem wcześniej za 40 groszy) nadaje się dużo lepiej.

Link do komentarza
Share on other sites

24 minuty temu, ethanak napisał:

Niekoniecznie - ja np. używam struktur, mogę zapisać/odczytać całą albo tylko jedno pole. Trzeba tylko pamiętać, żeby nowe pola dodawać na końcu 🙂

Poza tym owszem, używam preferences ale nie do zapisywania flag co chwilę tylko (jak sama nazwa wskazuje) do trzymania ustawień. Do takich flag jednak mały eeprom (jak pisałem wcześniej za 40 groszy) nadaje się dużo lepiej.

A jak zechcesz potem zapisać drugą i trzecią strukturę?

Pakujesz wtedy wszystkie jabłka z bananami do jednej uber-struktury żeby nie liczyć na palcach właściwych adresów?

 

No i popularne płytki rozwojowe typu wemos czy lolin nie mają fizycznego eepromu żeby sobie popróbować... 🙂

 

Link do komentarza
Share on other sites

18 minut temu, kostuch napisał:

A jak zechcesz potem zapisać drugą i trzecią strukturę?

 

A co takiego muszę wpisywać do tego eepromu co minutę, żeby trzech struktur używać???

Jakbym zechciał później zapisywać drugą i trzecią strukturę to oznaczałoby, że program jest źle napisany.

20 minut temu, kostuch napisał:

popularne płytki rozwojowe typu wemos czy lolin nie mają fizycznego eepromu

Jaki problem podpiąć cztery druty? Przecież toto nawet w stykówkę wsadzisz... Nie przesadzaj, nie każdy musi mieć dwie lewe ręce 🙂 

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.