Cronografo arduino, (modificato) correzione codice

Ti scrivo dal parchetto sperando di avere letto correttamente...

Io lo farei tramite i due Interrupt ...

Al primo colleghi il primo sensore e rilevi i micros..
Al secondo colleghi il secondo e rilevi i micros, fai la differenza ottinieni la velocità. Allo stesso tempo riempi un array delle velocità e nel loop fai la media...
Nel secondo interrupt fai un controllo se l intervallo è troppo lungo prima che imballi il conteggio ...

Ho riletto con calma...

Mi sfugge il perchè lo colleghi ad un ingresso Analogico, quindi più lento a convertire il dato, tanto a te interessa quanto tempo impiega a transitare dal primo al secondo sensore giusto ??

Io, come ti dicevo, lo collegherei, ai pin degli interrupt e farei fare il lavoro a loro.

Ho letto alcune cose che :

Ho collegato come è fatto quì http://bildr.org/2011/03/various-proximity-sensors-arduino/
Se non faccio con gli Analog e nemmeno con gli Interrupt, come posso fare?

Non capisco xche non vuoi usarli ??

Ti serve sapere la distanza ?? ( secondo me no)

No, la distanza tra i sensori la imposto io nel codice e la distanza tra il "proiettile" e il sensore non mi serve.
Come si inserisce il codice come fate voi?

Basta leggere il regolamento del forum.
Punto 7 --> [REGOLAMENTO] Come usare questa sezione del forum - Italiano - Arduino Forum

Heisenberg94:
No, la distanza tra i sensori la imposto io nel codice e la distanza tra il "proiettile" e il sensore non mi serve.
Come si inserisce il codice come fate voi?

Allora xche non usare un pon digitale e quindi avere la possibilità di usare i due interrupt ??

Perche complicarsi la vita quando te la puoi cavare in maniere banale ??

Come faresti il codice con gli interrupt?
Ho tolto time = micros e ho inserito startTime e elapsedTime.
Il problema è che in questo caso (cosa simile a ciò che faceva con il codice precedente) mi da i primi valori di Curspeed e Avgspeed uguali a 0.0, poi continuando mi da valori di velocità anche quando copro il primo sensore (cosa che non dovrebbe fare perchè quando copro il primo sensore inizia solo a contare i microsecondi).
Bisognerebbe resettare (o portare a 0) il tempo (tra la riga "while..." del primo sensore e startTime o alla fine del loop) in modo che quando copro il primo non mi prende anche il tempo trascorso precedentemente.
Un po' come un cronometro se non resetti il tempo non fai altro che fermare e riavviare il conteggio dei millisecondi ripartendo dall' ultimo risultato.

Ecco il codice:

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

const byte firstsensPin = A4;
const byte secondsensPin = A5;
long startTime;
long elapsedTime ; 
unsigned long shots = 0;
float sumspeed = 0;
float avgspeed = 0;
const int dist = 150; // sensor distance in mm.
float mps, elap;
int val;
int val2;

void setup()
{
  Serial.begin(9600);
}

void loop()
{

  val = analogRead(firstsensPin);
  val2 = analogRead(secondsensPin);
  while (val > 40) val = analogRead(firstsensPin);
  startTime = micros();
  while (val2 > 40) val2 = analogRead(secondsensPin);
  elapsedTime = micros() - startTime;
  shots++;
  mps = (float)(dist*1000)/elapsedTime;
  sumspeed += mps;
  avgspeed = (float)sumspeed/shots;
  Serial.print("Cur speed: ");
  Serial.print(mps, 1);
  Serial.print("Avg speed: ");
  Serial.print(avgspeed, 1);
}

Up

Uppare non serve. Il codice devi scriverlo tu, al massimo possiamo correggerlo qui sul forum.
Sull'uso degli interrupt, c'è la funzione attachInterrupt e la sua documentazione da leggere:
http://arduino.cc/en/Reference/AttachInterrupt

Uppare non serve. Il codice devi scriverlo tu, al massimo possiamo correggerlo qui sul forum.
Sull'uso degli interrupt, c'è la funzione attachInterrupt e la sua documentazione da leggere:
http://arduino.cc/en/Reference/AttachInterrupt

Ho uppato oggi perchè l' ultimo messaggio è stato modificato la notte del 22 quindi magari c'era gente che credeva di averlo gia letto nella versione definitiva.
Ho postato il codice nell' ultimo messaggio e volevo sapere se esiste una maniera per resettare il tempo visto che da quanto ho trovato con google non è possibile farlo con funzioni semplici come startTime.
Il codice per gli interrupt non aveva la stessa priorità della correzione.
Grazie per il link.

Te lo racconto a parole tu prova a farlo...

Alla interrupt1 attacchi la funzione startTime, al 2 attacchi lo stop

Interrupt1 la fotocellula più vicina a te

Nella startTime rilevi il tempo.del passaggio del.colpo
Nella Stop rilevi il tempo e fai il calcolo della veloxita e infili il valore in un array.

Nel loop fai la visualizzazione su lcd.dei risultati che ottieni, mostrando l ultimo colpo, la media, il minimo e il massimo e per me che faccio tiro dinamico anche la SD non sarebbe male giusto x vedere la costanza dei colpi e quindi anche la costanza nella attingere il bersaglio...