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

Sterowanie przekaźnikiem Arduino - problem z kodem, nie działa poprawnie

SamiJa 11 Lip 2015 20:37 1437 9
  • #1 14840864
    SamiJa
    Poziom 10  
    Posty: 110
    Witam mam mały problem w bardzo prostym kodzie który przedstawiam poniżej.

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


    Program działa dobrze, ale trzeba go zmodyfikować. Potrzebna jest pauza, bo teraz po starcie programu od razu program startuje. Ustawia się do pozycji wyjściowej, i w tej pozycji powinien zostać zatrzymany zanim funkcja lup, pętla w niej zacznie działać w kółko. Jednym słowem po wciśnięciu przycisku dopiero ma zacząć pracować w pętli, ponadto ponowne wciśnięcie pauzy ma zatrzymać silnik w punkcie bazowym. Ma ktoś jakiś pomysł jak to zrobić ? Myślałem nad dodaniem kolejnego przycisku pauzującego, tylko jak go zapisać. Musi być w pętli loop ma uruchomić się przy starcie automatycznie przed pętlą. Oraz po wciśnięciu na życzenie przycisku, po skończeniu cyklu musi ustawić się w pozycji bazowej. I to mi komplikuje rozwiązanie, ta funkcja na życzenie.
  • #2 14840903
    kompresorrr
    Poziom 12  
    Posty: 99
    Pomógł: 4
    Ocena: 4
    zrób tak że masz pętle nieskończoną która steruje silnikiem przy okazji sprawdza czy nie jest wciśnięty przycisk pauza jeśli tak to użyj polecenia broke;
  • #3 14840931
    SamiJa
    Poziom 10  
    Posty: 110
    a mógłbyś uzupełnić ten kod, albo podać przykład, nie znam tej funkcji jeszcze, ciągle się uczę. Ale tej funkcji nie poznałem, albo czy mógłbyś podać odnośnik to poczytam o tym.
  • #4 14841411
    kompresorrr
    Poziom 12  
    Posty: 99
    Pomógł: 4
    Ocena: 4
    Robisz tak:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Jednak prze delay(); w pętli będziesz musiał trzymać przycisk tak długo aż pętla zakończy działanie, gdybyś pisał w czystym c, to było by łatwiej bo można byłoby to zrobić na przerwaniach.
  • #5 14841498
    SamiJa
    Poziom 10  
    Posty: 110
    Wiem jakie są wady delay, ale mi chodzi o zapętlenie, tzn w segmentach. Chciałem na początku napisać kod bez delay, ale w C++ nie jest to takie łatwe dla mnie. Próbowałem ćwiczyć ale mało jest instrukcji objaśniających jak to zrobić. Nikt za bardzo mi nie chce tego objaśnić. na youtubie nikt nie rozbudowuje kodów, aby zobaczyć w praktyce móc się nimi pobawić. Przykładowo znalazłem objaśnienie działania kodu " funkcji millis". Kilka filmów objaśnia ten kod, lecz nikt nie pokwapił się aby go rozbudować, aby zmodyfikować. Napisałem kod z z "funkcją millis" w pętli "for", lecz co jedynie mogę zmienić częstotliwość błysków fleszy, po dodaniu przycisku, przycisk nie działał. Więc pomyślałem jak to inaczej rozwiązać. I podzieliłem działanie silników zupełnie inaczej. Na początku silnik ma bazować cały stół, ponieważ nie znana jest jego pozycja. Po powrocie stołu do bazy, ma nastąpić PAUZA po to aby w tym momencie można było wykonać czynność podnoszenia na określoną wysokość stołu. Po czym ma być zwolnienie pauzy i stół ma pracować tak jak jest pętla w cyklu. I na życzenie, po wciśnięciu przycisku stół może wykonać cykl lecz po powrocie do bazy ma się zatrzymać. I później cykle dookoła tak ma się powtarzać. Można wprowadzić więc przycisk dający stały sygnał po wciśnięciu, aż pętla się zakończy i przy starcie od nowa po prostu zatrzyma się stół. Zobaczę jak teraz będzie działał ten kod :), tak właśnie zastanawiałem się, że tak to ma wyglądać, dzięki za pomoc :)

    PS: język C jest łatwiejszy od C++ ? jeśli chodzi o zapisanie programu bez delay ? Mógłby ktoś pokazać prosty programik z dwoma diodami, jedna stale migająca a druga zapalająca się podczas wciśnięciu przycisku powiedzmy na dwie sekundy ? Dla porównania zawiłości byłbym wdzięczny.

    Dodano po 5 [godziny] 36 [minuty]:

    Nie dobrze, ta funkcja pauzuje mi cały void loop bez nawet wciśnięcia przycisku pauzy :|
  • #6 14841909
    SamiJa
    Poziom 10  
    Posty: 110
    Poprzedni temat zamknięty został, a po wgraniu poprawki. Nie chce mi się pauzować silnik, tzn. pauzuje bez naciśnięcia przycisku więc nie działa

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


    Moderowany przez Dzimi:

    Tematy scaliłem

  • #7 14841939
    kompresorrr
    Poziom 12  
    Posty: 99
    Pomógł: 4
    Ocena: 4
    Język C (dla avr) nie jest trudny, ale nie nauczysz się go w jeden wieczór przykładowy kod migający 8 diodami zapalają się 4 gasną zapalają się 4 następne.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Co do arduino możesz zrobić jeszcze tak że zamiast break; użyjesz funkcji goto;
  • #8 14841959
    kompresorrr
    Poziom 12  
    Posty: 99
    Pomógł: 4
    Ocena: 4
    Poprzedni temat nie jest zamknięty.

    Dodano po 4 [minuty]:

    Spróbuj tak:
    [code
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #9 14842078
    SamiJa
    Poziom 10  
    Posty: 110
    Może to przez łącze nie mogłem odpowiedzieć ?!?

    Jeśli chodzi o poprawkę to nic nie pomogło :|
  • #10 14846526
    dondu
    VIP Zasłużony dla elektroda
    Posty: 13906
    Pomógł: 1292
    Ocena: 809
    SamiJa napisał:
    PS: język C jest łatwiejszy od C++ ? jeśli chodzi o zapisanie programu bez delay ? Mógłby ktoś pokazać prosty programik z dwoma diodami, jedna stale migająca a druga zapalająca się podczas wciśnięciu przycisku powiedzmy na dwie sekundy ?

    Tu nie chodzi o język, tylko o poznanie mikrokontrolera i jego dokumentacji.
    Przykłady? proszę bardzo: http://mikrokontrolery.blogspot.com/2011/03/drzaskowy-pamietnik-wstep.html

    Zaglądnij także do spisu treści tej strony.

Podsumowanie tematu

✨ Użytkownik zgłasza problem z kodem Arduino do sterowania przekaźnikiem, który nie działa poprawnie, szczególnie w kontekście pauzowania silnika. W odpowiedziach sugerowane są różne podejścia do implementacji pętli nieskończonej oraz użycia przycisków do kontrolowania działania silnika. Wskazówki obejmują użycie funkcji `break` oraz `goto`, a także omówienie problemów związanych z używaniem funkcji `delay()`. Użytkownik poszukuje również przykładów i materiałów edukacyjnych dotyczących programowania w C++ oraz mikrokontrolerów.
REKLAMA