sensore fotoelettrico

buon giorno, vorrei installare un sensore fotoelettrico a rifrazione che mi rilevi il passaggio di un modello radiocomandato, inviando un segnale attraverso il sensore ad arduino in modo che mi parta il cronometro per verificare il tempo nei due passaggi, ho già realizzato il circuito per prova con un infrarosso, tipo telecomando tv, ed il tutto funziona, utilizzo una libreria di arduino "IRremote, adesso che ho installato la fotocellula, il sensore mi rileva l'interruzione del flusso, però non d'ha nessun segnale ad arduino, dovro cambiare libreria, e quale, ho fare altre modifiche.
allego il code

#include <IRremote.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3f, 16, 2);
#define NUM_GIRI 15 //indico il numero di giri max

//variables
const byte lightPin = 0;  
int speakerPin = 8;
int RECV_PIN = 0;
unsigned long lapMillis = 0;
unsigned long startMillis = millis();
unsigned long bestMillis = 9999999;
float lapTime = 0.00;
float bestLap = 0.00;
boolean firstTrigger = true;
boolean newBest = false;
int pulsante = 6;
int giro=0;
IRrecv irrecv(RECV_PIN);
int numGiro = 0;  //numero del giro eseguito
int posArrayLCD = 0; //cosa devo mostrare su LCD
unsigned tempiSuGiro[NUM_GIRI]; //creo un array che può contenere un tempo per ogni giro;ogni tempo può contenere da 0 a 65535
int statop = 0;

void setup()
{
    
    lcd.init ();
    lcd.backlight();
    lcd.setCursor(0, 0);
    lcd.print("Start!           ");
    Serial.begin(9600); 
    pinMode(speakerPin, OUTPUT);
    digitalWrite(speakerPin, LOW);
    irrecv.enableIRIn();
    pinMode (pulsante, INPUT);
    
    
 
}
void loop()
{

//lettura dal sensore di luce
RECV_PIN = analogRead(lightPin);


  //Se la macchina rilevata
  if(RECV_PIN < analogRead(1)){
  
    
    //determinare il tempo sul giro in millisecondi
    lapMillis = millis() - startMillis;
    startMillis = millis();
    
    lapTime = lapMillis / 1000.00;
    
    //se gli abeti innescano la gara di stampa iniziata
    if (firstTrigger == true){
      lcd.setCursor(0, 0);
      lcd.print("Race Started!    ");
      
    }
    
    //stampa se non il primo trigger
    if (firstTrigger != true){
      giro = (giro+1);
      Serial.print("lapTime: ");
      Serial.println(lapTime);
      Serial.print("lapMillis: ");
      Serial.println(lapMillis);
      //print lap time
      lcd.setCursor(0, 0);
      lcd.print("Lap:    "); 
      lcd.setCursor(4, 0);
      lcd.print(giro);
      lcd.setCursor(8, 0);
      lcd.print(lapTime);
      lcd.print("       ");
      tempiSuGiro[numGiro]= lapTime;
      numGiro++; //incremento il numero del giro per prossimo passaggio
      statop = digitalRead(pulsante);}
    if(statop == HIGH)
    {
      lcd.setCursor(0 ,0);  
      lcd.print(tempiSuGiro[posArrayLCD]);
      posArrayLCD++;
    } 
      
   
    
    //se l'ultimo giro è meglio del miglior giro
    if(lapMillis < bestMillis && firstTrigger != true)
    {
      bestMillis = lapMillis;
      bestLap = lapTime;
      Serial.print("bestLap: ");
      Serial.println(bestLap);
      //print best lap time
      lcd.setCursor(0, 1);
      lcd.print("BestLap: ");
      lcd.print(bestLap);
      lcd.print("      ");
      newBest = true;
      
    }
    
    //beep piezo
    if(newBest == true)
    {
      digitalWrite(speakerPin, HIGH);
      delay(1000);
      digitalWrite(speakerPin, LOW);
      delay(25);
      digitalWrite(speakerPin, HIGH);
      delay(50);
      digitalWrite(speakerPin, LOW);
      delay(25);
      digitalWrite(speakerPin, HIGH);
      delay(50);
      digitalWrite(speakerPin, LOW);
      delay(25);
      digitalWrite(speakerPin, HIGH);
      delay(50);
      digitalWrite(speakerPin, LOW);    
      newBest = false;
    } 
    else
    {
      digitalWrite(speakerPin, HIGH);
      delay(150);
      digitalWrite(speakerPin, LOW);
    }
    
    firstTrigger = false;
    Serial.println("----------------"); 
  }
}

???
La libreria RCremote decodifica il codice ricevuto da un telecomando. Nello sketch non ne fai uso.
Spiegati meglio.

Ciao Uwe

sto utilizzando la libreria "IRremote.h" prima riga dello sketch

No, la includi.

chemmy:
sto utilizzando la libreria "IRremote.h" prima riga dello sketch

No, la includi e basta. Dove usi le funzioni della libreria?
È come mettere un libro nella tasca e non aprirlo mai per leggerlo. Ce l' hai dietro tutto il giorno, ma non lo usi.

Ciao Uwe

In effetti, come dice Uwe, anche io vedo solamente ...

  1. l'inclusione della libreria (#include <IRremote.h>)
  2. l'istanza della classe (IRrecv irrecv(RECV_PIN); ... sul pin 0 :o)
  3. l'abilitazione della ricezione (in Setup: irrecv.enableIRIn():wink:

... e nulla più.

Fossi in te mi studierei pun po' meglio gli esempi a corredo della libreria (es. IRrecvDemo.ino) per capire come si usa ::slight_smile:

Guglielmo

P.S.: ma piuttosto, tu hai capito a che serve la libreria IRremote ? ? ? perché a me viene il dubbio vista la tua applicazione ...

nel loop lo unitilizzo

//lettura dal sensore di luce
RECV_PIN = analogRead(lightPin);


  //Se la macchina rilevata
  if(RECV_PIN < analogRead(1)){

il segnale dell'infrarosso lo prende bene perchè mi da i valori giro per giro
avevo chiesto se IRremote comprende anche i sensori fotoelettrici, perchè vorrei sostituire il sensore infrarosso
grazie

chemmy:
nel loop lo unitilizzo

//lettura dal sensore di luce

RECV_PIN = analogRead(lightPin);

//Se la macchina rilevata
  if(RECV_PIN < analogRead(1)){




il segnale dell'infrarosso lo prende bene perchè mi da i valori giro per giro
avevo chiesto se IRremote comprende anche i sensori fotoelettrici, perchè vorrei sostituire il sensore infrarosso
grazie

non entro nel merito del programma, che considero pessimo e qui mi fermo
ma mi sono incuriosito sul piedino usato dalla anlogRead
è il pin 1, vero, quello della seriale HW?
non il pin A1, che sarebbe il pin 15, giusto?
a questo proposito, ma mi sembra solo a me che il reference sia un po' strano sulla numerazione dei pin della analogread?