Хотя мне непонятно зачем тут ардуина нужна вообще
То есть, вы совершенно уверены, что источник сигнала размахом в 5в обязательно обладает нагрузочной способностью БП? Уже и резистор посчитали, и ардуино выбросили.
А если выходное сопротивление источника в несколько десятков килло-ом, тогда что?
По теме: 1 кГц можно и по прерыванию посчитать, если чё.
1) подключаем прерывание, к примеру по RISING
2) в обработчике прерывания инкрементируем переменную на единицу.
3) в loop каждые скажем 100 мс проверяем сколько насчитали, если переменная увеличилась на 100 за 100мс, значит имеет на входе 1кГц.
Запрещаем прерывания, включаем светодиод, если не насчитали 100, а что-то другое - выключаем светодиод, обнуляем переменную, снова возводим таймер, разрешаем прерывание, и все по новой
Что-то типа такого. (в реальности не проверял, нет такого генератора, но компилируется успешно )
const byte ledPin = 13;
const byte interruptPin = 2;
volatile bool state = false;
volatile byte count = 0;
unsigned long timer = 0;
void counter() {
count += 1;
if (!state) {
state = true;
timer = millis();
}
}
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(interruptPin, INPUT);
attachInterrupt(digitalPinToInterrupt(interruptPin), counter, RISING);
}
void loop() {
if (state and (millis() - timer == 100)) {
detachInterrupt(digitalPinToInterrupt(interruptPin));
if (count >= 99 and count <= 101) { // один отсчет за одну миллисекунду, учитываем возможную девиацию частоты от 990 до 1010 кГц, можно подставить свое
digitalWrite(ledPin, HIGH);
} else digitalWrite(ledPin, LOW);
count = 0;
state = false;
attachInterrupt(digitalPinToInterrupt(interruptPin), counter, RISING);
}
}