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.

Optymalizacja dla funkcji warunkowych.

miccaldo 02 Lut 2013 21:16 924 3
  • #1 02 Lut 2013 21:16
    miccaldo
    Poziom 12  

    Witam, mam silnik i potencjometr obrotowy, chciałbym aby podczas kręcenia potencjometrem prędkość silnika w miarę liniowo się zwiększała, jednak nie mam pojęcia jak to zrobić... Póki co używam funkcji if zagnieżdżonych kaskadowo pod sobą:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Jednak to nie jest za dobry pomysł, chciałbym poznać jakąś funkcję która pełniła by to samo ale żebym nie musiał pisać tylu ifów pod sobą, myślałem żeby zrobić coś takiego:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Albo
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Jednak oba przykłady nie działają. Więc w jaki sposób można takie coś osiągnąć? Nie sądzę żeby w bardziej skomplikowanych programach ludzie używali mnóstwo ifów albo funkcję switch z n - case, na pewno można to obejść.

    Pozdrawiam.

    0 3
  • #2 02 Lut 2013 21:36
    Steryd3
    Poziom 31  

    Po pierwsze nie rozumiem do końca przedstawionego przez Ciebie problemu. Rozumiem, że czym większa wartość z ADC tym większy współczynnik wypełnienia?? Bo w pierwszym kodzie jest jakaś nieliniowość na końcu a w pozostałych próbach jej nie widzę. A czy rozwiązanie typu:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Czy takie rozwiązanie było by tym czego Ci potrzeba czy posiada ono jakąś istotną wadę??

    0
  • #3 02 Lut 2013 23:14
    miccaldo
    Poziom 12  

    Ok, jest dobre:)

    Ale np. inna sprawa, również z funkcją warunkową. Mam enkoder obrotowy, który po 720 impulsach obraca się o 360 stopni, co sygnalizuje jeden obrót na wyświetlaczu siedmiosegmentowym. Kod wygląda następująco:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    cnt - licznik impulsów, proszę nie zwracać uwagi na _BV(PB7), i 'E', kombinowałem i niech tak będzie, ale jest to nie istotne.
    Pytanie moje dotyczy tej funkcji switch, nie wygląda ona dobrze w programie, czy da się może jakoś to inaczej zapisać? może za pomocy tablicy która przechowuje stałe wartości impulsów przy których mają się zapalać określone segmenty, albo w jakiś inny sposób, byle by połowę kodu nie zajmowała funkcja switch. Może gdyby tablica zwracała z każdym obrotem kolejną wartość, czyli kolejną cyfrę, tylko jest to możliwe? Mam nadzieję że w miarę zrozumiałe jest to co piszę :)

    0
  • #4 03 Lut 2013 00:32
    Raphaw
    Poziom 20  

    Podzielić cnt przez 720 i uzyskaną liczbę wyświetlić? O ile dobrze zrozumiałem logikę zamieszczonego kodu wyglądałoby to mniej więcej tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0