7
7
// This program tries to measure the width of the signal pulses in
8
8
// microseconds. It takes several measurements and prints it the average over
12
13
// number of signal pulses to average
13
#define AVERAGE_SAMPLES 1
15
// should average be result, or damping?
16
#define AVERAGE_DAMP 1
20
#define GRAPH_MIN 1000
21
#define GRAPH_MAX 2000
14
#define SIGNAL_SAMPLES 10
25
17
// set to the time that the last signal pulse was at
47
39
Serial.begin( 9600 );
53
unsigned long last_pulse_off = 0;
54
unsigned long intervals[ AVERAGE_SAMPLES ];
44
unsigned long last_pulse = 0;
45
unsigned long intervals[ SIGNAL_SAMPLES ] = {0};
55
46
int interval_idx = 0;
58
for( int a = 0; a < AVERAGE_SAMPLES; a++ )
63
char graph[ GRAPH_SIZE + 3 ];
64
for( int a = 1; a < GRAPH_SIZE + 1; a++ )
67
graph[ GRAPH_SIZE + 1 ] = ']';
68
graph[ GRAPH_SIZE + 2 ] = 0;
73
50
// detect pulse falling-edge
75
unsigned long pulse_on = _new_pulse_on;
76
unsigned long pulse_off = _new_pulse_off;
51
unsigned long new_pulse_on = _new_pulse_on;
52
unsigned long new_pulse_off = _new_pulse_off;
79
53
bool got_pulse = false;
80
if( pulse_off != last_pulse_off )
54
if( new_pulse_off > last_pulse )
83
unsigned long interval = pulse_off - pulse_on;
84
// if( interval > 800 && interval < 3000 )
86
// update interval buffer
87
intervals[ interval_idx ] = pulse_off - pulse_on;
88
if( ++interval_idx >= AVERAGE_SAMPLES )
94
last_pulse_off = pulse_off;
56
// update interval buffer
57
intervals[ interval_idx ] = new_pulse_off - new_pulse_on;
58
if( ++interval_idx >= SIGNAL_SAMPLES )
61
last_pulse = new_pulse_off;
97
65
// display average?
99
( AVERAGE_DAMP || interval_idx == 0 ) )
66
if( interval_idx == 0 && got_pulse )
101
68
// calculate average
102
unsigned long ave = 0;
103
for( int a = 0; a < AVERAGE_SAMPLES; a++ )
70
for( int a = 0; a < SIGNAL_SAMPLES; a++ )
104
71
ave += intervals[ a ];
105
ave /= AVERAGE_SAMPLES;
110
int pos = ( GRAPH_SIZE ) *
111
( ave - GRAPH_MIN ) / ( GRAPH_MAX - GRAPH_MIN );
112
graph[ pos + 1 ] = '|';
113
Serial.println( graph );
114
graph[ pos + 1 ] = '-';
72
ave /= SIGNAL_SAMPLES;
118
74
// tell it like it is
119
Serial.println( ave );
75
Serial.println( round( ave ) );