Go Down

Topic: IRremote segnale continuo (Read 1 time) previous topic - next topic

AndreaGeekTrufini


Veramente non funziona nulla.
Che è questo tra le variabili globali?
decode_results(results);

Deve essere:
decode_results results;


Si scusa quello lo avevo corretto prima però qui ho messo il file non corretto... :P così non mi funziona, quando premo il pulsante OK sul telecomando mi resta acceso e non si spegne più

nid69ita

Al massimo io sono arrivato a questo, ma funziona molto male, in quanto il telecomando funziona con degli interrupt e quando tieni premuto il testo spesso la libreria legge comunque un tasto 0 (ovvero nulla)
Ho provato a fare come suggerito da @uwe con la millis().
Io ho un telecomando che se tieni premuto da un codice fisso, perciò per semplificare tasto ok o tasto ripetuto per me è uguale.

Code: [Select]

#include <IRremote.h>

#define TASTO_RIPETI 0xFFFFFFFF
#define TASTO_OK 0x632192736

const byte LED_PIN=13;
const byte RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
boolean pulsantePremuto = false;
unsigned long prevmillis=0;

void setup() {
  delay(1000);
  Serial.begin(9600);
  Serial.println("go");
  pinMode(LED_PIN, OUTPUT);
  irrecv.enableIRIn();
}

void loop() {
  if (irrecv.decode(&results))
  { if(results.value==TASTO_OK || results.value==TASTO_RIPETI)
    { //Serial.println("Okay");
      pulsantePremuto=true;
      prevmillis=millis();
    }
    else
    { //Serial.println("altro tasto");
      pulsantePremuto=false;
    }

  }
  irrecv.resume();
  if(millis()-prevmillis>200)
  { //Serial.println(millis());
    if(results.value==0) pulsantePremuto=false;
    prevmillis=millis();
  }
  Serial.print("results.value:"); Serial.print(results.value);
  Serial.print("  pulsantePremuto:"); Serial.print(pulsantePremuto);
  Serial.println("");
  results.value=0;
  if(pulsantePremuto)
    digitalWrite(LED_PIN, HIGH);
  else
    digitalWrite(LED_PIN, LOW);
}
my name is IGOR, not AIGOR

AndreaGeekTrufini

Mi da un errore nella compilazione dello sketch nel punto indicato con le frecce:

Code: [Select]
void loop() {
  if (irrecv.decode(&results)) {
[u][b]  if(results.value == TASTO_OK || TASTO_RIPETI ) [/b][/u] <--- <--- <-- qui mi dice: "integer constant is too large for 'long' type"
    { //Serial.println("Okay");
      pulsantePremuto=true;
      prevmillis=millis();
    }
    else
    { //Serial.println("altro tasto");
      pulsantePremuto=false;
    }

nid69ita

Appare diversa da quella che ho postato io.
Comunque a te il telecomando quanto tieni premuto ripete lo stesso codice, non il FFFFFF giusto?
Elimina quella parte e lascia solo il tuo tasto

if(results.value==TASTO_OK)
my name is IGOR, not AIGOR

AndreaGeekTrufini


Appare diversa da quella che ho postato io.
Comunque a te il telecomando quanto tieni premuto ripete lo stesso codice, non il FFFFFF giusto?
Elimina quella parte e lascia solo il tuo tasto

if(results.value==TASTO_OK)


Si, lo so... infatti ho eliminato giá il tasto ripeti, ma mi da lo stesso errore :(

Go Up