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
 


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