7 #include <pigpiod_if2.h>
10 #define CMP_IN 22 // The signal from the comparator
13 void gpio_callback(int pi, unsigned user_gpio, unsigned level, uint32_t tick, void * userdata);
18 int pi; // Connection to pigpio daemon
19 unsigned comparator; // The signal from the comparator
23 uint32_t measure_start;
25 uint32_t samples[NR_SAMPLES];
30 void input_event(unsigned gpio, unsigned level, uint32_t tick)
32 //printf("Input event: input %u = %u, %d\n", gpio, level, tick - last_tick);
35 if (gpio == comparator && level == 1)
39 if (gpio == comparator && level == 0)
41 samples[sample_index] = tick - measure_start;
42 //printf(" Measured time = %d\n", tick - measure_start);
44 if (sample_index == NR_SAMPLES)
46 uint32_t min = samples[0];
47 uint32_t max = samples[0];
50 for (int i = 0; i < NR_SAMPLES; i++)
53 if (samples[i] > max) max = samples[i];
54 if (samples[i] < min) min = samples[i];
56 printf("Min = %d, Max = %d, Middle = %d, Avg = %d\n", min, max, (min + max) / 2, (sum / NR_SAMPLES) >> 5 << 5);
65 DVM(int pi_connection, unsigned cmp)
76 set_mode(pi, comparator, PI_INPUT);
77 set_pull_up_down(pi, comparator, PI_PUD_OFF);
78 set_glitch_filter(pi, comparator, 200);
80 open_return = callback_ex(pi, comparator, EITHER_EDGE, gpio_callback, this);
81 fprintf(stderr, "Set callback returns %d.\n", open_return);
86 void gpio_callback(int pi, unsigned user_gpio, unsigned level, uint32_t tick, void * userdata)
90 sensor = (DVM *)userdata;
91 sensor->input_event(user_gpio, level, tick);
98 std::ofstream sensorfile;
100 pi = pigpio_start(NULL, NULL);
103 // pigpio initialisation failed.
104 fprintf(stderr, "GPIO initialization failed.\n");
109 // pigpio initialised okay.
110 DVM sensor(pi, CMP_IN);
115 //printf("%.3f\r", sensor.Voltage());