The wait is over!
This took ten minutes on my tablet.
Too bad to others if you don’t like my style in this example...!
This is pseudo code, (should compile), but is incomplete.
It doesn’t account for any bounce in the pulses, if there is any.
#define ENABLE_PIN 3
#define PULSE_PIN. 4
bool count_enabled;
bool prev_pulse = false; // assumes positive logic
bool prev_enabled = false;
byte pulse_count = 0;
void setup() {
pinmode(ENABLE_PIN, INPUT); // assumes thesepins are driven
pinmode(PULSE_PUN, INPUT); // (not open-collector)
count_enabled = !digitalread(ENABLE_PIN); // capture idle state of pin
}
void loop() {
count_enabled = (digitalread(ENABLE_PIN) == true); //
if (count_enabled != prev_enabled) {
if (count_enabled) {
pulse_state =digitalread(PULSE_PIN);
if (pulse_state != prev_pulse) {
if (pulse_state) { // only count positive edges
pulse_count++;
}
prev_pulse = pulse_state;
}
} else {. // enable pin has dropped...
// process the pulse_count
// I’ll leave that to you...
pulse_count = 0; // reset the pulse count value
}
}
}