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

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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.03.2014, 15:29   #1
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824
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
По умолчанию Re: Многоканальный Dimmer, работающий в фоновом режиме

1 - у Вас срабатывание прерывания будет только по положительному полупериоду
2 - не понятно что вы пытаетесь здесь получить?
PHP код:
     if (== ' ')
      {
          
Serial.println(Bi);
          
dimming Bi.toInt();  
          
Bi "";
      }
       else 
       {
         
Bi += c;    
       } 
Admin вне форума   Ответить с цитированием
Старый 30.03.2014, 15:37   #2
ChemDevil
Junior Member
 
Регистрация: 30.03.2014
Сообщений: 12
Вес репутации: 0
ChemDevil is an unknown quantity at this point
По умолчанию Re: Многоканальный Dimmer, работающий в фоновом режиме

1. Я понимаю, что срабатывание будет только по положительному пп, это я потом исправлю, в этом нет сложности;
2. Читаю с сериал число посимвольно, т.к. заранее неизвестно количество символов, которое пойдет на ком порт. Если символ пробел, то вывожу в сериал всю строку символов (чтобы следить, как идет запись), говорю, что этот набор символов есть длина прерывания в полупериоде (перевожу из стринг в интеджер), обнуляю строку. Если не пробел, то продолжаю ловить символы в эту переменную. Своего рода программный буфер.

С типами переменных все хорошо
ChemDevil вне форума   Ответить с цитированием
Старый 30.03.2014, 16:14   #3
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824
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
По умолчанию Re: Многоканальный Dimmer, работающий в фоновом режиме

Похоже я отстал, не знал что в Arduino есть тим string
Ошибок не вижу, если только время полупериода нужно уменьшить
Так как прерывание не будет срабатывать точно в нулевой точке
Но это актуально только при минимальном свечении

По поводу срабатывания только по положительным полупериодам, я был не прав, так как на схеме есть диодный мост
Admin вне форума   Ответить с цитированием
Старый 30.03.2014, 16:30   #4
ChemDevil
Junior Member
 
Регистрация: 30.03.2014
Сообщений: 12
Вес репутации: 0
ChemDevil is an unknown quantity at this point
По умолчанию Re: Многоканальный Dimmer, работающий в фоновом режиме

Сейчас добавлю в код цикла пояснения, думаю, что будет понятно:

Код:
while (Serial.available() > 0)
  {
   char c = Serial.read();//Читаем символ, загоняем его в переменную "с"
     if (c == ' ')// Если "с" пробел (символ, который я использую для окончания приёма данных), т.е. передача закончена, то  
      {
          Serial.println(Bi); //выводим строку "Bi", состоящую из символов "с", т.е. строку символов "с1""с2""с3"...
          dimming = Bi.toInt();//Получим заданный уровень яркости переведя строку "Bi" в интеджер; 
          Bi = ""; //Саму строку обнуляем до следующего ввода
      }
       else 
       {
         Bi += c; //Если не пробел, то добавляем в строку "Bi" ещё один символ. Это х=х+у, но со строковым типом это будет просто добавление ещё одного символа в конец строки. 
       }      
  }
}
Могу сказать, что эта отправка-прием исправно работает вне этой программы и начальные пару раз в ней. Ошибка, как мне подсказали, из-за задержек delay в функции прерывания... пробую избавиться от нее, но не выходит
ChemDevil вне форума   Ответить с цитированием
Старый 30.03.2014, 16:37   #5
ChemDevil
Junior Member
 
Регистрация: 30.03.2014
Сообщений: 12
Вес репутации: 0
ChemDevil is an unknown quantity at this point
По умолчанию Re: Многоканальный Dimmer, работающий в фоновом режиме

Переправил чуть код. Постарался избавиться от delay... но совсем не работает: лампочка горит постоянно. Подскажите, пожалуйста, в чем ошибка?

Код:
String Bi = "";
const int AC_LOAD = 3;   
long dimming = 255;
unsigned long previousMicros = 0; 

void setup() {
Serial.begin(9600);
pinMode(AC_LOAD, OUTPUT);// Устанавливаем AC Load пин как вывод
attachInterrupt(2, ZC, RISING); 
}

void ZC()
  { 
    unsigned long currentMicros = micros();
    previousMicros = currentMicros;
    int dimtime = (39*(255-dimming));    // Полное время
    while(currentMicros - previousMicros < dimtime) {}
    previousMicros = currentMicros;
    digitalWrite(AC_LOAD, HIGH);// Триак посылает сигнал зажечься
    while(currentMicros - previousMicros < 10)// Триак ждет, для 50 Гц - 10мкс  
    {}// Триак посылает сигнал потухнуть
    digitalWrite(AC_LOAD, LOW);
  }

void loop() {
 while (Serial.available() > 0)
  {
   char c = Serial.read();
   
      if (c == ' ')
      {
          Serial.println(Bi);
          dimming = Bi.toInt();  
          Bi = "";
      }
       else 
       {
         Bi += c;    
       }    
  }
}
ChemDevil вне форума   Ответить с цитированием
Старый 30.03.2014, 16:41   #6
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824
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
По умолчанию Re: Многоканальный Dimmer, работающий в фоновом режиме

Попробуйте поменять CHANG на HIGH
Admin вне форума   Ответить с цитированием
Старый 30.03.2014, 16:48   #7
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824
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
По умолчанию Re: Многоканальный Dimmer, работающий в фоновом режиме

PHP код:
String Bi "";
int AC_LOAD 3;   
int dimming 255;

void setup() {
Serial.begin(9600);
pinMode(AC_LOADOUTPUT);// Устанавливаем AC Load пин как вывод
attachInterrupt(2ZCHIGH); 
}

void ZC()
{
  
int dimtime = (38*(255-dimming));  
  
delayMicroseconds(dimtime); 
  
digitalWrite(AC_LOADHIGH);
  
delayMicroseconds(20); 
  
digitalWrite(AC_LOADLOW);
}

void loop() {
 while (
Serial.available() > 0)
  {
   
char c Serial.read();
     if (
== ' ')
      {
          
Serial.println(Bi);
          
dimming Bi.toInt();  
          
Bi "";
      }
       else 
       {
         
Bi += c;    
       }      
  }

Admin вне форума   Ответить с цитированием
Старый 30.03.2014, 16:54   #8
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824
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
По умолчанию Re: Многоканальный Dimmer, работающий в фоновом режиме

Может стоит подумать над предложением Bulatovor ?
Admin вне форума   Ответить с цитированием
Старый 30.03.2014, 17:19   #9
ChemDevil
Junior Member
 
Регистрация: 30.03.2014
Сообщений: 12
Вес репутации: 0
ChemDevil is an unknown quantity at this point
По умолчанию Re: Многоканальный Dimmer, работающий в фоновом режиме

Цитата:
Сообщение от Admin Посмотреть сообщение
Может стоит подумать над предложением Bulatovor ?
Про изменение библиотеки? я новичок не умею. Кроме того было бы ещё интересно узнать, почему моя программа не работает...
ChemDevil вне форума   Ответить с цитированием
Старый 30.03.2014, 17:25   #10
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824
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
По умолчанию Re: Многоканальный Dimmer, работающий в фоновом режиме

Можно без библиотеки обойтись, стандартными функциями
Пробовали код выше?
Admin вне форума   Ответить с цитированием
Ответ


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

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

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

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


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


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