Arduino Polska Forum
Arduino Leonardo sterowanie przekażnikami IR - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Programowanie w Arduino (https://forum.arduinopolska.pl/dzial-programowanie-w-arduino)
+--- Wątek: Arduino Leonardo sterowanie przekażnikami IR (/watek-arduino-leonardo-sterowanie-przeka%C5%BCnikami-ir)



Arduino Leonardo sterowanie przekażnikami IR - skala19 - 30-05-2017

Witam chciałbym dodać więcej przekaźników i sterować nimi pilotem IR w google znalazłem kod ale można sterować tylko 2 przekaźnikami chciałbym dodać jeszcze 8 w sumie żeby było 10 i nie wiem jak to zrobić gdy dodaje w void setup nowe pinMode i digitalWrite(dla nowych przekaźników) jest ok ale gdy w void lopie dodaje odniesienie do odebranego kodu nie wiem jak nazwać kolejne przekaźniki pierwszy i drugi nazywają sie kolejno relay_one(); i relay_two(); gdy twoże relay_tree(); przy komplikacji wyskakuje relay_tree(); was not declared in this scope

Oto kod

int RECV_PIN = 3;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup() {
  irrecv.enableIRIn();
 
  pinMode(4, OUTPUT); //Relay one
  pinMode(5, OUTPUT); //Relay two
 

  digitalWrite(4, HIGH);
  digitalWrite(5, HIGH);
}
 
void loop() {
  if (irrecv.decode(&results)) {
    irrecv.resume();
  }

  if (results.value == 0xFF30CF) {
    relay_one();
    results.value = 0x00000000;
  }

  if (results.value == 0xFF18E7) {
    relay_two();
    results.value = 0x00000000;
  }
 
 
}

void relay_one() {
  static int m = HIGH;
  m = !m;
  digitalWrite(4, m);
}

void relay_two() {
  static int m = HIGH;
  m = !m;
  digitalWrite(5, m);
}



Trudzę się z tym już drugi dzień a na google nie znalazłem jednoznacznej odpowiedzi


RE: Arduino Leonardo sterowanie przekażnikami IR - Robson Kerman - 30-05-2017

relay_tree(); was not declared in this scope, ponieważ nie zadeklarowałeś tej funkcji.

Bardzo było by pomocne, gdybyś liznął chociaż podstawy programowania.
Popatrz na jakieś kursy na YT, osobiście polecam pana Mirosława Zelenta i jego kanał Pasja Informatyki.
relay_one(); oraz relay_two(); są to funkcje programu.
Konkretnie, poleceniem relay_one(); w głównej pętli, wywołuje się taką część programu:


Kod:
void relay_one() {
static int m = HIGH;
m = !m;
digitalWrite(4, m);
}


Na tym etapie nauki musisz jedynie wiedzieć, że relay_one to nazwa funkcji, po nazwie muszą być nawiasy okrągłe, bo w nich znajdują się zmienne pobierane do funkcji (gdy jest pusto, to oznacza, że funkcja nie pobiera zmiennych, ale nawiasy muszą być), void oznacza, że funkcja nie zwraca żadnych wartości, ważne jest to dla kompilatora, więc też musi być.
W nawiasach {} znajduje się ciało funkcji, czyli kod wykonujący się, gdy nasza funkcja zostanie wywołana.

I mamy tak:
W głównej pętli sprawdzamy co dostaliśmy z obiektu irrecv.
  

Kod:
if (results.value == 0xFF30CF){
relay_one();
results.value = 0x00000000;
}

Co oznacza, że jeżeli wartość odbierana wynosi FF30CF, wykonaj kod w funkcji relay_one(); a następnie wyzeruj results.value

Jeżeli chcesz dodać następny przekaźnik i już dodałeś kod wywołujący funkcję relay_three(); (Ty napisałeś tree, a tree to drzewo, trzy po angielsku pisze się three, pamiętaj o tym, bo nazwy wywoływane i nazwy deklarowane muszą być identyczne!!!) to powinieneś jeszcze napisać funkcję relay_three();
Zakładając, że przekaźnik podpinasz pod pin 6, może to wyglądać tak:


Kod:
void relay_three() {
static int m = HIGH;
m = !m;
digitalWrite(6, m);
}

Pamiętaj też, że w funkcji setup musisz zdefiniować pin 6 jako wyjście:


Kod:
void setup() {
pinMode(6, OUTPUT); //Relay three
digitalWrite(6, HIGH);
}



RE: Arduino Leonardo sterowanie przekażnikami IR - skala19 - 30-05-2017

(30-05-2017, 07:00)Robson Kerman napisał(a): relay_tree(); was not declared in this scope, ponieważ nie zadeklarowałeś tej funkcji.

Bardzo było by pomocne, gdybyś liznął chociaż podstawy programowania.
Popatrz na jakieś kursy na YT, osobiście polecam pana Mirosława Zelenta i jego kanał Pasja Informatyki.
relay_one(); oraz relay_two(); są to funkcje programu.
Konkretnie, poleceniem relay_one(); w głównej pętli, wywołuje się taką część programu:


Kod:
void relay_one() {
static int m = HIGH;
m = !m;
digitalWrite(4, m);
}


Na tym etapie nauki musisz jedynie wiedzieć, że relay_one to nazwa funkcji, po nazwie muszą być nawiasy okrągłe, bo w nich znajdują się zmienne pobierane do funkcji (gdy jest pusto, to oznacza, że funkcja nie pobiera zmiennych, ale nawiasy muszą być), void oznacza, że funkcja nie zwraca żadnych wartości, ważne jest to dla kompilatora, więc też musi być.
W nawiasach {} znajduje się ciało funkcji, czyli kod wykonujący się, gdy nasza funkcja zostanie wywołana.

I mamy tak:
W głównej pętli sprawdzamy co dostaliśmy z obiektu irrecv.
  

Kod:
if (results.value == 0xFF30CF){
relay_one();
results.value = 0x00000000;
}

Co oznacza, że jeżeli wartość odbierana wynosi FF30CF, wykonaj kod w funkcji relay_one(); a następnie wyzeruj results.value

Jeżeli chcesz dodać następny przekaźnik i już dodałeś kod wywołujący funkcję relay_three(); (Ty napisałeś tree, a tree to drzewo, trzy po angielsku pisze się three, pamiętaj o tym, bo nazwy wywoływane i nazwy deklarowane muszą być identyczne!!!) to powinieneś jeszcze napisać funkcję relay_three();
Zakładając, że przekaźnik podpinasz pod pin 6, może to wyglądać tak:


Kod:
void relay_three() {
static int m = HIGH;
m = !m;
digitalWrite(6, m);
}

Pamiętaj też, że w funkcji setup musisz zdefiniować pin 6 jako wyjście:


Kod:
void setup() {
pinMode(6, OUTPUT); //Relay three
digitalWrite(6, HIGH);
}

Dziękuje bardzo! fakt moja słaba strona to znajomość programowania ale teraz czas się za to wziąć dopiero zaczynam i raczkuje :Smile od dziś nauka jak za starych czasów tylko z jednym wyjątkiem teraz się chcę :Smile dziękuje jeszcze raz Robson teraz rozumiem swoje błędy pozdrawiam