Skocz do zawartości

Sterownik silnika 1 przycisk pamieć po utracie zasilania


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ą...

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.

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ą...

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

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...

(edytowany)
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

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
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.

 

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.

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ć... 🙂

 

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 🙂 

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...