roz Styczeń 29, 2024 Autor tematu Udostępnij Styczeń 29, 2024 Chyba jestem zmęczony, patrzę w kod i jakbym pierwszy raz widział to wszystko..
Santiago Styczeń 29, 2024 Udostępnij Styczeń 29, 2024 Rówmieź zamierzam zrobić licznik do roweru. W sobotę napisze i przetestuje.
roz Styczeń 29, 2024 Autor tematu Udostępnij Styczeń 29, 2024 @Santiago Życzę szczerego powodzenia - oby poszło Ci lepiej niż mi.
farmaceuta Styczeń 29, 2024 Udostępnij Styczeń 29, 2024 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 1
farmaceuta Styczeń 29, 2024 Udostępnij Styczeń 29, 2024 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 )
ethanak Styczeń 29, 2024 Udostępnij Styczeń 29, 2024 (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 Styczeń 29, 2024 przez ethanak 1
farmaceuta Styczeń 29, 2024 Udostępnij Styczeń 29, 2024 (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 Styczeń 29, 2024 przez farmaceuta
ethanak Styczeń 29, 2024 Udostępnij Styczeń 29, 2024 @farmaceuta To się odzwyczaj - to akurat bardzo brzydki zwyczaj wcale nie wpływa pozytywnie na czytelność kodu.
roz Styczeń 29, 2024 Autor tematu Udostępnij Styczeń 29, 2024 @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
farmaceuta Styczeń 29, 2024 Udostępnij Styczeń 29, 2024 @roz niestety z błędem nie pomogę...za mało ESP używałem...może pan @ethanak coś doradzi?
ethanak Styczeń 29, 2024 Udostępnij Styczeń 29, 2024 (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 Styczeń 29, 2024 przez ethanak
roz Styczeń 29, 2024 Autor tematu Udostępnij Styczeń 29, 2024 @ethanak ale przy micros() trzeba dzielić już przez 10000 a nie przez 1000? Dobrze kminię?
farmaceuta Styczeń 29, 2024 Udostępnij Styczeń 29, 2024 @roz być może tu robisz błąd i nie ma ustalonego stanu ma być tak... pinMode(reed_pin, INPUT_PULLUP);
Pomocna odpowiedź
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ę »