Go Down

Topic: TRASMETTERE E RICEVERE SEGNALI IR MODULATI (Read 1 time) previous topic - next topic

fredrosa

Salve ragazzi, tempo fà ho realizzato un contapunti automatico per il biliardino servendomi semplicemente di 2 diodi led, uno che mandava un segnale fisso e l'altro che leggeva, in modo tale che la passaggio della pallina, il fascio di luce si interrompesse e lo sketch incrementasse di un punto alla squadra vincitrice.
il tutto funziona in maniera + o - buona ma la cosa che nn va bene è il fatto che nn ho modulato i raggi infrarossi e di conseguenza a volte segna qualke punto in più a seconda del sole e della temperatura e anche leggendo i valori nella seriale, nn ottengo mai valori precisi. Ora vorrei far si che il progetto diventasse migliore e quindi vorrei modulare il segnale degli infrarossi. Sto facendo delle prove con la breadboard per mandare un segnale modulato in una qualsiasi codifica (NEC,SONY, ECC) e nello stesso sketch riceverlo e stamparlo sulla seriale mettendo uno di fronte all'altro il led che manda e il ricevitore dall'altra parte in modo tale che al passaggio della pallina sulla seriale si interrompi il codice modulato e mi dia un valore diverso necessario x apprendere la variazione e incrementare il punteggio. ad esempio mando un codice tipo 20DF00FF e sulla seriale voglio che si stampi in continuazione questo. Al passaggio della pallina, siccome si interrompe il raggio, voglio che sulla seriale si stampi ad esempio 0 in modo tale da far accorgere allo sketch, una variazione.
Sto lavorando con i vari esempi della libreria ir e altro ma nn riesco a far fare ciò che voglio in un unico sketch..ad esempio questo sketch sotto, nn funziona. dove sbaglio? grazie in anticipo ragazzi ;)

Code: [Select]
#include <IRremote.h>
IRsend irsend;
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;

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

void loop(){

scrittura();
lettura();

}

void lettura() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
  }
}

void scrittura() {
  for (int i = 0; i < 3; i++) {
   irsend.sendNEC(0x20DF10EF,32);
    delay(100);
}
}

PaoloP

#1
Sep 05, 2012, 12:05 pm Last Edit: Sep 05, 2012, 12:14 pm by PaoloP Reason: 1
Non funziona, semplicemente, perché quando scrive non sta ascoltando ovvero, quando ascolta nessuno scrive.
Sono funzioni sequenziali e non parallele.
Devi usare un trasmettitore e un ricevitore.
Potresti crearti 2 mini trasmettitori con un tiny (ad esempio questo http://www.gioblu.com/prodotti?page=shop.product_details&flypage=flypage.tpl&product_id=179&category_id=36  sostituendo il led con quello infrarosso oppure http://www.gioblu.com/prodotti?page=shop.product_details&flypage=flypage.tpl&product_id=185&category_id=36 aggiungendo un led e una resistenza) e come ricevitore usare l'Arduino.

fredrosa

innanzitutto grazie ;) ma possibile xo che arduino nn riesce a mandare un segnale codificato con un led infrarosso e contemporaneamente leggere sulla seriale con un ricevitore ir ?

PaoloP


innanzitutto grazie ;) ma possibile xo che arduino nn riesce a mandare un segnale codificato con un led infrarosso e contemporaneamente leggere sulla seriale con un ricevitore ir ?

Si è possibile ma devi cambiare la struttura del programma usando gli interrupt.

fredrosa

Aaa capisco... Potreste aiutarmi ? Magari con degli esempi.. Nn ho mai usato gli interrupt

Go Up