Arduino Polska Forum
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;
int interruptPin = 19;
int state = 0;
unsigned long start_time_1;
int RPM;
int count;
void setup() {
  pinMode(PWM_1, OUTPUT);
analogWrite(PWM_1, 0);
Serial.begin(9600);
 
  //pinMode(interruptPin, INPUT_PULLUP);
//  Serial.begin(9600);
  attachInterrupt(digitalPinToInterrupt(interruptPin),count_1, RISING);
}

//void loop() {
//  if (int PWM_1=0; PWM_1 <=255; PWM_1 +=51 {
//    delay 5000
//    start_time_1 = millis();
//  count = 0;
//  while ((millis() - start_time_1) < 1000){
//  }
//  rpm = count *30;
//  Serial.print(map(PWM_1, 0, 255, 0, 100));
//  Serial.print(RPM);
//analogWrite(PWM_1, 150);
//}
void loop() {
  for (int pwm = 0; pwm <=255; pwm += 51){
    analogWrite(PWM_1, pwm);
    delay(5000);
    start_time_1 = millis();
    count = 0;
    while((millis() - start_time_1 < 1000)) {
    }
//    RPM = count * 30;
Serial.print("PWM = ");
Serial.print(map(pwm, 0, 255, 0, 100));
Serial.print("% , Speed = ");
Serial.print(RPM);
Serial.print("rpm");
  }
  }
void count_1() {
  count = count++;
}


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 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.
Dzię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:
[Obrazek: killitwithfire-reaction.gif]


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:
[Obrazek: killitwithfire-reaction.gif]
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ć.