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

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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.05.2015, 13:54   #1
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
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
По умолчанию Модуль "Light Control"

Ну вот наконец то дождались!
Сегодня первый день продолжительного тестирования модуля "Light Control"
Этот модуль логическое продолжение модуля "Light Switch", только с разницей в том, что модуль "Light Control" отслеживает
изменение состояния пинов и если состояние пина было изменено физическим выключателем или с другого гаджета, то на
всех подключенных к модулю устройствах, в веб интерфейсе выключатель сам перещелкнется
Если до вечера не всплывут баги то постараюсь выложить

Всю работу связанную с веб интерфейсом и скриптами провел Дмитрий(Prana)
Я только написал скетч и демона обновляющего состояние пинов в БД
Дмитрий постарался сделать веб интерфейс с минимальной нагрузкой на процессор роутера и с высокой степенью надежности, так как роутер должен будет трудится круглыми сутками

Работает со всеми моделями ардуино, но ШИМ пока работает только в ардуинках с процессорами Atmega168/328
Но это временные ограничения по использованию ШИМ , вскоре вынесем эту функцию в библиотеку для всех остальных моделей, что бы не нагромождать скетч

Модуль пока работает только с роутерами на процессоре AR71xx

PHP код:
void setup()   
{   
  
Serial.begin(57600);    
}  
//*******************************
void loop()  
{  
    if (
Serial.available()>7)  
    {    
       
uint8_t inByte Serial.read(); 
        if(
inByte == 'D'
        {   
          
inByte Serial.read(); 
          
SortIdev(inByte); 
        }     
    } 

//****************************************
void SortIdev(uint8_t idev

  
uint8_t pinDec = (Serial.read()-48)*10;  
  
uint8_t pinUnit = (Serial.read()-48);  
  
uint8_t pin pinDec pinUnit;   
  
uint8_t separator Serial.read();    
   
 if(
separator == '='
 { 
   
uint8_t statHund = (Serial.read()-48)*100
   
uint8_t statDec = (Serial.read()-48)*10;  
   
uint8_t statUnit Serial.read()-48;   
   
uint8_t stat statHund statDec statUnit;  
 
//*****************    
  
switch (idev)  
  { 
     case 
's':  // запрос статуса   
      
SendStat(pinstatUnit+48);
     break;   
     
     case 
'S'//выключатель 
      
pinMode(pinOUTPUT);  
      
digitalWrite(pinstat); 
      
SendStat(pinidev);
      
DB_Stat();    
     break;  

    case 
'D'//Dimmer  
      
analogWrite(pinstat);  
      
SendStat(pinidev);
      
DB_Stat();
     break; 
     
    case 
'A':  //Читать АЦП
      
SendStat(pinidev);
      
DB_Stat();
     break;  
      
    case 
'I':  //конфигурировать пин на вход 
      
pinMode(pinINPUT); 
      
SendStat(pinidev);
      
DB_Stat();
     break;   
      
    case 
'B'//кнопка 
      
pinMode(pinOUTPUT);
      if(
stat<2)
       {
         
digitalWrite(pinstat);
       } else 
        if(
stat==2)
         {  
           for (
int i=010i++)
           {
           
digitalWrite(pin1);
           
delay(50);
           
digitalWrite(pin0);
           
delay(50);
           }  
         } 
        
SendStat(pinidev);
        
DB_Stat();
     break;            
   } 
 }  
}  
//*******************************
void SendStat(uint8_t pinuint8_t idev
{
    
uint8_t stat=0;
    switch (
idev)  
  { 
   case 
'S'//выключатель
     
stat digitalRead(pin);
   break;
   
   case 
'D'//Диммер
    
stat PWM_Status(pin);
   break;  
   
   case 
'A'//Аналоговый вход
    
stat analogRead(pin)/4;
   break;  
   
   case 
'B'//кнопка
    
stat digitalRead(pin);   
   break;
   
   case 
'b'//кнопка
    
stat digitalRead(pin);   
   break;   
  }
  
  if(
stat == '{' || stat == '}' stat=124
  
Serial.print("{"); 
  
Serial.write(pin); 
  
Serial.write(stat); 
  
Serial.print("}");


//*******************************
uint8_t PWM_Status(uint8_t pin)
{
     
uint8_t stat;
     switch (
pin)
     {
      case 
3//
        
stat OCR2B//ШИМ на D3   
      
break;
      
      case 
5//
        
stat OCR0B//ШИМ на D5   
      
break;      
      
      case 
6//
        
stat OCR0A//ШИМ на D6   
      
break;  
      
      case 
9//
        
stat OCR1A//ШИМ на D9  
      
break; 
      
      case 
10//
        
stat OCR1B//ШИМ на D10   
      
break;  
      
      case 
11//
        
stat OCR2A//ШИМ на D11  
      
break;  
      
      default:
        
stat digitalRead(pin);
     } 
 return 
stat;    


//*******************************
void DB_Stat(void)
{
  
Serial.print("{"); 
  
Serial.write(99); 
  
Serial.write(1);  //индикатор обновления    
  
Serial.print("}");

Admin вне форума   Ответить с цитированием
 


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

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

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

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


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


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