Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.02.2013, 01:04   #21
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

Тогда не понятно если INT0 => pin21, то как у Вас работал код из первой темы?

P.S.
Я нашел ошибку, у меня при отладке было несколько вариантов скетчей и я случайно сохранил не тот который нужно было сохранить
Ошибку исправил(в шапке темы), но пока не проверил.
Проверьте пожалуйста и отпишитесь о результате по возможности
Admin вне форума   Ответить с цитированием
Старый 08.02.2013, 01:39   #22
alex74
Junior Member
 
Регистрация: 01.02.2013
Адрес: Киев
Сообщений: 13
Вес репутации: 0
alex74 is an unknown quantity at this point
По умолчанию

Работает! Огромное Вам СПАСИБО! Есть ещё пара вопросов по Serial касающиеся этой темы ,но с начало сам попробую разобраться. Можно ли будет обратиться к Вам за консультацией ?
alex74 вне форума   Ответить с цитированием
Старый 08.02.2013, 09:40   #23
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

Обращайтесь
Admin вне форума   Ответить с цитированием
Старый 20.02.2013, 23:24   #24
alex74
Junior Member
 
Регистрация: 01.02.2013
Адрес: Киев
Сообщений: 13
Вес репутации: 0
alex74 is an unknown quantity at this point
По умолчанию

Добрый день. В продолжении темы выкладываю скетч управление диммера через Serial . В мониторе порта набираем 001 (номер канала) пробел 100(значение диммера от 0 до 200).


PHP код:
#include <cyberpins.h> //быстрое управление пинами
#include <TimerOne.h> //использует Timer1
volatile uint8_t ticDimmer1Dimmer2Dimmer3;
char unitID_in[10];
char command_in[10];
char data_in[100];
 

void setup() 
{
  
Serial.begin(9600); 
  
D4_Out//Настраиваем порт на выход Dimmer1
  
D5_Out//Настраиваем порт на выход Dimmer2
  
D6_Out//Настраиваем порт на выход Dimmer3
  
D4_LOWD5_LOWD6_LOW//установить на выходах низкий уровень сигнала
  
D2_In//настраиваем порт на вход для отслеживания прохождения сигнала через ноль  
   
  
attachInterrupt(0detect_upFALLING);  // настроить срабатывание прерывания int0 на pin 2 

  
Timer1.initialize(40);              // Интервал срабатывания таймера в мкс 
  
Timer1.attachInterrupt(halfcycle);   //будет вызыватся каждый раз при отсчете заданого времени
  
Timer1.stop();
}
//********************обработчики прерываний*******************************
void halfcycle()  //прерывания таймера

  
tic++;  //счетчик  
  
if(Dimmer1 tic D4_HIGH//управляем выходом
  
if(Dimmer2 tic D5_HIGH;  //управляем выходом
  
if(Dimmer3 tic D6_HIGH;  //управляем выходом 
}

void  detect_up()  // обработка внешнего прерывания. Сработает по переднему фронту синусоиды
{  
 
tic=0;             //обнулить счетчик
 
Timer1.resume();   //запустить таймер
 
attachInterrupt(0detect_downRISING);  //перепрограммировать прерывание на другой обработчик
}  

void  detect_down()  // обработка внешнего прерывания. Сработает по заднему фронту синусоиды
{   
 
Timer1.stop(); //остановить таймер
 
D4_LOWD5_LOWD6_LOW//логический ноль на выходы
 
tic=0;       //обнулить счетчик
 
attachInterrupt(0detect_upFALLING); //перепрограммировать прерывание на другой обработчик

//*************************************************************************
void loop() 
{
  
  
int i=0;
  
char buffer[100];
 
//если есть данные - читаем
  
if(Serial.available()){
     
delay(100);
      
     
//загоняем прочитанное в буфер
     
while( Serial.available() && i99) {
        
buffer[i++] = Serial.read();
     }
     
//закрываем массив
     
buffer[i++]='\0';
  }
 
//если буфер наполнен
  
if(i>0){  
     
    
//разбираем его на части отделенные запятой
   // sscanf(buffer, "%[^'h']h%[^'h']%s", &unitID_in, &command_in, &data_in);
    
sscanf(buffer"%s%s%d",&unitID_in,&command_in, &data_in);

     
  }
   
//Исполнительная часть
//Проверяем какому устройству пришли данные    
// Выполнение команды устройством 001
     
if ((String)unitID_in == "001"){
      if ((String)
command_in == "0"){Dimmer1=0;}
      if ((String)
command_in == "1"){Dimmer1=1;}
      if ((String)
command_in == "2"){Dimmer1=2;}
      if ((String)
command_in == "3"){Dimmer1=3;}
      if ((String)
command_in == "4"){Dimmer1=4;}
      if ((String)
command_in == "5"){Dimmer1=5;}
      if ((String)
command_in == "6"){Dimmer1=6;}
      if ((String)
command_in == "7"){Dimmer1=7;}
      if ((String)
command_in == "8"){Dimmer1=8;}
      if ((String)
command_in == "9"){Dimmer1=9;}   
      if ((String)
command_in == "10"){Dimmer1=10;}
      if ((String)
command_in == "11"){Dimmer1=11;}
      if ((String)
command_in == "12"){Dimmer1=12;}
      if ((String)
command_in == "13"){Dimmer1=13;}
      if ((String)
command_in == "14"){Dimmer1=14;}
      if ((String)
command_in == "15"){Dimmer1=15;}
      if ((String)
command_in == "16"){Dimmer1=16;}
      if ((String)
command_in == "17"){Dimmer1=17;}
      if ((String)
command_in == "18"){Dimmer1=18;} 
      if ((String)
command_in == "19"){Dimmer1=19;}
      if ((String)
command_in == "20"){Dimmer1=20;}
      if ((String)
command_in == "21"){Dimmer1=21;}
      if ((String)
command_in == "22"){Dimmer1=22;}
      if ((String)
command_in == "23"){Dimmer1=23;}
      if ((String)
command_in == "24"){Dimmer1=24;}
      if ((String)
command_in == "25"){Dimmer1=25;}
      if ((String)
command_in == "26"){Dimmer1=26;}
      if ((String)
command_in == "27"){Dimmer1=27;} 
      if ((String)
command_in == "28"){Dimmer1=28;}
      if ((String)
command_in == "29"){Dimmer1=29;}
      if ((String)
command_in == "30"){Dimmer1=30;}
      if ((String)
command_in == "31"){Dimmer1=31;}
      if ((String)
command_in == "32"){Dimmer1=32;}
      if ((String)
command_in == "33"){Dimmer1=33;}
      if ((String)
command_in == "34"){Dimmer1=34;}
      if ((String)
command_in == "35"){Dimmer1=35;}
      if ((String)
command_in == "36"){Dimmer1=36;} 
      if ((String)
command_in == "37"){Dimmer1=37;}
      if ((String)
command_in == "38"){Dimmer1=38;}
      if ((String)
command_in == "39"){Dimmer1=39;}
      if ((String)
command_in == "40"){Dimmer1=40;}
      if ((String)
command_in == "41"){Dimmer1=41;}
      if ((String)
command_in == "42"){Dimmer1=42;}
      if ((String)
command_in == "43"){Dimmer1=43;}
      if ((String)
command_in == "44"){Dimmer1=44;}
      if ((String)
command_in == "45"){Dimmer1=45;}
      if ((String)
command_in == "46"){Dimmer1=46;}
      if ((String)
command_in == "47"){Dimmer1=47;}
      if ((String)
command_in == "48"){Dimmer1=48;}
      if ((String)
command_in == "49"){Dimmer1=49;}
      if ((String)
command_in == "50"){Dimmer1=50;}
      if ((String)
command_in == "51"){Dimmer1=51;}
      if ((String)
command_in == "52"){Dimmer1=52;}
      if ((String)
command_in == "53"){Dimmer1=53;}
      if ((String)
command_in == "54"){Dimmer1=54;}
      if ((String)
command_in == "55"){Dimmer1=55;} 
      if ((String)
command_in == "56"){Dimmer1=56;}
      if ((String)
command_in == "57"){Dimmer1=57;}
      if ((String)
command_in == "58"){Dimmer1=58;}
      if ((String)
command_in == "59"){Dimmer1=59;}
      if ((String)
command_in == "60"){Dimmer1=60;}
      if ((String)
command_in == "61"){Dimmer1=61;}
      if ((String)
command_in == "62"){Dimmer1=62;}
      if ((String)
command_in == "63"){Dimmer1=63;}
      if ((String)
command_in == "64"){Dimmer1=64;}
      if ((String)
command_in == "65"){Dimmer1=65;} 
      if ((String)
command_in == "66"){Dimmer1=66;}
      if ((String)
command_in == "67"){Dimmer1=67;}
      if ((String)
command_in == "68"){Dimmer1=68;}
      if ((String)
command_in == "69"){Dimmer1=69;}
      if ((String)
command_in == "70"){Dimmer1=70;}
      if ((String)
command_in == "71"){Dimmer1=71;}
      if ((String)
command_in == "72"){Dimmer1=72;}
      if ((String)
command_in == "73"){Dimmer1=73;}
      if ((String)
command_in == "74"){Dimmer1=74;}
      if ((String)
command_in == "75"){Dimmer1=75;} 
      if ((String)
command_in == "76"){Dimmer1=76;}
      if ((String)
command_in == "77"){Dimmer1=77;}
      if ((String)
command_in == "78"){Dimmer1=78;}
      if ((String)
command_in == "79"){Dimmer1=79;}
      if ((String)
command_in == "80"){Dimmer1=80;}
      if ((String)
command_in == "81"){Dimmer1=81;}
      if ((String)
command_in == "82"){Dimmer1=82;}
      if ((String)
command_in == "83"){Dimmer1=83;}
      if ((String)
command_in == "84"){Dimmer1=84;}
      if ((String)
command_in == "85"){Dimmer1=85;} 
      if ((String)
command_in == "86"){Dimmer1=86;}
      if ((String)
command_in == "87"){Dimmer1=87;}
      if ((String)
command_in == "88"){Dimmer1=88;}
      if ((String)
command_in == "89"){Dimmer1=89;}
      if ((String)
command_in == "90"){Dimmer1=90;}
      if ((String)
command_in == "91"){Dimmer1=91;}
      if ((String)
command_in == "92"){Dimmer1=92;}
      if ((String)
command_in == "93"){Dimmer1=93;}
      if ((String)
command_in == "94"){Dimmer1=94;}
      if ((String)
command_in == "95"){Dimmer1=95;} 
      if ((String)
command_in == "96"){Dimmer1=96;}
      if ((String)
command_in == "97"){Dimmer1=97;}
      if ((String)
command_in == "98"){Dimmer1=98;}
      if ((String)
command_in == "99"){Dimmer1=99;}
      if ((String)
command_in == "100"){Dimmer1=100;}
      }
    
   
Dimmer2=50//200=мин. 0=макс 255=выкл
   
Dimmer3=90//200=мин. 0=макс 255=выкл

alex74 вне форума   Ответить с цитированием
Старый 21.02.2013, 09:01   #25
Bulatovor
Senior Member
 
Регистрация: 20.01.2013
Адрес: Уфа
Сообщений: 444
Вес репутации: 799
Bulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond repute
По умолчанию

Я честно говоря еще с программированием порта не разбирался, но почему-то мне кажется что конструкций ЕСЛИ при присваивании значений можно и нужно избежать передавая в порт данные не в текстовом формате, а в цифровом и считав их просто присвоить, но это так, честно говоря я еще не знаю какого вида данные можно через порт передавать.
Bulatovor вне форума   Ответить с цитированием
Старый 21.02.2013, 14:15   #26
dmitry123
Member
 
Регистрация: 03.12.2012
Адрес: Ярославль
Сообщений: 53
Вес репутации: 0
dmitry123 has a brilliant futuredmitry123 has a brilliant futuredmitry123 has a brilliant futuredmitry123 has a brilliant futuredmitry123 has a brilliant futuredmitry123 has a brilliant futuredmitry123 has a brilliant futuredmitry123 has a brilliant futuredmitry123 has a brilliant futuredmitry123 has a brilliant futuredmitry123 has a brilliant future
По умолчанию

А нахрена столько условий ?
Не легче:
if ((String)unitID_in == "001") {
if ((String)command_in == "") command_in=255; // Проверка на то, если нет значения димера
Dimmer1=command_in;
}
dmitry123 вне форума   Ответить с цитированием
Старый 21.02.2013, 14:16   #27
dmitry123
Member
 
Регистрация: 03.12.2012
Адрес: Ярославль
Сообщений: 53
Вес репутации: 0
dmitry123 has a brilliant futuredmitry123 has a brilliant futuredmitry123 has a brilliant futuredmitry123 has a brilliant futuredmitry123 has a brilliant futuredmitry123 has a brilliant futuredmitry123 has a brilliant futuredmitry123 has a brilliant futuredmitry123 has a brilliant futuredmitry123 has a brilliant futuredmitry123 has a brilliant future
По умолчанию

Если проблема в переводе int и string, то это не повод чтобы столько условий делать ...
dmitry123 вне форума   Ответить с цитированием
Старый 21.02.2013, 14:43   #28
Bulatovor
Senior Member
 
Регистрация: 20.01.2013
Адрес: Уфа
Сообщений: 444
Вес репутации: 799
Bulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond repute
По умолчанию

У меня вопрос к автору - схемы - а в чем смысл RC цепочки между фазой и выходом ( резистор в 36 Ом и кондер 0.1uF), я так понимаю сглаживает мигание лампы или подавляет помехи? Просто в других схемах диммеров её нигде не видел, для подавления помех используется в лучшем случае катушка.
Bulatovor вне форума   Ответить с цитированием
Старый 21.02.2013, 18:26   #29
vadymkyr
Junior Member
 
Регистрация: 21.02.2013
Адрес: Севастополь
Возраст: 33
Сообщений: 7
Вес репутации: 0
vadymkyr is an unknown quantity at this point
По умолчанию

а как использовать плавное включение и выключение, если нельзя использовать delay()?
vadymkyr вне форума   Ответить с цитированием
Старый 21.02.2013, 19:08   #30
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

Цитата:
У меня вопрос к автору - схемы - а в чем смысл RC цепочки между фазой и выходом ( резистор в 36 Ом и кондер 0.1uF), я так понимаю сглаживает мигание лампы или подавляет помехи
Это снаббер, нужен он для того чтобы симистор смог быстро и легко закрываться особенно при индуктивной нагрузке, а также исключает повторные или ложные открывания тиристора.
Admin вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 51 (пользователей: 0 , гостей: 51)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 02:00. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика