• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino Leonardo sterowanie przekażnikami IR
#1
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
 
Odpowiedź
#2
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);
}
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#3
(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
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości