Go Down

Topic: IRremote segnale continuo (Read 2003 times) previous topic - next topic


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

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


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 :(

leo72

Siete sicuri di questa riga?
Code: [Select]
#define TASTO_OK 0x632192736
Sono 9 cifre, ed in esadecimale 9 cifre sono 36 bit. Troppe per stare in un long (4 byte, 32 bit).

#21
Jul 07, 2013, 11:43 pm Last Edit: Jul 08, 2013, 12:38 am by AndreaGeekTrufini Reason: 1
Ecco funzionaaa. :) Forse c'é stato un fraintendimento perché il codice che ho utilizzato nello sketch precedente era in DEC e non avevo fatto caso a questo!!! Ora inserendo in codice in HEX funziona. Grazie a tutti per la collaborazione. Alla prossima

Saluti

Andrea

leo72

Quando un numero inizia con 0x è un esadecimale. Lo riconosci bene perché spesso contiene anche lettere da A a F.
Ricordati che su Arduino un long o un unsigned long max sono lunghi 32 bit.

nid69ita


Ecco funzionaaa. :) Forse c'é stato un fraintendimento perché il codice che ho utilizzato nello sketch precedente era in DEC e non avevo fatto caso a questo!!! Ora inserendo in codice in HEX funziona. Grazie a tutti per la collaborazione. Alla prossima
Saluti
Andrea


A me con il telecomando che, se tieni premuto ripete FFFFFFF, mi da problemi. Spesso, mentre tieni premuto, arrivano anche codici a 0 e perciò si spegne il led.
my name is IGOR, not AIGOR


Quando un numero inizia con 0x è un esadecimale. Lo riconosci bene perché spesso contiene anche lettere da A a F.
Ricordati che su Arduino un long o un unsigned long max sono lunghi 32 bit.


Si, questo lo so :) grazie per la tua attenzione... tra tutti i codici che ho di tutti i telecomandi che ho provato, non ci ho proprio fatto caso a prendere quello HEX



A me con il telecomando che, se tieni premuto ripete FFFFFFF, mi da problemi. Spesso, mentre tieni premuto, arrivano anche codici a 0 e perciò si spegne il led.



Si, questo lo provato anche io e a me non funziona in quanto lampeggia il led e non riceve quasi mai un segnale continuo alto... Però utilizzando un telecomando che mantenendo premuto un tasto ripete sempre lo stesso valore funziona :) anche se non é il massimo della precisione, però la logica é giusta

Go Up