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("----------------");
}
}