Создание пользовательского блока для диммера.

На этом форуме Вы можете задать вопросы знатокам программы и автору.
Ответить
Аватара пользователя
sveloga
Рядовой
Сообщения: 39
Зарегистрирован: 12.07.2016{, 09:36}
Репутация: 0
Контактная информация:

Создание пользовательского блока для диммера.

#1

Сообщение sveloga » 16.08.2016{, 13:05}

В "железном" форуме уже писал об этом диммере, но помочь мне не смогли. решил пойти другим путем и сделать пользовательский блок для этого диммера. но возникла проблемка:

пока кроме моего блока в программе ничего нет, то все работает. Если добавить что угодно, например блок для DHT22, то работать перестает.

Это код (рабочий), из которого я сделал пользовательский блок:


СпойлерПоказать


Код: Выделить всё

#include <TimerOne.h> 
volatile uint8_t tic ; 
uint8_t data; 
int Dimmer; //количество диммеров минус 1 

void setup() { 

  //*********************Настраиваем порты на выход********************** 
    pinMode (3, OUTPUT); 
    digitalWrite(3, LOW); // гасим оответствующий пин 
    Dimmer = 10; //выставим яркость соответствующего диммера в 0 
  //CHANGE – прерывание вызывается при любом изменении значения на входе; 
  //RISING – вызов прерывания при изменении уровня напряжения с низкого (Low) на высокий(HIGH) 
  //FALLING – вызов прерывания при изменении уровня напряжения с высокого (HIGH) на низкий (Low) 
  attachInterrupt(0, detect_up, LOW);  // настроить срабатывание прерывания interrupt0 на pin 2 на низкий уровень 
  Timer1.initialize(40);              // Интервал срабатывания таймера в мкс 
  Timer1.attachInterrupt(halfcycle);   //будет вызыватся каждый раз при отсчете заданого времени 
  Timer1.stop(); 
  Serial.begin(115200); //инициализация порта 
  randomSeed(analogRead(0)); //псевдогенератор случайных чисел будет использовать шумы на аналог пин 0 
} 

//********************обработчики прерываний******************************* 
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() { 
  { 

//********помигаем первым диммером рандомно******** 
    Dimmer = random(10, 200); 
    //Задержка для более плавного эффекта мерцания 
    delay(100); 

  } 
}
 
Сам блок во вложении
Вложения
Dimmer-CODE-.ubi
(17.43 КБ) 61 скачивание

Аватара пользователя
slavas
Лейтенант
Сообщения: 595
Зарегистрирован: 14.09.2015{, 22:29}
Репутация: 1
Откуда: Санкт-Петербург

Создание пользовательского блока для диммера.

#2

Сообщение slavas » 22.08.2016{, 13:44}

Поставьте галку в блоке "использовать только один раз"

Ответить

Вернуться в «Спросить у знатоков»