Skocz do zawartości

ESP32 - licznik do rowerka treningowego


roz

Pomocna odpowiedź

9 minut temu, farmaceuta napisał:

Nawet się wziąłem za tego rtos'a, i nawet trochę ogarnąłem te mutexy,schedulery,taski etc...no ale po dwóch miesiącach jestem znów w czarnej d...bo zapomniałem 😢 przekleństwo z tą pamięcią mam...😢

Wiem, że zadam pytanie trochę z kija, ale z ciekawości również...miałeś covida?

Dlaczego pytanie... miałem ciężką wersję. Osoby, z którymi pracuję również przeszły ciężko.

Może to zabrzmi zbyt krytycznie, ale nie dość, że zapominam od tej pory ogrom spraw, migawki pamięci etc. to zdecydowanie czuję, że jestem tępy - trudniej przychodzi mi rozumienie, myślenie - dlatego niektóre pytania moje w tym wątku są z d*py... 😞

Trzymaj się!

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

(edytowany)

Opanowałem temat, poniższy kod działa prawidłowo (jeszcze!) 😉

 

void IRAM_ATTR counterUp()
{
    unsigned long now = xTaskGetTickCount(); // millis();
    if (now < next_pulse)
    {
        return_tr = true;
        return;
    }
    if (first)
    {
        counter_one = xTaskGetTickCount(); // millis();
        first = false;
        return_tr = false;
    }
    else
    {
        counter_two = xTaskGetTickCount(); // millis();
        first = true;
        return_tr = false;
    }
    dyst = dyst + 0.74;
    next_pulse = now + 40; // następny impuls za nie mniej niż 40ms
}

void setup()
{
    Serial.begin(115200);
    pinMode(reed_pin, INPUT);
    attachInterrupt(digitalPinToInterrupt(reed_pin), counterUp, FALLING);
}

float czas_s, last_time;
float trasa;
float obwod_k = 0.74;

void loop()
{
    unsigned long timenow = millis();
    if ((counter_one > 0) && (counter_two > 0))
    {
        Serial.println("START");
        long x = (counter_two - counter_one);
        unsigned long xx = abs(x);
        czas_s = xx / 1000.00;
        float obrotowo = ((74 / (czas_s)) * 3.6) / 1000;
        Serial.print("obrotowo ");
        Serial.print(obrotowo);
        Serial.println(" km/h");
        Serial.print("dystans ");
        Serial.print(dyst);
        Serial.println(" m");
    }
    else
    {
        Serial.println("nic tu nie ma...");
    }
    delay(2000);
}

 

Edytowano przez roz
Link do komentarza
Share on other sites

12 minut temu, roz napisał:

Wiem, że zadam pytanie trochę z kija, ale z ciekawości również...miałeś covida?

Dlaczego pytanie... miałem ciężką wersję. Osoby, z którymi pracuję również przeszły ciężko.

Może to zabrzmi zbyt krytycznie, ale nie dość, że zapominam od tej pory ogrom spraw, migawki pamięci etc. to zdecydowanie czuję, że jestem tępy - trudniej przychodzi mi rozumienie, myślenie - dlatego niektóre pytania moje w tym wątku są z d*py... 😞

Nie miałem covida, ja poprostu tak mam że czego bym się nie nauczył to na drugi dzień już nie pamiętam...mam straszne kiepska pamięć...a szkoda bo lubię się uczyć, zawsze coś tam sobie nowego znajdę i uczę się bez opamiętania , a po tygodniu guzik z tego😕 co do twojej teorii odnośnie covida to możliwe że coś tam się z Tobą podziało bo podobno mnóstwo ludzi ma jakieś dolegliwości po tym dziadostwie...

Link do komentarza
Share on other sites

(edytowany)
volatile unsigned int timeDiff = 0;
volatile unsigned int nextPulse = 0;
volatile float distance = 0;

void IRAM_ATTR counterUp() {
  unsigned long now = xTaskGetTickCount();

  static long int counterPrev = now;
  static long int counterCurr = 0;

  if (now < nextPulse) {
    return;
  }

  counterPrev = counterCurr;
  counterCurr = now;
  timeDiff = counterCurr - counterPrev;

  distance += 0.74;
  
  nextPulse = now + 40;  // następny impuls za nie mniej niż 40ms
}

float czas_s, last_time;
float trasa;
float obwod_k = 0.74;

void loop() {
  unsigned long timenow = millis();
  if (timeDiff) {
    Serial.println("START");

    unsigned int xx = abs(timeDiff); // do czego właściwie ten abs?
    czas_s = xx / 1000.00;
    float obrotowo = ((74 / (czas_s)) * 3.6) / 1000;
    Serial.print("obrotowo ");
    Serial.print(obrotowo);
    Serial.println(" km/h");
    Serial.print("dystans ");
    Serial.print(distance);
    Serial.println(" m");
  } else {
    Serial.println("nic tu nie ma...");
  }
  delay(2000);
}

Troszkę ten mechanizm z first i niefirst wydaje się niepotrzebny. Jeśli chcesz obliczyć czas między impulsami to wystarczy wprowadzić zmienne `odczyt poprzedni` i `odczyt aktualny`. W każdym cyklu `odczyt aktualny` przepisujesz do `odczyt poprzedni` a do `odczyt aktualny` zapisujesz aktualny czas. 

Kilka innych problemów też by się znalazło.

Edytowano przez etet100
  • Lubię! 1
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

Uczysz się! 

Tam gdzie je potem dopisałem

  static long int counterPrev = now;
  static long int counterCurr = 0;

To są zmienne, które mają zachowywać swoją wartość pomiędzy kolejnymi wejściami do procedury obsługi przerwania. Dlatego static. 

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

Halo, Panowie, pytanie pomocnicze, trochę OT.

Ktoś tu pisał, że ma rowerek stacjonarny!

Może się podzielić informacją czy w ustawieniach profilu trenującego ustala się w jakiś sposób średnicę/obwód koła docelowego?

Czy jest to na stałe ustawione?

Pytam, bo w tej chwili przy 74cm obwodu osiągnięcie 12km/h jest szczytem możliwości 😉

A z tego rowerka korzysta też mój 11 letni Syn 💖.

Dziękuję.

Link do komentarza
Share on other sites

Robisz swój sterownik to możesz wrzucić do niego przelicznik jaki Ci się podoba, możesz na starcie dodać wybór profilu dla użytkownika i każdy będzie pedałował z innymi prędkościami.

Mój rower w ogóle nie ma takich ustawień, ma pomiar czasu, tętna i kalorii, prędkość i licznik km. Ma przełącznik na 8 "biegów" obciążenia i to w ogóle nie jest połączone z komputerem, kalorie były powiązane tylko z czasem i intensywnością pedałowania. Przynajmniej tak to pamiętam, chciałem to teraz zweryfikować ale też padł.

Jak w ogóle Twój zaliczył zgon? Nie chciało mi się wymieniać baterii, łudziłem się, że zasilanie pobiera z pedałowania, bo załączał się po chwili kręcenia, jak teraz to zrobiłem to wyświetlacz się zaświeca cyframi na 2s całkiem obiecująco po czym rozpływa  w nicość, tylko przy włożeniu baterii, na kręcenie nie reaguje w ogóle, może kabel nie łączy. Na elektrodzie znalazłem, by gumkę wyświetlacza wymoczyć w spirytusie, ale tam chyba w ogóle nic nie pokazywał.

Link do komentarza
Share on other sites

@kaczakat mój nie zaliczył zgonu. Rowerek który posiadam to Kettler golf (nie mam pojęcia który model dokładnie bo nie jestem w stanie znaleźć takiego na sieci).

Pochodzi on z wystawki gabarytów.

Mam mechanizm z silnikiem (zdjęcia dołączyłem), który służył w nim do naciągu obciążenia. Komputerka nie było, więc ktoś go "coś".

Wymieniłem wszystkie łożyska bo hałasowały bardzo.

I ostatni krok to chęć zrobienia czegoś "fajnego". A, że mam mechanizm do naciągu to jestem w stanie nawet "góry" zasymulować.

 

IMG_20240203_191359.jpg

IMG_20240203_191413.jpg

Link do komentarza
Share on other sites

W tym celu sprawdzamy kartę katalogową upatrzonego procesora.

I tak np. ATtiny85 może pracować w zakresie temperatur od - 55 do +125.

Żaden rowerzysta tego nie przetrzyma, a procesor tak. 

Link do komentarza
Share on other sites

11 minut temu, jand napisał:

Żaden rowerzysta tego nie przetrzyma

Nie byłbym tego taki pewien... swego czasu widziałem w jakichś wiadomościach informację o tym, że temperatura w Oulu spadła do -50. Przeraziłem się bo miałem tam jechać - na szczęście po dwóch tygodniach się unormowało i Oulu powitało mnie uczciwym -10 🙂

Materiał przedstawiał m.in. rowerzystę przedzierającego się przez śnieg...

Czyli fiński rowerzysta pewnie stwierdzi, że jest trochę chłodno 🙂

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!

Gość
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.