[URGENTISSIMO] Calcolo velocità con fotoresistenze calibrate

Salve ragazzi sono giorni che lavoro a questo progetto.
A scuola stiamo studiando il moto rettilineo uniforme e ho pensato ad un piccolo misuratore di velocità di un corpo. Ciò che ho a disposizione sono due fotoresistenze(da quanto ho capito già altri hanno usato esse).
L’ambiente in cui devo mostrare il progetto però non è lo stesso ambiente in cui sto sviluppando il progetto e quindi,lavorando con sensori di luminosità(fotoresistenze), ho deciso di calibrare le 2 fotoresistenze.

Fin qui tutto ok,il problema che persiste però è come determinare un movimento utilizzando i valori calibrati.Qui c’è il mio codice:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F,2,1,0,4,5,6,7,3, POSITIVE);

int valoreSensore = 0, valoreSensore1 = 0, led = 13, led1 = 2, minSensore = 1023, maxSensore = 0, minSensore1 = 1023, maxSensore1 = 0, a = 0, b = 0, velocita = 0, distanza = 0.112, secondi = 0, val = 0, val1 = 0;


void setup() {
  pinMode(led, OUTPUT);
  pinMode(led1, OUTPUT);
  
  lcd.begin (16,2);
  lcd.setBacklight(HIGH);
  
  lcd.print("Creato da");
  lcd.setCursor(0, 1);
  lcd.print("**********");

  delay(4000);
  lcd.clear();

  lcd.setCursor(0, 0);
  lcd.print("Sto calibrando");
  lcd.setCursor(0, 1);
  lcd.print("il primo sensore");
  
  digitalWrite(led, HIGH);
  
  while(millis() < 5000){
    valoreSensore = analogRead(A0);

    if(valoreSensore > maxSensore){
      maxSensore = valoreSensore;
    }

    if(valoreSensore < minSensore){
      minSensore = valoreSensore;
    }
  }

  lcd.clear();

  lcd.setCursor(0, 0);
  lcd.print("Primo sensore");
  lcd.setCursor(0, 1);
  lcd.print("calibrato!");

  digitalWrite(led, LOW);

  delay(2000);
  lcd.clear();

  lcd.print("Ora calibro il");
  lcd.setCursor(0, 1);
  lcd.print("secondo sensore!");
  
  digitalWrite(led1, HIGH);
  
  while(millis() < 8000){
    valoreSensore1 = analogRead(A2);

    if(valoreSensore1 > maxSensore1){
      maxSensore1 = valoreSensore1;
    }

    if(valoreSensore1 < minSensore1){
      minSensore1 = valoreSensore1;
    } 
  }
  
  digitalWrite(led1, LOW);
  lcd.clear();

  lcd.setCursor(0, 0);
  lcd.print("Secondo sensore");
  lcd.setCursor(0, 1);
  lcd.print("calibrato!");

  

  delay(2000);
  lcd.clear();
}

void loop() {
  valoreSensore = analogRead(A0);
  val = valoreSensore;
  valoreSensore = map(valoreSensore, minSensore, maxSensore, 0, 255);
  valoreSensore = constrain(valoreSensore, 0, 255); 

  valoreSensore1 = analogRead(A2);
  val1 = valoreSensore1;
  valoreSensore1 = map(valoreSensore1, minSensore1, maxSensore1, 0, 255);
  valoreSensore1 = constrain(valoreSensore1, 0, 255); 
  

  if(val< valoreSensore){
    digitalWrite(led, HIGH);
    a = millis();
    if(val1< valoreSensore1){
      b = millis();
      digitalWrite(led1, HIGH);
      delay(2000);
      digitalWrite(led, LOW);
      digitalWrite(led1, LOW);
    }else{
      digitalWrite(led, LOW);
    }
  } 

  a = (a != 0) ? a * 0.001 : 0;
  b = (b != 0) ? b * 0.001 : 0;

  secondi = ((a - b) > 0) ? (a-b) : 0;

  velocita = ((distanza / secondi)) ? (distanza / secondi) : 0;

  if(velocita > 0){
    lcd.clear();
    lcd.print(String(velocita));
    lcd.print(" m/s");
  } 

  delay(1000);
}

Ricapitolando,ciò di ci ho bisogno è di sapere come determinare il primo ed il secondo passaggio,utilizzando sensori calibrati.

Sono disperato,devo consegnare il progetto domani.

Cosa intendi esattamente per "calibrare" le fotoresistenze ? ... in base alla luminosita', o in base al tempo ? ... ricordati che, a proposito di tempo, le fotoresistenze sono componenti relativamente "lenti" (ci mettono diversi millisecondi a reagire ad un'aumento di luminosita' ed almeno una decina a stabilizzarsi, mentre per la diminuzione di luminosita' la cosa e' ancora peggiore, alcuni modelli possono richiedere una decina di ms o piu per iniziare a reagire e fino ad un centinaio di ms per stabilizzarsi da luce a buio), per cui usarle per calcolare delle velocita' non e' proprio il massimo, molto meglio fototransistor o fotodiodi ...

Etemenanki: Cosa intendi esattamente per "calibrare" le fotoresistenze ? ... in base alla luminosita', o in base al tempo ? ... ricordati che, a proposito di tempo, le fotoresistenze sono componenti relativamente "lenti" (ci mettono diversi millisecondi a reagire ad un'aumento di luminosita' ed almeno una decina a stabilizzarsi, mentre per la diminuzione di luminosita' la cosa e' ancora peggiore, alcuni modelli possono richiedere una decina di ms o piu per iniziare a reagire e fino ad un centinaio di ms per stabilizzarsi da luce a buio), per cui usarle per calcolare delle velocita' non e' proprio il massimo, molto meglio fototransistor o fotodiodi ...

Intendo calibrarle in base alla luminosità. Si,so che è non è il top usare delle fotresistenze ma purtroppo mi devo adattare :c

Si ma in ogni caso non hai un riferimento valido. Le classiche fotocellule si basano sull’interruzione di comunicazione tra un diodo e un phototransistor, tu hai solo meta del sistema, ti serve un emettitore che ti dia un valore di riferimento.

Inoltre dichiari int la variabile distanza, ma la inizializzi con 0.112: il valore delle variabile è perciò 0.

Devi usare float:

float distanza = 0.122;

Per chiarezza di listato ed evitare errori, usa una dichiarazione per riga.