Przerwania po wykryciu zbocza. - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica) +--- Wątek: Przerwania po wykryciu zbocza. (/watek-przerwania-po-wykryciu-zbocza) Strony:
1
2
|
Przerwania po wykryciu zbocza. - dk120001 - 21-12-2020 Drodzy forumowicze. Mam problem z kodem. Mianowicie po kompilacji otrzymuję komunikat: warning: invalid conversion from 'int' to 'void (*)()' [-fpermissive] attachInterrupt(digitalPinToPinChangeInterrupt(2), zO, FALLING); Efekt jaki chcę uzyskać to detekcja zbocza opadającego, przerwa i powrót do wykonywania kodu. Niestety ciągle wyrzuca ostrzeżenie. W czym tkwi błąd? Wczytuję się dostepne materiały lecz nie wiem jak z tego wybrnąć. int odczytanaWartosc = 0; int czas = 0; int x = 0; volatile int zO; const int podajImpuls = 8; int time = 0; #include "PinChangeInterrupt.h" void setup() { pinMode(6, OUTPUT); pinMode(5, INPUT_PULLUP); attachInterrupt(digitalPinToPinChangeInterrupt(2), zO, FALLING); //detekcja zbocza opadajacego } void loop(void) { void zO(); { time==5; return; } if (digitalRead(5) == LOW) // { digitalWrite(6, HIGH); //praca delay(czas); } else { digitalWrite(6, LOW); //Wyłączenie } RE: Przerwania po wykryciu zbocza. - kaczakat - 22-12-2020 Kot CI chyba wszedł na klawiaturę i masz nawiasy {} w losowych miejscach (czy tam nie masz). RE: Przerwania po wykryciu zbocza. - Agregacik - 22-12-2020 Ponadto wiele innych rzeczy nie jest dobrze "poustawianych". Poczytaj może tu https://plociennik.info/index.php/obsluga-przerwan jak to wszystko "ustawić" po kolei aby działało. Nie jestem orłem, ale tu się uczyłem i dałem radę z przerwaniami. RE: Przerwania po wykryciu zbocza. - Robson Kerman - 25-12-2020 Funkcja void zO(); jest wewnątrz funkcji main(), a nie powinna. Funkcja void zO(); niby coś zwraca, a nie powinna skoro jest void. RE: Przerwania po wykryciu zbocza. - brzytwiarz - 17-02-2022 Witam mam problem z odpaleniem przerwania. kod się kompiluje tylko nie wiem już co robię nie tak. Może ktoś pomoże Kod: int PWM_1 = 5; PS. jak mam płytkę mega2560 i wykorzystuję piny 19 i 18 to jest to interrupt dla 19 to interrupt 4 a dla 18 to interrupt 5? Nie umiem zczytać tej prędkości. RE: Przerwania po wykryciu zbocza. - kaczakat - 17-02-2022 W deklaracji volatile uint16_t count; (bo nie wiem po co Ci ujemne też do licznika) i w przerwaniu po prostu count++; A czy reszta kodu ma sens to nie wiem, ale się domyślam. RE: Przerwania po wykryciu zbocza. - brzytwiarz - 17-02-2022 (17-02-2022, 14:51)kaczakat napisał(a): W deklaracjiDzięki o ten count++; Rozumiem idee volatile uint16_t count; tylko nie bardzo widzę gdzie bym miał zmienić z INT-a bo rozumiem, że to o to chodzi chyba chodziło o rpm-y. Rozumiem że przerwanie mogę sobie wywoływać po jakiejś funkcji by nie koniecznie było cały czasz. A teraz jak to przerobić by czytać dwa wentylatory jak kol wiek jeden po drugim bądź równocześnie. RE: Przerwania po wykryciu zbocza. - kaczakat - 17-02-2022 Nie napisałeś po co ten program wymyśliłeś i co ma robić. Ale tak ogólnie to można z nim zrobić tylko to: RE: Przerwania po wykryciu zbocza. - brzytwiarz - 17-02-2022 (17-02-2022, 21:11)kaczakat napisał(a): Nie napisałeś po co ten program wymyśliłeś i co ma robić. Ale tak ogólnie to można z nim zrobić tylko to:Masz rację robię sobie prototyp cieplarki do wychowu matek pszczelich. Kod już zapożyczyłem z neta i deko go zmodyfikowałem. Jako że uczę się sam dla siebie to wygląda ten kod jak na obrazku wyżej. Ten fragment ma kontrolować przepływ powietrza w kołnierzu komory grzewczej. Jeszcze mam kilka problemów oczywiście ale jakoś to będzie nie ukrywam, że będę z czasem jeszcze pytał o jakieś poprawki. Mam pytanie z innej beczki jak układać program w zakładkach za pomocą odesłania bezzwrotnego void w petli loop? RE: Przerwania po wykryciu zbocza. - kaczakat - 17-02-2022 Ten cały wątek jest jakiś dziwny... Bardzo dobrze, że się uczysz, ale zacznij od kursu, książki o C. Nauka polega na zrobieniu i przetestowaniu tych kilkudziesięciu zadań, a po poznaniu millis zrobieniu ich ponownie bez delay. Jakaś książka o C/C++ też nie zaszkodzi. Nie jest ważne co tam chcesz cieplarkować, ale co ma robić ten kod. Wg wypisanych poleceń/funkcji ma po wejściu w loop rozpocząć iterację, ustawić PWM, odczekać 5s delayem, wyzerować count, odczekać sekundę millisem (co czyni to zwykłym delayem), zmienić nastawę PWM i znowu odczekać 5s, itd, w sumie tak 6x, co zajmie ponad 36s, po czym ma wydrukować zmienną RPM, która niezmiennie będzie=0. Pętla loop ma trwać mikrosekundy, przy milisekundach może być kiepskie działanie programu, mało responsywne, ale nie sekundy. Ostatniego pytania w ogóle nie rozumiem. Gorąco polecam kurs. Na razie tak to wygląda, że nawet nie wiesz czego nie wiesz i o co pytać. |