#33
Сообщение
ARTEMM » 17.07.2023{, 08:02}
вот исходный скетч
Отправлено спустя 6 минут 56 секунд:
#include <Arduino.h>
#include "esp32-hal-timer.h"
const int outputPin = 27; // Пин для вывода сигнала
hw_timer_t *timer = NULL;
volatile int pulseWidth = 1000; // Длительность импульса в микросекундах
volatile int pauseWidth = 1000; // Длительность паузы в микросекундах
volatile bool pulseState = false;
void IRAM_ATTR timerISR();
void setup() {
pinMode(outputPin, OUTPUT);
timer = timerBegin(0, 80, true); // Используем таймер 0 с делителем на 80
timerAttachInterrupt(timer, &timerISR, true); // Привязываем прерывание к функции timerISR
timerAlarmWrite(timer, pulseWidth, true); // Устанавливаем период таймера равный длительности импульса
timerAlarmEnable(timer); // Включаем таймер
}
void loop() {
// Чтение значений с регуляторов или других источников для установки новых значений pulseWidth и pauseWidth
}
void IRAM_ATTR timerISR() {
pulseState = !pulseState; // Инвертируем состояние импульса
if (pulseState) {
digitalWrite(outputPin, HIGH); // Включаем вывод на пин
timerAlarmWrite(timer, pulseWidth, true); // Устанавливаем период таймера равный длительности импульса
} else {
digitalWrite(outputPin, LOW); // Выключаем вывод на пин
timerAlarmWrite(timer, pauseWidth, true); // Устанавливаем период таймера равный длительности паузы
}
}