-
Notifications
You must be signed in to change notification settings - Fork 1
/
nerfFireRateMeasurement.ino
67 lines (61 loc) · 1.52 KB
/
nerfFireRateMeasurement.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
//nerfFireRateMeasurement
//Matthew Miller
//KK4NDE
//20-January-2013
/*
This was some simple code I used to test the gun interface.
It waits for you to fire a dart (by manually pulling the
trigger) or series of darts and prints out metrics about
how fast they are being fired to the serial console in
human-readable format.
*/
#define fire 2 //pin for fire trigger
#define sense 3 //pin for dart sensor beam
int count=0;
long timeStart;
long last;
void setup()
{
Serial.begin(9600);
pinMode(fire,OUTPUT);
pinMode(sense,INPUT);
digitalWrite(fire,LOW);
Serial.println("Ready.");
}
void loop()
{
if(digitalRead(3) == LOW)
{
if(count == 0)
{
timeStart=micros();
last=micros();
}
else
{
long time=micros();
while(digitalRead(3) == LOW);
long blocking=micros();
Serial.print("Dart ");
Serial.println(count);
Serial.print("Fire cycle: ");
float fireCycle=(time-timeStart)/(count)/(float)1000;
Serial.print(fireCycle);
Serial.println(" milliseconds avg");
Serial.print("Rate of Fire: ");
Serial.print(1000/fireCycle);
Serial.println(" darts/sec");
Serial.print("Sensor uSec: ");
long sensorTime=blocking-time;
Serial.println(sensorTime);
Serial.print("Velocity: ");
Serial.print((float)250000/sensorTime);
Serial.print(" ft/sec (");
Serial.print((float)76200/sensorTime);
Serial.println(" meter/sec)");
Serial.println("");
}
count++;
delay(100);
}
}