• 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
Odbiornik IR- powiadomienia diodami LED
#1
Cześć,

Robię projekt odbierania sygnałów przez piloty posiadające nadajnik IR. Prawidłowo odbieram kody, lecz chciałem dodać powiadomienia diodami. Czerwona dioda sygnalizuje otrzymany już kod, natomiast zielona dioda sygnalizuje nowy kod. 
Sygnał jest podawany na wyjścia, lecz diody się nie świecą, sprawdzałem przykładając + z buzzera czy w ogóle podaje sygnał.


Dodam, że dopiero zaczynam przygodę z Arduino. Dołączam kod oraz schemat.

#include <IRremote.hpp>
int RECV_PIN = 10;
IRrecv irrecv(RECV_PIN);
decode_results results;
int redPin = 6;
int greenPin = 3;

void setup()
{
Serial.begin(9600);
IrReceiver.begin(RECV_PIN, ENABLE_LED_FEEDBACK); // Start the receiver
irrecv.blink13(true);
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  irrecv.enableIRIn();
}
void loop() {
if (IrReceiver.decode()) {
Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX); // Print "old" raw data
/* USE NEW 3.x FUNCTIONS */
IrReceiver.printIRResultShort(&Serial); // Print complete received data in one line
IrReceiver.printIRSendUsage(&Serial); // Print the statement required to send this data
IrReceiver.resume(); // Enable receiving of the next value

switch(&results){
          case 0xFB020707: //Keypad button "5"
          digitalWrite(redPin, HIGH);
          delay(2000);
          digitalWrite(redPin, LOW);
          }

        switch(&results){
          case 0xFB040707: //Keypad button "2"
          digitalWrite(greenPin, HIGH);
          delay(2000);
          digitalWrite(greenPin, LOW);
          }

        irrecv.resume();
}
}


Dziękuję za pomoc Smile
 
Odpowiedź
#2
(28-12-2023, 20:11)chesjo napisał(a): switch(&results)


Dlaczego tam używasz & ? To jest adres zmiennej - wartość stała. No i jakoś nie widze byś ustawiał zmienną results.
 
Odpowiedź
#3
(28-12-2023, 21:48)oscarX napisał(a):
(28-12-2023, 20:11)chesjo napisał(a): switch(&results)


Dlaczego tam używasz & ? To jest adres zmiennej - wartość stała. No i jakoś nie widze byś ustawiał zmienną results.
Coś pozmieniałem i mam takie coś, lecz teraz przy każdym nadanym sygnale przez pilot zapala się zielona dioda

Kod:
#include <IRremote.h>
int RECV_PIN = 10;
IRrecv irrecv(RECV_PIN);
decode_results results;
int redPin = 6;
int greenPin = 3;

void setup()
{
Serial.begin(9600);
IrReceiver.begin(RECV_PIN, ENABLE_LED_FEEDBACK); // zaczecie odbioru
irrecv.blink13(true);
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  irrecv.enableIRIn();
}
void loop() {
if (IrReceiver.decode()) {
Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX); // wyswietlenie w monitorze kodow  */
IrReceiver.printIRResultShort(&Serial);
IrReceiver.printIRSendUsage(&Serial);
IrReceiver.resume();

    static unsigned long previousValue = 0xFD020707;
    if (results.value != previousValue) {
      // Nowy kod
      digitalWrite(redPin, LOW);    // Wyłącz diodę czerwoną
      digitalWrite(greenPin, HIGH);  // Włącz diodę zieloną

    

      // Zaktualizuj poprzednią wartość
      previousValue = results.value;
    } else {
      // Ten sam kod
      digitalWrite(greenPin, LOW);   // Wyłącz diodę zieloną
      digitalWrite(redPin, HIGH);    // Włącz diodę czerwoną
    }


        irrecv.resume();
}
}
 
Odpowiedź
#4
Kod wstawiaj w znaczniki kod:
   
     
Nie oczekuj, że ktoś będzie próbował oglądać taki obrazek i go odczytywać np. siedząc z telefonem, albo przepisywać z obrazka by zweryfikować jak to działa na innym sprzęcie.  
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#5
(29-12-2023, 21:15)chesjo napisał(a): Coś pozmieniałem i mam takie coś, lecz teraz przy każdym nadanym sygnale przez pilot zapala się zielona dioda

Kod:
if (IrReceiver.decode()) {
    ....
}

W swoim poprzednim poście zwracałem uwagę, że zmienna results nie jest nigdzie ustawiana - zakładasz że pojawia się tam jakaś wartość, ale nigdzie nie widać podstawienia pod tą zmienną lub przekazania jej do jakiejs funkcji by ona wpisała tam wartość. Poszukałem przykładu podobnego do twojego kodu i znalazłem następującą konstrukcję:
Kod:
   if (irrecv.decode(&results)) {
   ....
}

Tutaj adres zmiennej results jest przekazywany do wywołania funkcji/metody decode - i to jest zrozumiałe - metoda ma wpisać swoje wyniki do zmiennej results. Chyba tego brakuje w twoim kodzie.
 
Odpowiedź
#6
Dzięki za pomoc, wystarczyło zmienić bibliotekę na starszą i jak na razie działa w miarę prawidłowo.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości