Pages: [1] 2   Go Down
Author Topic: IRremote segnale continuo  (Read 1400 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

Salve a tutti,
sono nuovo del forum. Mi chiamo Andrea, ho 16 anni e da poco mi sono avvicinato al Mondo di Arduino.
Sto realizzando un braccio robotico e vorrei controllarlo con un telecomando infrarossi con IRremote. Ho già fatto delle prove, però sono riuscito, per esempio, a fare accendete un led con un tasto e a spegnerlo con un altro.
Ci sarebbe un modo per far restare acceso il led per il tempo che mantengo premuto un determinato pulsante???
Se qualcuno di buona volontà potrebbe farmi un esempio di sketch gli sono molto grato smiley
Per esempio il codice in HEX trasmesso dal mio telecomando(telesystem) con il tasto OK é 25AE7EE0

Grazie mille
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

Ciao e benvenuto.
Ti suggerisco la lettura del regolamento per imparare l'uso del forum e dei suoi strumenti  smiley-wink

Sul tuo problema, resta da capire se il tuo telecomando con il pulsante premuto fa un invio continuo oppure no, per capire poi come poter gestire il comando ricevuto. Se lo fa continuativo, basta leggere e tenere acceso finché c'è quel dato, altrimenti o prevedi un sistema di accensione/spengimento oppure con timeout.
Logged


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

Molti dei miei telecomandi quando tieni premuto un tasto non sparano più quel valore ma un fisso 0xFFFFFFFF
perciò devi prima memorizzarti il valore del tasto.
Logged

my name is IGOR, not AIGOR

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

Si, leggeró accuratamente il regolamento smiley grazie...
Comunque ho due telecomandi:
- con uno, mantenendo premuto un pulsante il primo valore é quello che corrisponde al tasto stesso, mentre i successivi sono FFFFFFFF...
- con l'altro telecomando, invece, mantenendo premuto un pulsante viene ripetuto costantemente il valore del pulsante stesso... ho fatto alcune prove peró, essendo ancora alle basi, non sono riuscito a trovare una soluzione e vi chiedo gentilmente uno sketch con un minimo di spiegazione smiley
Ancora grazie smiley
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

Al max possiamo correggere un tuo sketch.
Posta quello che non ti funziona, spiega cosa fa e cosa invece dovrebbe fare e vediamo di trovare una soluzione. Sketch ex-novo non si scrivono perché non si può indovinare la logica che vuoi dare tu al programma e poi perché senza il tuo hardware in mano sarebbe come sparare nel vuoto. Senza considerare che se ti scriviamo noi il programma poi tu non impari nulla.  smiley-wink Se questo programma non è di facile realizzazione per te, ti consiglierei di iniziare con progetti più semplici e di seguire la strada che andrebbe fatta normalmente, ossia quella dei piccoli passi, partendo dalle basi e poi salendo pian piano.
Logged


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

Ci sarebbe un modo per far restare acceso il led per il tempo che mantengo premuto un determinato pulsante???
Al massimo pseudocodice, che ti indica la logica. Comunque per semplificare, usa il telecomando che ripete sempre lo stesso codice, lascia stare l'altro, per ora.

if (tasto == XXX)
  accendi led
else  // ovvero qualsiasi altro tasto)
  spegni led

EDIT: si, vero ho scritto una cavolata. Così non può funzionare.
« Last Edit: July 06, 2013, 07:33:09 am by nid69ita » Logged

my name is IGOR, not AIGOR

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

Ci sarebbe un modo per far restare acceso il led per il tempo che mantengo premuto un determinato pulsante???
Al massimo pseudocodice, che ti indica la logica. Comunque per semplificare, usa il telecomando che ripete sempre lo stesso codice, lascia stare l'altro, per ora.

if (tasto == XXX)
  accendi led
else  // ovvero qualsiasi altro tasto)
  spegni led

Giá ho utilizzato questo sketch, in questo modo il led si accende quando premo il tasto indicato e resta acceso fino a quando non premo un altro tasto... io invece vorrei fare in modo che il led deve restare acceso per il tempo che mantengo premuto il pulsante e poi al rilascio del pulsante si dovrebbe spegnere
Logged

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

Al max possiamo correggere un tuo sketch.
Posta quello che non ti funziona, spiega cosa fa e cosa invece dovrebbe fare e vediamo di trovare una soluzione. Sketch ex-novo non si scrivono perché non si può indovinare la logica che vuoi dare tu al programma e poi perché senza il tuo hardware in mano sarebbe come sparare nel vuoto. Senza considerare che se ti scriviamo noi il programma poi tu non impari nulla.  smiley-wink Se questo programma non è di facile realizzazione per te, ti consiglierei di iniziare con progetti più semplici e di seguire la strada che andrebbe fatta normalmente, ossia quella dei piccoli passi, partendo dalle basi e poi salendo pian piano.

Si, hai pienamente ragione... sto studiando il C dalle basi, peró da sempre ho voluto realizzare una cosa del genere e lo faccio anche per mettere in pratica quello che imparo... conosco giá cicli e cose varie  perché a scuola abbiamo effettuato lo studio del linguaggio di programmazione Pascal... Comunque ora sono dal mio smartphone e non ho lo sketch a portata di mano, lo posto oggi pomeriggio e vediamo di correggerlo insieme smiley
Grazie per la disponibilitá
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21244
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Controlla se viene ricevuto il codice per accendere il led.
Accendi il led e memorizzi la variabile che Ti da millis().
Se entro x ms (per esempio 100ms) non ti arriva un altro codice accensione led lo spegni
Se arriva un altro codice accensione led aggiorni la variabile che memorizza i millis() cosí parte il tempo di nuovo.

http://opensourcehardwarejunkies.com/tutorial-12-blink-an-led-without-using-the-delay-function/

Ciao Uwe
Logged

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

Ragazzi ecco una delle prove che ho fatto:

Code:
#include <IRremote.h>

#define OK    0x25AE7EE0         // pulsante OK

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup() {
pinMode(13,OUTPUT);

irrecv.enableIRIn();
Serial.begin (9600);
}

void loop(){
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);       //Risultato in esadecimale
    irrecv.resume();
    }
         if(results.value==OK) {
         digitalWrite(13,HIGH);
         }
            else{
                digitalWrite(13,LOW);
                }
}

però come già vi ho detto con questo sketch il led mi resta acceso fino a quando premo un tasto(diverso da OK) che provoca lo spegnimento del led stesso. Io vorrei farlo rimanere acceso solo per la durata che mantengo premuto il tasto smiley Come faccio???

edit by mod: per favore includi il codice usando gli appositi tag
« Last Edit: July 06, 2013, 12:31:34 pm by leo72 » Logged

Capo d'Orlando
Offline Offline
God Member
*****
Karma: 1
Posts: 560
Electronics & Web Dev, Unix User, Ω LEO, Rock/Deep Music, Tech/Science/Finance addicted, Ski/Snowboard and much more …
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
#include <IRremote.h>

int led1 = 5;
int RECV_PIN = 4;
IRrecv irrecv(RECV_PIN);
decode_results results;
byte flag=0;

void setup() { 
 Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
  pinMode(led1, OUTPUT);
}

void loop() {
   if (irrecv.decode(&results)) {
     Serial.println(results.value, DEC);
      irrecv.resume();
       if (results.value == 33480735) {
         digitalWrite(led1, flag);
         flag^=1;
       }
    }
}

by Leo72, tempo fa !
Logged


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

Grazie mille a AnerDev!!!
Però non é ancora quello che vorrei realizzare. Con lo sketch postato riesco a fare lampeggiare il led mantenendo premuto il pulsante. Però io avrei bisogno di mantenere il LED acceso per il tempo che mantengo premuto il pulsante e spegnere il LED lasciando semplicemente il pulsante stesso, tipo come i circuiti realizzanti con i pulsantini SMD. smiley
« Last Edit: July 07, 2013, 12:37:49 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

La logica l'hai detta esattamente tu, devi solo tramutarla in codice  smiley-wink
io avrei bisogno di mantenere il LED acceso per il tempo che mantengo premuto il pulsante spesso e spegnere il LED lasciando semplicemente il pulsante, tipo come i circuiti realizzanti con i pulsantini SMD. smiley

Quindi:
Code:
if (digitalRead(pulsante) == statoLogicoCheTiPare) {
  digitalWrite(led, HIGH);
  while (digitalRead(pulsante) == statoLogicoCheTiPare); //questo blocca finché premi il pulsante
  digitalWrite(led, LOW);
}

Così ovviamente sei bloccato finché non rilasci il pulsante. Se invece nel contempo vuoi fare altro, dovresti fare una cosa più complessa, usando una variabile di stato:
Code:
boolean pulsantePremuto = false;
void loop() {
  if (digitalRead(pulsante) == statoLogicoCheTiPare) {
    if (pulsantePremuto == false) {
      digitalWrite(led, HIGH);
      pulsantePremuto = true;
    }
  } else {
    if (pulsantePremuto == true) {
      pulsantePremuto = false;
      digitalWrite(led, LOW);
    }
  }
  ....il resto del tuo codice
}

1) Non l'ho provato.
2) Occhio ai rimbalzi, il codice non li controlla.
Logged


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

Grazie leo72 smiley
Io avrei intenzione di comandare diversi led con diversi tasti del telecomando e da come l'ho "compilato" non so se é possibile... sono all'inizio ed ho alcuni problemi

Code:
#include <IRremote.h>

#define OK 0x632192736

#define led 13

int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results(results);
boolean pulsantePremuto = false;

void setup() {
  pinMode(led, OUTPUT);
 
  irrecv.enableIRIn();
     Serial.begin(9600);
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, DEC);
       irrecv.resume();
       
if (digitalRead(RECV_PIN) == HIGH) {
    if (pulsantePremuto == false) {
      digitalWrite(led, HIGH);
      pulsantePremuto = true;
    }
  } else {
    if (pulsantePremuto == true) {
      pulsantePremuto = false;
      digitalWrite(led, LOW);
    }
  }
 }
}

però comunque in questo modo non mi funziona... probabile mio errore smiley-razz smiley-grin
Logged

ivrea (to)
Offline Offline
Faraday Member
**
Karma: 77
Posts: 4645
miaaao ^-^
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;
Logged

my name is IGOR, not AIGOR

Pages: [1] 2   Go Up
Jump to: