Ir problema sketch

Salve ragazzi , forse qualcuno di voi ha letto che ho comprato e montato dei led in una stanza :

Ora mi stavo sistemando arduino con l'ir preso da uno dei telecomandi che mi han dato.
Ho avviato il dump con un 1838b ed ho ricavato questo:

F7C03F
Decoded NEC: F7C03F (32 bits)
Raw (68): -32282 8950 -4400 600 -450 700 -450 550 -550 700 -400 650 -450 600 -500 650 -450 700 -450 550 -1650 600 -1600 650 -1600 550 -1650 650 -500 550 -1650 600 -1600 600 -1650 550 -1650 600 -1600 600 -500 650 -500 550 -500 650 -500 600 -450 600 -550 650 -450 650 -500 550 -1650 600 -1600 650 -1550 600 -1650 600 -1600 650 -1550 600

Cosi ho scritto lo sketch :

#include <IRremote.h>

IRsend led;
unsigned int code[68] = {32282, 8950, 4400, 600, 450, 700, 450, 550, 550, 700, 400, 650, 450, 600, 500, 650, 450, 700, 450, 550, 1650, 600, 1600, 650, 1600, 550, 1650, 650, 500, 550, 1650, 600, 1600, 600, 1650, 550, 1650, 600,1600,600,500,650,500,550,500,650,500,600,450,600,550,650,450,650,500,550,1650,600,1600,650,1550,600,1650,600,1600,650,1550,600};

void setup()
{
  Serial.begin(9600);
}

void loop() {

   for (int i = 0; i < 3; i++) {
      led.sendRaw(code, 68,38); 
      delay(40);
    }
    
    delay(3000);
 
}

Ho puntato una cam su e vengono inviati 3 impulsi solo che non funziona , ora mi chiedo è per via della frequenza diversa o sbaglio io qualcosa (magari non vuole il raw) ?

Per i collegamenti l'ir trasmettitore e messo su gnd e dopo una resistenza da 214 su pin 9 avendo arduino mega.

Non ho capito bene da dove vengono quei numeri nel primo codice ma se ci sono dei negativi, perché trasformi tutto in numeri senza segno?
Poi l'iR viaggia su determinate frequenze, tipicamente 38 kHz. Tu come stai facendo i test?

Allora ho avviato il irremote dump , lo scketch esempio della libreria e premendo il tasto del telecomando ir (accensione) mi ha dato il codice raw e il tipo di codice che usa il telecomando.
Online ho visto che eliminano i segni , essendo alle prime armi chiedo a voi.
Il telecomando è di questo modello :
http://www.modaedesign.com/media/catalog/product/cache/1/image/9df78eab33525d08d6e5fb8d27136e95/t/e/telecomando-strip-led-rgb_1.jpg

Per le frequenze come da codice ho lasciato 38 , ma non so appunto dove reperirla

La freq la dovrebbe generare la lib ma se il telecomando non è supportato non credo ti basti sapere i dati grezzi...

ma se il dump gli ha detto che si tratta di una decodifica

Decoded NEC: F7C03F (32 bits)

è segno che lo riconosce, no?

Non ho mai giocato con gli ir ma non penso che la lib supporti tutti i protocolli e utte le codifiche. Potrebbe aver riconosciuto il trasmettitore ma non supportare il protocollo di trasmissione?

Appunto , infatti la libreria non sopporta i samsung , e quando gioco con il telecomando della tv mi dice sconosciuto ma quello dei led mi da nec che è una delle codifiche nella libreria.
Per esser sicuro ho smontato proprio l'ir di un telecomando e usato quello per evitare incompatibilità a livello hardware , ma non so se lo sketch da me scritto è corretto o no.

Se qualcuno mi da una mano a scriverlo, pensavo di verificare i dati inviati facendo un invia ricevi cn l'arduino ossia invio e ricevo i dati ir e verifico se mi restituisce lo stesso raw del telecomando. O non è possibile fare una cosa del genere ?

il led IR non c'entra assolutamente nulla, puoi usare qualsiasi cosa che operi nella gamma 38kHz, ciò che è importante è la codifica che fa l'IC montato nel telecomando e NON il suo led IR. Sul resto non so dirti, mandi tre impulsi distanziati di 40ms, sicuro che quest'ultimo valore sia idoneo al riconoscimento?

Si lo sketch è quello in basso , ora non so se è corretto lo sketch o no , per questo volevo vedere cosa mi leggeva ma aimè credo che abbia bisogno di un secondo arduino che mi va in lettura , non credo sia possibile l'invio e la ricezione sullo stesso

Per il telecomando Samsung c'e' un tizio che ha modificato la libreria.
Guarda qui, al mio post numero 5, ho indicato i link:
http://forum.arduino.cc/index.php?topic=170495.0

Per il nec, non credo ti convenga spedire brutalmente i dati raw, ma di mappare il tuo telecomando, tasto per tasto.
Poi con sendNec() puoi inviare il tasto giusto.
ti allego un esempio (con mappatura di un mio telecomando, dovrai trovare i tuoi da Monitor Seriale):

#include <IRremote.h>

const byte RECV_PIN = 10;
IRrecv irrecv(RECV_PIN);
decode_results results;
unsigned long prevval=0;
unsigned long prevm=0;

void setup()
{ delay(1000);
  Serial.begin(9600);
  Serial.println("start");
  irrecv.enableIRIn(); 
}

void loop() 
{ if (irrecv.decode(&results)) 
  { //Serial.print("Type.: "); Serial.println(results.decode_type);
    //Serial.print("Value: 0x"); Serial.println(results.value,HEX);
    if (results.decode_type == NEC) 
    {    Serial.print("BLUESKY: "); 
         switch(results.value)   // BLUESKY a 7 tasti
          { case 0xFFD02F: Serial.println("+10  "); break;
            case 0xFF48B7: Serial.println("-10  "); break;
            case 0xFF30CF: Serial.println("Skip-"); break;
            case 0xFF10EF: Serial.println("Skip+"); break;
            case 0xFFC837: Serial.println("Play "); break;
            case 0xFF40BF: Serial.println("Stop "); break;
            case 0xFF50AF: Serial.println("Mode "); break;
            default: Serial.print("??? 0x"); Serial.println(results.value, HEX);         
          } 
          prevval=results.value;
    }  
    irrecv.resume(); //Attesa ricezione prossimo valore
  }
}

nid69ita:
Per il telecomando Samsung c'e' un tizio che ha modificato la libreria.
Guarda qui, al mio post numero 5, ho indicato i link:
Mitsubishi kirigamine AC [RISOLTO] - Software - Arduino Forum

Per il nec, non credo ti convenga spedire brutalmente i dati raw, ma di mappare il tuo telecomando, tasto per tasto.
Poi con sendNec() puoi inviare il tasto giusto.
ti allego un esempio (con mappatura di un mio telecomando, dovrai trovare i tuoi da Monitor Seriale):

#include <IRremote.h>

const byte RECV_PIN = 10;
IRrecv irrecv(RECV_PIN);
decode_results results;
unsigned long prevval=0;
unsigned long prevm=0;

void setup()
{ delay(1000);
 Serial.begin(9600);
 Serial.println("start");
 irrecv.enableIRIn();
}

void loop()
{ if (irrecv.decode(&results))
 { //Serial.print("Type.: "); Serial.println(results.decode_type);
   //Serial.print("Value: 0x"); Serial.println(results.value,HEX);
   if (results.decode_type == NEC)
   {    Serial.print("BLUESKY: ");
        switch(results.value)   // BLUESKY a 7 tasti
         { case 0xFFD02F: Serial.println("+10  "); break;
           case 0xFF48B7: Serial.println("-10  "); break;
           case 0xFF30CF: Serial.println("Skip-"); break;
           case 0xFF10EF: Serial.println("Skip+"); break;
           case 0xFFC837: Serial.println("Play "); break;
           case 0xFF40BF: Serial.println("Stop "); break;
           case 0xFF50AF: Serial.println("Mode "); break;
           default: Serial.print("??? 0x"); Serial.println(results.value, HEX);        
         }
         prevval=results.value;
         break;
     }
   }  
   irrecv.resume(); //Attesa ricezione prossimo valore
 }
}

Il tuo sketch mi da errore:

in sketch_jun12a.ino: In function 'void loop()':
sketch_jun12a:33: error: break statement not within loop or switch
sketch_jun12a.ino: At global scope:
sketch_jun12a:38: error: expected declaration before '}' token

L'ho corretto (nel post sopra). Avevo lasciato pezzi del mio codice completo (nel mio sketch ho anche la mappatura di un altro telecomando a 26 tasti)

#include <IRremote.h>

const byte RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
unsigned long prevval=0;
unsigned long prevm=0;

void setup()
{ delay(1000);
  Serial.begin(9600);
  Serial.println("start");
  irrecv.enableIRIn(); 
}

void loop() 
{ if (irrecv.decode(&results)) 
  { 
    if (results.decode_type == NEC) 
    {    Serial.print("LED: "); 
         switch(results.value)  
          { case 0xF7C03F: Serial.println("ON "); break;
            default: Serial.print("??? 0x"); Serial.println(results.value, HEX);         
          } 
          prevval=results.value;
    }  
    irrecv.resume(); 
  }
}

Allora facendo cosi mi restituisce

start
LED: ON

Quindi il tasto on viene riconosciuto , perfavore mi passi lo sketch per lìinvio NEC perchè l'ho fatto ma non ne vuol sapere.

Questo è il codice che uso :

#include <IRremote.h>

IRsend irsend;

void setup()
{
  Serial.begin(9600);
}

void loop() {

    for (int i = 0; i < 3; i++) {
      irsend.sendNEC(0xF7C03F, 32); // Led power code
      delay(40);
    }

 delay(4000);
}

Allora non fidandomi della distanza ho preso un altro controller led e lho piazzato vicino alla millefori , funziona , ora mi domando come mai con il telecomando il segnale arriva a distanza di 3 metri con la basetta no ?

Distanza massima 5 metri(con un altro ir) .
Distanza massima mezzo metro con(con ir del telecomando) -_- .... come mai ?

Probabilmente il telecomando è alimentato con le tipiche due batterie AAA (3V in tutto) e sul LED IR c'è una limitazione di corrente che permette di raggiungere i circa 3 mt necessari e sufficienti per gestire una TV; nel caso della millefori invece starai lavorando a 5V, poi non ho presente il circuito (avrai messo di sicuro una R di limitazione) ma sicuramente questo LED è alimentato con maggiore tensione e corrente, quindi ha maggiore portata.

Ho appena fatto un progetto per gestire il mio condizionatore...il range utile per il led IR che ho utilizzato(banale led ir da 20 cent) è di circa 5-6 m...per il momento è attaccato direttamente(pin 3, GND) senza resistenza.

Saluti

Francesco

pndtkd:
Ho appena fatto un progetto per gestire il mio condizionatore...il range utile per il led IR che ho utilizzato(banale led ir da 20 cent) è di circa 5-6 m...per il momento è attaccato direttamente(pin 3, GND) senza resistenza.

Saluti

Francesco

questo è male, anzi malissimo, rischi di bruciare il LED IR e, peggio, il pin di Arduino. Ti basta aggiungere in serie una R da 100 ohm e stai tranquillissimo, vedrai che perderai poco o niente in termini di portata.

ahahah :slight_smile: ... non credo che si brucerà nè il led nè la porta...
Comunque è bene metterla!

Saluti

F

Fai male a non darmi credito e fai bene a mettere comunque la R.
Ho preso su RS un LED IR a caso.
Apri il pdf data-sheet e da lì ricaverai che le normali condizioni operative di questo LED vanno da un minimo di 50mA ad un massimo (non consigliato) di 100mA.
Questo significa che in assenza di R e quindi di limitazione di corrente il LED potrebbe arrivare ad assorbire anche 100mA.
Il data-sheet ATMEL dice chiaramente che la massima corrente erogabile da un pin del mega328P è di 40mA, se secondo te ATMEL dice stronzate fai come vuoi. :stuck_out_tongue_closed_eyes:
Purtroppo (il mio discorso è in generale, ora, non diretto a te) l'elettronica ha delle regole ma la gente bada solo a veder funzionare i propri accrocchi e per tale ragione Internet è stracolma di schemi sbagliati, perfino di video in cui imperversano LED collegati senza alcuna limitazione di corrente, ma anche molti altri componenti usati con i piedi; poi magari dopo qualche tempo il circuito si rompe o da' i numeri e la colpa è del venditore o del componente difettoso.
Mettiti in penitenza e fai ammenda :grin:

Caro amico hai assolutamente ragione, l'elettronica ha le sue regole e le ho imparate, certo non tutte, quando mi sono laureato in ingegneria informatica :P; ciò che intendevo dire è che in fase di testing poco importa mettere una resistenza. E' ovvio che quando si crea un circuito definitivo si deve prendere in considerazione quanto da te detto.

Saluti

Francesco