Как посчитать частоту между пинами ESP32-S3?

Схема подключения к модулю ESP32-S3.


Сам модуль:

Его распиновка:


Проблема в том, что для подсчёта частоты используется разница потенциалов между щупом и GND.
Вот примеру примеры из интернета:

unsigned long time = 0;        //Время срабатывания датчика
unsigned long time_old = 0;        //Предыдущее время
 
void setup() {
	  attachInterrupt(0, impuls, FALLING);   //Прерывание по нарастающему фронту на D2
          Serial.begin(115200);
	}
	 
	void loop(){
        Serial.println(time);
        delay(10);
        }
	 
	void impuls(){
	 time = (1000000.0/(micros()-time_old)); // измеряем частоту
         time_old = micros();
	}

или

int Htime;       // целочисленная переменная для хранения времени высокого логического уровня
int Ltime;       // целочисленная переменная для хранения времени низкого логического уровня
float Ttime;     // переменная для хранения общей длительности периода
float frequency; // переменная для хранения частоты
void setup()
{
  pinMode(8,INPUT);
}

void loop()
{

  Htime=pulseIn(8,HIGH);    // прочитать время высокого логического уровня
  Ltime=pulseIn(8,LOW);     // прочитать время низкого логического уровня
    
  Ttime = Htime+Ltime;

  frequency=1000000/Ttime;  // получение частоты из Ttime в микросекундах
  Serial.print(frequency);
  Serial.println(" Hz");
  delay(500);
}

Но у меня в схеме роль GND берёт на себя пин или 1 или 10, в зависимости от полярности питания.
Пример:

void LEFT(TFT_eSprite *MAIN)
{
  pinMode(45, INPUT);         // 45 пин высокий импеданс
  pinMode(46, OUTPUT);        // выводим на 46 пин 0
  digitalWrite(46,0);         // устанавливая его в 0(включаем нижний резистор делителя)
  Serial.println(GET_VOLT(10) * 20.27);
}
void RIGHT(TFT_eSprite *MAIN)
{
  pinMode(46, INPUT);         // 46 пин высокий импеданс
  pinMode(45, OUTPUT);        // выводим на 45 пин 0
  digitalWrite(45,0);         // устанавливая его в 0(включаем нижний резистор делителя)
   Serial.println(GET_VOLT(1) * 19.8);
}

Как мне посчитать частоту на щупах?

При установке ноги на выход и подаче нуля можешь смело рисовать в твоей схеме в этой точке землю и смотреть что получилось.

1 лайк

Спасибо за совет, сделал так:
минус установил на 46 и 45 выходы, код следующий:

void impuls(){
	 time = (1000000.0/(micros()-time_old)); // измеряем частоту
         time_old = micros();
}

pinMode(46, INPUT);         // 46 пин высокий импеданс
pinMode(45, OUTPUT);        // выводим на 45 пин 0
digitalWrite(45,0);         // устанавливая его в 0(включаем нижний резистор делителя)
attachInterrupt(11, impuls, FALLING);
pinMode(45, INPUT);         // 45 пин высокий импеданс
pinMode(46, OUTPUT);        // выводим на 46 пин 0
digitalWrite(46,0);         // устанавливая его в 0(включаем нижний резистор делителя)
attachInterrupt(12, impuls, FALLING);