CRONOGRAFO BALISTICO

...dunque utilizzando il codice che segue ho fatto dei test cablando come segue:

  • TSOP34838: gnd, +v5, out ai pin 2(int 0) per il sensore front e pin 3(int 1) per il sensore posteriore;
  • diodo IR emettitore tramite R 100ohm al +v5 e gnd;
    Le barriere sono posizionate a 6 cm di distanza giusto per vedere se legge. Interrompendo il flusso n direzione ant-->post il monitor seriale visualizza dei lavori ma, ritengo pe ril cablaggio su millefori, le letture ogni tanto non avvengono.
    Ora passo al codice. L'ho trovato in rete e studiato. Non mi è del tutto chiaro però. L'architettura l'ho capita ni senso generale peroò non capisco quei led1 e led2 sui pin 12 e 13.
    Che ne pensate?
    Ovviamente il codice dovrà essere utilizzato con i componenti che devo ancora reperire laser e ricevitore laser e/o IR e fotodiodi PIN
/*
Fotodiodi o fototransistor sono nominati come attachInterrupt (0, front, CHANGE) collegato
con il pin digitale 2, e, attachInterrupt (1, posteriore, CHANGE) collegato al pin digitale 3
Coloro che vogliono provarlo possono collegare due pulsanti ai pin 2 e 3
I fotodiodi devono avere una resistenza tra 10k e 100kohm collegati al collettore (pin o gamba lunga) e questo al pin digitale
per assicurarsi che quando il raggio di luce viene interrotto, la tensione raggiunga 0 o massa
*/

// #include <LiquidCrystal.h>
 
#define MPS2FPSCOEFF 3.28084
#define LENGTH 0.159             
#define MICRO2SEKCOEFF 1000000

//LiquidCrystal lcd(4, 5, 6, 7, 8, 9);

volatile int stateFront = HIGH;
volatile int stateRear = HIGH;

int led1 = 12;                             
int led2 = 13;                             
int startChrono;
unsigned long startTime, stopTime, elapsed;
double fpsSpeed, mpsSpeed; 
 
void setup()
{
  Serial.begin(9600);
  //lcd.begin(16, 2);
  //lcd.setCursor(0, 0);
  //lcd.print("Super Chrono");
  Serial.print("Cronografo");
  //lcd.setCursor(0, 1);
  //lcd.print("by nv");
  delay(700);
  //lcd.clear();
  //lcd.setCursor(0, 0);
  //lcd.print("Initializing...");
  Serial.println("Inizializando");
  delay(700);
 // lcd.clear();
 
  startChrono = 0;
  elapsed = 0;
  fpsSpeed = mpsSpeed = 0;
 
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  /*
  Se tutto ok non cambiare nulla. Diversamente provare a cambiare CHANGE in RISING o LOW in 
  attachInterrupt(0, front, "      ") ed in attachInterrup(1, rear, "     ");
  */
  attachInterrupt(0, front, CHANGE); //0 (on digital pin 2) kanske falling/rising/low
  attachInterrupt(1, rear, CHANGE);  //1 (on digital pin 3)
//  attachInterrupt(0, front, RISING); //0 (on digital pin 2) kanske falling/rising/low
//  attachInterrupt(1, rear, RISING);  //1 (on digital pin 3)
  //lcd.setCursor(0, 0);
  //lcd.print("Take a shot!");
  Serial.println("Pronto per sparare?");
}
 
void loop()
{
  //Start counting when interrupted
  if(stateFront == LOW && startChrono == 0)
  {
    startTime = micros();  // Count microseconds since start
    startChrono = 1;       // Set Chrono flag
    digitalWrite(led1, HIGH);
  }
 
  // Stop counting and calculate speed
  if(stateRear == LOW && startChrono == 1)
  {
    stopTime = micros();  // Count microseconds since start
    startChrono = 0;      // Clear Chrono flag
    elapsed = stopTime - startTime;  // Calculate elapsed time (in micros)
 
    digitalWrite(led2, HIGH); // pin 13
    mpsSpeed = (LENGTH*(MICRO2SEKCOEFF)) / elapsed;            // s = v * t, v = s / t
   // fpsSpeed = mpsSpeed * MPS2FPSCOEFF;

    //lcd.clear();
    //lcd.print("Fps: ");
    //lcd.print(fpsSpeed);
    Serial.println("PPS(Piedi al secondo) ");
    Serial.print(fpsSpeed);
    //lcd.setCursor(0, 1);
    //lcd.print("m/s: ");
    //lcd.print(mpsSpeed);
    Serial.println("Metri al secondo ");
    Serial.print(mpsSpeed);
   
    startChrono = 0;
   
    delay(500);
    digitalWrite(led2, LOW);
    digitalWrite(led1, LOW);
   
  }
 
}

void front()
{
  stateFront = !stateFront;
}

void rear()
{
  stateRear = !stateRear;
}