#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
setupADC();
pinMode(3, OUTPUT); // выход сигнала для управления мосфетом → пин D3
}
void loop() {
uint16_t pulse_time = fastAnalogRead(0); // Чтение потенциометра на A0 (длительность импульса)
uint16_t pulse_delay = fastAnalogRead(1); // Чтение потенциометра на A1 (пауза между импульсами)
pulse_time = map(pulse_time, 0, 1024, 3, 21);
pulse_time = constrain(pulse_time, 3, 21);
pulse_delay = map(pulse_delay, 0, 1024, 2, 200);
pulse_delay = constrain(pulse_delay, 2, 200);
pulse_delay = pulse_delay * 10;
PORTD |= (1 << PD3); // выход сигнала для управления мосфетами пин D3
delayMicroseconds(pulse_time);
PORTD &= ~(1 << PD3);
delayMicroseconds(pulse_delay);
}
/************************** БЫСТРЫЙ AnalogRead для опроса потенциометров ***********************/
void setupADC() {
ADMUX = (1 << REFS0); // Референс AVcc, канал ADC0
ADCSRA = (1 << ADEN) | // Включить АЦП
(1 << ADPS2) | (1 << ADPS1); // Предделитель 64 (16MHz/64 = 250kHz)
}
uint16_t fastAnalogRead(uint8_t channel) {
ADMUX = (ADMUX & 0xF0) | (channel & 0x0F); // Выбор канала
ADCSRA |= (1 << ADSC); // Запуск преобразования
while (ADCSRA & (1 << ADSC)); // Ждём завершения
return ADC; // Возвращаем результат
}
/***********************************************************************************************/