Oh -- In your #22 code you had pin 8 connected to pin 7, but since pulseIn() blocks, pin 8 isn't getting toggled while pulseIn was waiting for a cycle.
I'd suggest a non-blocking reader (like FreqMeasure or FreqCount) and a non-blocking toggler like:
void pinUsToggler(uint32_t interval) {
const byte pin = 8;
static uint32_t last = 0;
static byte pinState = LOW;
if (micros() - last >= interval) {
pinState = pinState != LOW ? LOW : HIGH;
digitalWrite(pin, pinState);
last += interval;
}
}
...
void loop(void){
...
pinUsToggler(25000);
...
}
Here's some code I was trying in Wokwi:
// WokwiMegaScope setup: https://wokwi.com/projects/390819455604080641
// for https://forum.arduino.cc/t/looking-for-guidance-in-frequency-measurement/1232046
#include <FreqCount.h> // https://www.pjrc.com/teensy/td_libs_Count.html
#include <FreqMeasure.h> // https://www.pjrc.com/teensy/td_libs_FreqMeasure.html
// wiring
const byte MeasurePin = 49; // ICP4 on a Mega // doesn't work on Wokwi
const byte CountPin = 47; // T5 on a Mega
const byte TonePin = 13; //
// measure vars
unsigned long count = 0;
unsigned long sum = 0;
// the setup function runs once when you press reset or power the board
void setup() {
Serial.begin(115200);
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
FreqMeasure.begin(); //
FreqCount.begin(1000); // 1000ms
Serial.print("FreqMeasure on pin ");
Serial.print(MeasurePin);
Serial.print("FreqCount on pin ");
Serial.print(CountPin);
// tone(TonePin,1000);
pinMode(TonePin, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
if (FreqMeasure.available()) {
// Won't work on Wokwi because ICP not implemented
// average several reading together
sum = sum + FreqMeasure.read();
count = count + 1;
if (count > 30) {
float frequency = FreqMeasure.countToFrequency(sum / count);
Serial.println(frequency);
sum = 0;
count = 0;
}
}
if (FreqCount.available()) {
unsigned long count = FreqCount.read();
Serial.print(" Count:");
Serial.println(count);
}
pinUsToggler(25000);
}
void pinUsToggler(uint32_t interval) {
const byte pin = TonePin;
static uint32_t last = 0;
static byte pinState = LOW;
if (micros() - last >= interval) {
pinState = pinState != LOW ? LOW : HIGH;
digitalWrite(pin, pinState);
last += interval;
}
}
using MegaScope - Wokwi ESP32, STM32, Arduino Simulator plus some extra connections:
