Go Down

Topic: IRremote segnale continuo (Read 2466 times) 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 :(

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).

AndreaGeekTrufini

#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

AndreaGeekTrufini


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

AndreaGeekTrufini



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

Turco83

Ciao,
qualcuno alla fine mi puo quotare lo sketch completo pls ?

grazie

marinaio67

Ciao,
qualcuno alla fine mi puo quotare lo sketch completo pls ?

grazie
Arrivi senza presentarti, riesumi un post di 2 anni fa e chiedi la pappa pronta. come inizio non c'è male  :smiley-twist:

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy