![]() |
|
|
#11 |
|
Junior Member
Регистрация: 25.07.2016
Сообщений: 2
Вес репутации: 0 ![]() |
Имеется Nano (328) и диммер.
Код взял с этой темы. Работает, но с задержкой около одной секунды. На контроллере светодиод RX моргает моментально, сразу после отправки данных в порт, а уже спустя секунду изменятся яркость лампочки. Как минимизировать эту паузу? Код:
#include <TimerOne.h>
volatile uint8_t tic ;
uint8_t data;
int Dimmer;
void setup() {
//*********************Настраиваем порты на выход**********************
pinMode (3, OUTPUT);
digitalWrite(3, LOW); // гасим оответствующий пин
Dimmer = 10; //выставим яркость соответствующего диммера в 0
attachInterrupt(0, detect_up, LOW); // настроить срабатывание прерывания interrupt0 на pin 2 на низкий уровень
Timer1.initialize(40); // Интервал срабатывания таймера в мкс
Timer1.attachInterrupt(halfcycle); //будет вызыватся каждый раз при отсчете заданого времени
Timer1.stop();
Serial.begin(115200); //инициализация порта
randomSeed(analogRead(0)); //псевдогенератор случайных чисел будет использовать шумы на аналог пин 0
Serial.begin(9600);
}
//********************обработчики прерываний*******************************
void halfcycle() //прерывания таймера
{
tic--; //счетчик
if (Dimmer > tic )
digitalWrite(3, HIGH); //управляем выходом (откроем семистор)
}
void detect_up() // обработка внешнего прерывания. Сработает по переднему фронту
{
tic = 200; //обнулить счетчик
Timer1.resume(); //запустить таймер
attachInterrupt(0, detect_down, HIGH); //перепрограммировать прерывание на другой обработчик
}
void detect_down() // обработка внешнего прерывания. Сработает по заднему фронту
{
Timer1.stop(); //остановить таймер
digitalWrite(3, LOW);
tic = 200; //обнулить счетчик
attachInterrupt(0, detect_up, LOW); //перепрограммировать прерывание на другой обработчик
}
void loop() {
if (Serial.available() > 0)
{
Dimmer = Serial.parseInt();
}
}
|
|
|
|
| Здесь присутствуют: 5 (пользователей: 0 , гостей: 5) | |
|
|