• 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
Sterowanie pilotem RC
#6
Dziękuję za podpowiedź.
Już wcześniej próbowałem przypisać kody do zmiennych i stałych oraz porównywać je w warunkach.
Niestety najczęściej kończyło się to obiegiem pętli w nieskończoność.
Z tak jak wyżej napisanym kodem program działa idealnie czyli po otrzymaniu kodu "włączenia" wykonuje
jednokrotnie instrukcje pomiędzy :

  if  ( mySwitch.getReceivedValue() == 11858321 )
a
  mySwitch.resetAvailable();
i "czeka" na następny kod.
Dokładnie o to mi chodziło ale , no właśnie.
Pomyślałem, że sterowanie tylko jednym pilotem mocno ogranicza możliwości tym bardziej, że mam trzy różne.
Przerobiłem program dodając  2 ify z kodem drugiego pilota w warunku i działa. Jednak wygląda fatalnie dlatego
poszukuję bardziej eleganckiego rozwiązania. Niestety "else" nie zadziałało. Nie mniej jednak dziękuję za zainteresowanie. Wklejam przerobiony program. Może komuś przyjdzie coś do głowy.
Kod:
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();


void setup() {
  pinMode(8, OUTPUT);  //Pin 8 jako wyjście
  pinMode(9, OUTPUT);  //Pin 9 jako wyjście
  mySwitch.enableReceive(0); // Pin 2 (INT0) jako wejście sygnału z odbiornika
  Serial.begin(9600); // Uruchomienie komunikacji
          tone(A0, 3800, 500); // Sygnalizacja dźwiękowa informująca o włączeniu
        delay(100);
        tone(A0, 4500, 500);
        delay(100);
        tone(A0, 3800, 500);
  digitalWrite(8, HIGH);  // Przekaźnik załączony
}

void loop() {

  if (mySwitch.available()); // Czy zostały odebrane dane

//1
            if  ( mySwitch.getReceivedValue() == 11858321 ) { // Jeśli odebraliśmy taki kod to:
   
            delay(200); // Eliminacja wielokrotnego wysłania tego samego kodu
  
            Serial.println ("Włączony"); // Komunikat w terminalu
            Serial.println (mySwitch.getReceivedValue()); //Wyświetlenie otrzymanego kodu w terminalu
           
            for (int i = 0; i < 4; i++) {  // Czterokrotne mignięcie diodą
            digitalWrite(9, HIGH);
            delay(70);
            digitalWrite(9, LOW);
            delay(70);
    }
       digitalWrite(8, HIGH); // Załączenie przekaźnika

            tone(A0, 3800, 500); // Sygnalizacja dźwiękowa
            delay(100);
            tone(A0, 4500, 500);
            delay(100);
            tone(A0, 3800, 500);

            mySwitch.resetAvailable(); //Zatrzymanie pętli w oczekiwaniu na kod
  }
  //2

      if  ( mySwitch.getReceivedValue() == 6226433 ) { // Jeśli odebraliśmy taki kod to:
   
    delay(200); // Eliminacja wielokrotnego wysłania tego samego kodu

    Serial.println ("Włączony"); // Komunikat w terminalu
    Serial.println (mySwitch.getReceivedValue()); //Wyświetlenie otrzymanego kodu w terminalu
   
    for (int i = 0; i < 4; i++) {  // Czterokrotne mignięcie diodą
      digitalWrite(9, HIGH);
      delay(70);
      digitalWrite(9, LOW);
      delay(70);
    }
    digitalWrite(8, HIGH); // Załączenie przekaźnika

    tone(A0, 3800, 500); // Sygnalizacja dźwiękowa
    delay(100);
    tone(A0, 4500, 500);
    delay(100);
    tone(A0, 3800, 500);

    mySwitch.resetAvailable(); //Zatrzymanie pętli w oczekiwaniu na kod
}

//3

  if ( mySwitch.getReceivedValue() == 11858322  ) { // Jeśli odebraliśmy taki kod to:
    delay(200); // Eliminacja wielokrotnego wysłania tego samego kodu

    Serial.println ("Wyłączony"); // Komunikat w terminalu
    Serial.println (mySwitch.getReceivedValue()); //Wyświetlenie otrzymanego kodu w terminalu
   
    for (int i = 0; i < 4; i++) {  // Czterokrotne mignięcie diodą
      digitalWrite(9, HIGH);
      delay(70);
      digitalWrite(9, LOW);
      delay(70);
    }

    digitalWrite(8, LOW);  // Wyłączenie przekaźnika

    tone(A0, 4500, 500);  // Sygnalizacja dźwiękowa
    delay(100);
    tone(A0, 3800, 500);
    delay(100);
    tone(A0, 4500, 500);

    mySwitch.resetAvailable(); //Zatrzymanie pętli w oczekiwaniu na kod
  }
 
  //4

    if ( mySwitch.getReceivedValue() == 6226434  ) { // Jeśli odebraliśmy taki kod to:
    delay(200); // Eliminacja wielokrotnego wysłania tego samego kodu

    Serial.println ("Wyłączony"); // Komunikat w terminalu
    Serial.println (mySwitch.getReceivedValue()); //Wyświetlenie otrzymanego kodu w terminalu
   
    for (int i = 0; i < 4; i++) {  // Czterokrotne mignięcie diodą
      digitalWrite(9, HIGH);
      delay(70);
      digitalWrite(9, LOW);
      delay(70);
    }

    digitalWrite(8, LOW);  // Wyłączenie przekaźnika

    tone(A0, 4500, 500);  // Sygnalizacja dźwiękowa
    delay(100);
    tone(A0, 3800, 500);
    delay(100);
    tone(A0, 4500, 500);

    mySwitch.resetAvailable(); //Zatrzymanie pętli w oczekiwaniu na kod
}
}
 
Odpowiedź
  


Wiadomości w tym wątku
Sterowanie pilotem RC - przez darek793 - 12-03-2021, 18:03
RE: Sterowanie pilotem RC - przez Robson Kerman - 12-03-2021, 23:10
RE: Sterowanie pilotem RC - przez darek793 - 13-03-2021, 17:00
RE: Sterowanie pilotem RC - przez darek793 - 24-03-2021, 15:21
RE: Sterowanie pilotem RC - przez Jarewa0606 - 24-03-2021, 18:32
RE: Sterowanie pilotem RC - przez darek793 - 24-03-2021, 22:33
RE: Sterowanie pilotem RC - przez darek793 - 26-03-2021, 01:48

Skocz do:


Przeglądający: 1 gości