logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

konstrukcja Switch case, Arduino - nie wykonuje się.

Jakub17 18 Maj 2016 18:17 1728 5
REKLAMA
  • #1 15683249
    Jakub17
    Poziom 6  
    Posty: 484
    Ocena: 15
    Witam.
    Zbudowałem makietę samoregulującej się żaluzję i chciałem wprowadzić w niej dwa tryby pracy:
    1. Aby przymykała się gdy natężenie światła rośnie.
    2. Aby otwierała się gdy natężenie światła rośnie.

    Niestety mimo że kod skompilował się poprawnie to program nie działa. Mimo że przełączam na inny case to żaluzja pracuje tylko dla przypadku 2 (case 1). Zamieszczam tutaj kod programu całej żaluzji. Sporo zajmuje opis czujnika światła ale mam nadzieje że się odnajdziecie. Co tutaj jest źle?

    Kod: text
    Zaloguj się, aby zobaczyć kod

    Przełącznikiem wymuszam stan niski na pinie 8 (zwieram go do masy) i powinien w tym momencie, według moich założeń, zaskoczyć case 0. Czemu tak się nie dzieje?

    A tutaj kod samej konstrukcji switch case:

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 15683269
    szelus
    Poziom 34  
    Posty: 1508
    Pomógł: 315
    Ocena: 53
    A gdzie instrukcja "break" w tym pierwszym switch-u? Bez niej wykonuje się także następny "case" w kolejności.
    Uporządkuj wcięcia, bo się zupełnie można zgubić.
  • REKLAMA
  • #3 15683312
    Jakub17
    Poziom 6  
    Posty: 484
    Ocena: 15
    Tak wiem, jest troche bałagan ale to dlatego że nie jest to finalna wersja.
    Czyli mam dać break na koniec switcha i w każdym z case, czy tylko w case dać ten break?

    Dodano po 4 [minuty]:

    Celowo nie dawałem break bo myślałem że jak go wprowadzę to po załaczeniu np case 1 wykona się on jeden raz i program będzie czekał aż załącze case 2 i tak na zmianę, ale nie o to chodzi przecież żeby przełączać się ciągle między case'ami...
  • REKLAMA
  • #4 15683343
    el_beton
    Poziom 14  
    Posty: 190
    Pomógł: 6
    Ocena: 18
    Masz 2 możliwości:
    1. albo zmienna "wartosc" nie osiąga innej wartości niż 1 dlatego case 0 nie działa.
    2. albo instrukcje umieszczone w treści "case 0" nie dają takiego wyniku jak oczekujesz, tutaj trzeba by prześledzić co wychodzi z mapowania lux, a więc jakie dostajesz wartości w zmiennej maped

    Musisz powstawiać sobie w programie w kilku miejscach wyrzucanie wartości na serial monitor i prześledzisz jakie wartości dostajesz w różnych miejscach programu.

    No i break
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Ale faktycznie brak break może tutaj być główną przyczyną problemu :)
  • REKLAMA
  • #5 15683363
    szelus
    Poziom 34  
    Posty: 1508
    Pomógł: 315
    Ocena: 53
    Jakub17 napisał:
    Tak wiem, jest troche bałagan ale to dlatego że nie jest to finalna wersja.

    To nie szkodzi, że to jest robocza wersja. Wersja finalna często nigdy nie powstaje. :wink: Ale wcięcia to podstawa, zwłaszcza, że praktycznie każdy edytor (IDE) potrafi pomóc w ich utrzymaniu. Jeżeli nie pilnujesz wcięć na bieżąco, to po chwili sam przestajesz rozumieć, jak działa Twój program.

    Cytat:

    Czyli mam dać break na koniec switcha i w każdym z case, czy tylko w case dać ten break?

    Dodano po 4 [minuty]:

    Celowo nie dawałem break bo myślałem że jak go wprowadzę to po załaczeniu np case 1 wykona się on jeden raz i program będzie czekał aż załącze case 2 i tak na zmianę, ale nie o to chodzi przecież żeby przełączać się ciągle między case'ami...

    A rozumiesz jak działa instrukcja switch? Jeżeli nie, to doczytaj i wszystko stanie się jasne.
  • #6 15683525
    JacekCz
    Poziom 42  
    Posty: 8670
    Pomógł: 760
    Ocena: 1462
    Jakub17 napisał:
    Tak wiem, jest troche bałagan ale to dlatego że nie jest to finalna wersja.
    Czyli mam dać break na koniec switcha i w każdym z case, czy tylko w case dać ten break?

    Dodano po 4 [minuty]:

    Celowo nie dawałem break bo myślałem że jak go wprowadzę to po załaczeniu np case 1 wykona się on jeden raz i program będzie czekał aż załącze case 2 i tak na zmianę, ale nie o to chodzi przecież żeby przełączać się ciągle między case'ami...


    Nie bałagan i młoda wersja, tylko podstawowe braki w języku.
    Przeczytaj coś solidnego, i nie będzie "myślałem" tylko "czytałem"
REKLAMA