Pages: 1 [2]   Go Down
Author Topic: IRremote segnale continuo  (Read 1409 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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... smiley-razz così non mi funziona, quando premo il pulsante OK sul telecomando mi resta acceso e non si spegne più
Logged

ivrea (to)
Offline Offline
Faraday Member
**
Karma: 77
Posts: 4659
miaaao ^-^
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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);
}
Logged

my name is IGOR, not AIGOR

Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code:
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;
    }
Logged

ivrea (to)
Offline Offline
Faraday Member
**
Karma: 77
Posts: 4659
miaaao ^-^
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

my name is IGOR, not AIGOR

Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-sad
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Siete sicuri di questa riga?
Code:
#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).
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ecco funzionaaa. smiley 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
« Last Edit: July 07, 2013, 05:38:46 pm by AndreaGeekTrufini » Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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


ivrea (to)
Offline Offline
Faraday Member
**
Karma: 77
Posts: 4659
miaaao ^-^
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ecco funzionaaa. smiley 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.
Logged

my name is IGOR, not AIGOR

Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley 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
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


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 smiley anche se non é il massimo della precisione, però la logica é giusta
Logged

Pages: 1 [2]   Go Up
Jump to: