Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

BASCOM AVR - Funkcja zwracająca ile razy liczba x mieści się w liczbie y- szukam

sokół54 21 Lut 2016 21:32 543 2
  • #1 21 Lut 2016 21:32
    sokół54
    Poziom 9  

    Witam.
    Ostatnio postanowiłem napisać NA uC ATMEGA32 w języku BASCOM basic licznik rowerowy. Mam już znaczną część kodu, ale natrafiłem na problem. W zmiennej czas_jazdy_total przechowuję ogólny czas jazdy wyrażony w sekundach. Niestety taka postać nie jest przyjemna dla oka, więc należałoby zamienić ją do formatu godziny - minuty - sekundy. Tylko teraz pytanie jak? Znalazłem na to sposób, ale brakuje mi funkcji, która mi to umożliwi. Chodzi mi mianowicie o funkcję, która zwraca ile razy liczba x mieści się w liczbie y. Szukałem w pomocy BASCOMa, ale znalazłem tylko funkcje MOD(zwraca resztę z dzielenia). Czy mógłby ktoś podpowiedzieć czy istnieje taka funkcja i jak się nazywa? Czy może macie jakiś lepszy pomysł na mój problem? Z góry dziękuję za wszelką pomoc.

    0 2
  • #2 21 Lut 2016 23:31
    adamas_nt
    Moderator Programowanie

    sokół54 napisał:
    zwraca ile razy liczba x mieści się w liczbie y
    A nie wyjdzie to z dzielenia? W VB dzielenie bez reszty realizuje operator "\" ("zwykłe" dzielenie to "/").

    BASCOM AVR - Funkcja zwracająca ile razy liczba x mieści się w liczbie y- szukam

    0
  • #3 22 Lut 2016 19:25
    sokół54
    Poziom 9  

    adamas_nt napisał:
    sokół54 napisał:
    zwraca ile razy liczba x mieści się w liczbie y
    A nie wyjdzie to z dzielenia? W VB dzielenie bez reszty realizuje operator "\" ("zwykłe" dzielenie to "/").

    BASCOM AVR - Funkcja zwracająca ile razy liczba x mieści się w liczbie y- szukam


    Dziś się pobawiłem w Bascomie w związku tym czasem. Oczywiście użyłem Twojej porady. To co uzyskałem zaskoczyło mnie totalnie. Napisałem taki podprogram:

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    Minuty i sekundy liczy świetnie, ale godziny już nie. Chodzi o to, że co 16 sekund dodaje jedną godzinę w wyświetlanym czasie. Przykładowo:
    Zmienna czas_jazdy_total ma wartość 15, na wyświetlaczu otrzymuję wynik: 00:00:15(format HH:MM:SS)
    Zmienna czas_jazdy_total ma wartość 16, na wyświetlaczu otrzymuję wynik: 01:00:16
    I tak się dzieje co 16 sekund. Jeżeli nie wytłumaczyłem tego wystarczająco zrozumiale, to mogę nagrać filmik i na YouTube wrzucić.

    -------------------
    W trakcie pisania tego postu wpadł mi do głowy pewien pomysł, który działa poprawnie. Oto kod:
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    Rozdzieliłem dzielenie na 2 etapy(najpierw przez 100, a potem przez 36). Jednak to znowu wymusiło na mnie utworzenie dodatkowej zmiennej Obliczany_czas2 - w przeciwnym wypadku miałbym problemy z sekundami. Ogółem z tego rozwiązania wynika, że ATMEGA ma problemy z dzieleniem przez większe liczby. Dzięki wielkie za pomoc. Jak ukończę swój projekt licznika(program+obudowa) to postaram się pokazać na forum wyniki mojej pracy. :wink:

    0