[RISOLTO]Infrarossi

Salve ragazzi è diversi giorno che cerco in rete ma tutti i collegamenti che trovo non funzionano. Ho un led IR ed un ricevitore TSOP 4838. Il mio sketch dovrebbe funzionare che all’interrompere del fascio infrarosso dovrebbe incrementarsi il contatore. Allego qua sotto il codice, così avete un idea più chiara inoltre chiedo di nuovo consiglio sui collegamenti perchè davvero non riesco a farlo funzionare. Help Me

/**
 * /@author Christian Berti
 * /rilevatore di ingressi PROTOTIPO
 **/
int TxPin=6;//pin trasmissione seriale display LCD
const char tras= 'h';
#include <SoftwareSerial.h> //importo libreria seriale per display LCD
SoftwareSerial mySerial = SoftwareSerial(255,TxPin);//dichiaro un oggetto della libreria per display LCD
int FotoPin = 1;//dichiarazione attributo per memorizzazione lettura fotoresistore
int ledpin=13; //pin led riflettore fascio luminoso
int FotoValue;//attributo in cui viene memorizzato valore letto da fotoresistore
int ricevitoreIR=8;//pin led segnalatore passaggio
int contatore;//attributo dedito al conteggio 
char valbutton;//dichiarazione attributo per memorizzazione stato interruttore
int val=0;//attributo in cui viene memorizzato valore letto da interruttore
void setup() {//dichiarazione utilizzo pin
  pinMode(ledpin,OUTPUT); //dichiarazione tipo di pin
  OCR2A = 211;
  TCCR2A = 0b01000011;
  TCCR2B = 0b00001001;
  Serial.begin(9600);
  pinMode(ricevitoreIR, INPUT);//dichiarazione tipo di pin
  pinMode (TxPin, OUTPUT);//dichiarazione tipo di pin
  mySerial.begin(9600);//dichiarazione velocità aggiornamento LCD
  delay(100);
  mySerial.write(12);//pulizia LCD

}
void loop() {
  valbutton= Serial.read();//associo lettura digitale all'attributo
  digitalWrite(ledpin,HIGH);//accende il led riflettore
  FotoValue = digitalRead(ricevitoreIR);// assegna all'attributo il valore letto
  if (valbutton==tras){ //confronto lettura interruttore con valore HIGH
    contatore=0;//azzero contatore
    mySerial.println("Sistema Azzerato");//stampa su LCD
    delay (2000);//ritarda di 2 secondi
  }
  else{ //confronto lettura interruttore con valore LOW

    if (FotoValue==LOW){//confronto attributo con soglia prefissata
      mySerial.write(12);//pulizia LCD
      Serial.println(FotoValue);// stampa su seriale il valore del fotoresistore
      contatore++;//incremente l'attributo
      mySerial.print("Persone: ");//stampa su LCD
      mySerial.println(contatore);//stampa su seriale l'attributo
      delay(1500);//aspetta un secondo e mezzo
    }
    else{
      delay(500);//aspetta mezzo secondo e riesegue la lettura del fotoresistore
    }
  }
}

Devi capire come funziona il tuo TSOP, se è impulsivo o a tempo: nel primo caso quando si interrompe il fascio dà un solo rapido impulso, nel secondo caso invece resta su HIGH per tutto il tempo dell'interruzione. Tutti quei delay non ti aiutano sicuro, il modo più efficace è collegare il TSOP ad un pin interrupt ed è fatta.

Ed il led emittente va collegato con una resistenza in seria da 100 ohm? La modulazione a 38 KHz è eseguita nel mio sketch?

pres961: Ed il led emittente va collegato con una resistenza in seria da 100 ohm? La modulazione a 38 KHz è eseguita nel mio sketch?

la R da 100 ohm è indispensabile, lo sketch per la parte 38kHz sembra a posto, solo che non credo tu possa usare il pin 13, devi usare uno di quelli collegati al TIMER, non ricordo se è il 3 o l'11, controlla dove hai preso lo sketch, inoltre ricordo che OCR2A = 211; era l'ultima delle tre righe di istruzione, ma onestamente non so se ha importanza, ora passa un capo e te lo spiegherà meglio...

Ok per quanto riguarda il ricevitore ho usato il piedino 2 di arduino utilizzando un interrupt

pres961: Ok per quanto riguarda il ricevitore ho usato il piedino 2 di arduino utilizzando un interrupt

chiaramente ti devi costruire una routine con attachInterrupt, ecc.

Esattamente grazie ho risolto tutti i miei problemi grazie mille!

Di niente. Ciao :)