Skocz do zawartości

ESP32 - licznik do rowerka treningowego


roz

Pomocna odpowiedź

if (digitalRead(HALL) == HIGH && stan == true) { 
  stan = false; 
  } 
if (digitalRead(HALL) == LOW && stan == false) { 
  czas_s = (millis() - last_time) / 1000.00; 
  float obroty = 3600 / czas_s;
  float predkosc = (obroty * obwod_k) / 1000.00;  
  trasa = trasa + obwod_k; //metry
  stan = true; 
  last_time = millis(); 
  Serial.println(prędkość);
  Serial.println(trasa); 
 }

Obwod_k to obwód w metrach jako float...sprawdź narazie to 

  • Pomogłeś! 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

11 minut temu, ethanak napisał:

Z ciekawości - po co testować stan == true?

Chce liczyć czas obu stanow lacznie i chce żeby obliczenia były wysłane tylko wtedy kiedy zrobi się pełny obrót...więc muszę jakoś "przeskakiwać" jednorazowo z if'a do if'a ( pewnie marnie wytłumaczyłem 🤔)

Link do komentarza
Share on other sites

(edytowany)

Czym sie różni (zakładając, że stan to boolean)

if (stan == true)

Od

if (stan)

Po to są zmienne boolowskie, żeby nie trzeba było robić takich potworków.

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

(edytowany)
13 minut temu, ethanak napisał:

Czym sie różni (zakładając, że stan to boolean)

if (stan == true)

Od

if (stan)

Po to są zmienne boolowskie, żeby nie trzeba było robić takich potworków.

Aaaa!! O to Ci chodzi panie😁 a no tak...oczywiście że masz rację, tylko że ja już z przyzwyczajenia tak pisze jak powyżej w sytuacjach jak powyżej, czyli jeśli w dwóch warunkach sprawdzam czy true/false...jest mi tak jakoś łatwiej przeglądać kod😜 

14 minut temu, Santiago napisał:

Kod mi się podoba. Wykorzystam

Można go poprawić bo np. podczas pierwszego pomiaru będzie błąd spowodowany tym że zmienna last_time ma wartość zero...jakoś ładniej raz już to napisałem ale komp umarł więc nie sprawdzę teraz...a na dzień dzisiejszy jestem tak zamulony że nie jestem w stanie nic sensownego napisać prócz migania ledem...😅

Edytowano przez farmaceuta
Link do komentarza
Share on other sites

@farmaceuta ech, cztery obroty korbami i.....

Gdy obracam korbami powoli to jest dobrze, działa. Ale jak pokręcę szybko to Exception wali..

 

#define reed_pin 35

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

bool stan = true;
unsigned long czas_s, last_time;
float trasa;
float obwod_k = 0.74;

void loop()
{

if (digitalRead(reed_pin) == HIGH && stan == true) { 
  stan = false; 
  } 
if (digitalRead(reed_pin) == LOW && stan == false) { 
  czas_s = (millis() - last_time) / 1000.00; 
  float obroty = 3600 / czas_s;
  float predkosc = (obroty * 0.74) / 1000.00;  
  trasa = trasa + obwod_k; //metry
  stan = true; 
  last_time = millis(); 
  Serial.println(predkosc);
  Serial.println(trasa); 
 }
}

 

---- Otwarto port szeregowy COM14 ----
19:18:10:989 -> 0.13
19:18:10:989 -> 0.74
19:18:12:185 -> 2.66
19:18:12:185 -> 1.48
19:18:13:084 -> Guru Meditation Error: Core  1 panic'ed (IntegerDivideByZero). Exception was unhandled.
19:18:13:084 -> 
19:18:13:084 -> Core  1 register dump:
19:18:13:084 -> PC      : 0x400d14a6  PS      : 0x00060630  A0      : 0x800d2b30  A1      : 0x3ffc51e0  
19:18:13:084 -> A2      : 0x3ffc1bc0  A3      : 0x00000000  A4      : 0x3ffc1bc4  A5      : 0x3ffbdb6c  
19:18:13:084 -> A6      : 0x3ffbd2bc  A7      : 0x80000001  A8      : 0x800d14a1  A9      : 0x3ffc51c0  
19:18:13:084 -> A10     : 0x00000e10  A11     : 0x3feb645a  A12     : 0xffffffff  A13     : 0x000003ff  
19:18:13:084 -> A14     : 0x7ff00000  A15     : 0x00000000  SAR     : 0x0000000a  EXCCAUSE: 0x00000006  
19:18:13:106 -> EXCVADDR: 0x00000000  LBEG    : 0x400840d1  LEND    : 0x400840d9  LCOUNT  : 0x00000027  
19:18:13:106 -> 
19:18:13:106 -> 
19:18:13:106 -> Backtrace: 0x400d14a3:0x3ffc51e0 0x400d2b2d:0x3ffc5200
19:18:13:106 -> 
19:18:13:106 -> 
19:18:13:106 -> 
19:18:13:106 -> 
19:18:13:106 -> ELF file SHA256: ae5e130273bb1907
19:18:13:106 -> 
19:18:13:253 -> Rebooting...
19:18:13:280 -> ets Jun  8 2016 00:22:57
19:18:13:280 -> 
19:18:13:280 -> rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
19:18:13:280 -> configsip: 0, SPIWP:0xee
19:18:13:280 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
19:18:13:280 -> mode:DIO, clock div:2
19:18:13:280 -> load:0x3fff0030,len:1184
19:18:13:280 -> load:0x40078000,len:13232
19:18:13:280 -> load:0x40080400,len:3028
19:18:13:280 -> entry 0x400805e4
19:18:13:840 -> Guru Meditation Error: Core  1 panic'ed (IntegerDivideByZero). Exception was unhandled.
19:18:13:840 -> 
19:18:13:840 -> Core  1 register dump:
19:18:13:840 -> PC      : 0x400d14a6  PS      : 0x00060630  A0      : 0x800d2b30  A1      : 0x3ffc51e0  
19:18:13:840 -> A2      : 0x3ffc1bc0  A3      : 0x00000000  A4      : 0x3ffc1bc4  A5      : 0x3ffbdb6c  
19:18:13:840 -> A6      : 0x3ffbd2bc  A7      : 0x80000001  A8      : 0x800d14a1  A9      : 0x3ffc51c0  
19:18:13:840 -> A10     : 0x00000e10  A11     : 0x3fd947ae  A12     : 0xfffffffe  A13     : 0x000003ff  
19:18:13:840 -> A14     : 0x7ff00000  A15     : 0x00000000  SAR     : 0x0000000a  EXCCAUSE: 0x00000006  
19:18:13:861 -> EXCVADDR: 0x00000000  LBEG    : 0x400840d1  LEND    : 0x400840d9  LCOUNT  : 0x00000027  
19:18:13:861 -> 
19:18:13:861 -> 
19:18:13:861 -> Backtrace: 0x400d14a3:0x3ffc51e0 0x400d2b2d:0x3ffc5200

 

Link do komentarza
Share on other sites

(edytowany)

Przerób z millis na micros albo sprawdzaj, czy przypadkiem millis nie równa się last_time

A dzielenie przez zero jest bardzo niezdrowe również na Arduino.

Edytowano przez ethanak
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.