Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

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

sokół54 21 Feb 2016 21:32 792 2
  • #1
    sokół54
    Level 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.
  • #2
    adamas_nt
    Moderator of Programming
    sokół54 wrote:
    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
  • #3
    sokół54
    Level 9  
    adamas_nt wrote:
    sokół54 wrote:
    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:

    Code: vbnet
    Log in, to see the code

    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:
    Code: vbnet
    Log in, to see the code

    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: