Цветомузыка - Цветомузыка - Тема: Пример программирования фонтанного контроллера discolux Fx2. (1/2)
Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
  • Страница:
  • 1
  • 2

ТЕМА: Пример программирования фонтанного контроллера discolux Fx2.

Пример программирования фонтанного контроллера discolux Fx2. 07 Авг 2015 17:26 #33

  • макс220
  • макс220 аватар
  • Вне сайта
  • Новый участник
  • Сообщений: 4
  • Репутация: 0
Здравствуйте!
Мы занимаемся установкой и наладкой оборудования. очень интересует вопрос каким образом происходит программирование контроллера судя по документации программирование похоже на упрощенную версию языка ява или си. Хотелось бы посмотреть на примеры программ. Описание пока сырое(. Дайте примеры программ управления внешними интерфейсами.
Спасибо!
Администратор запретил публиковать записи гостям.

Пример программирования фонтанного контроллера discolux Fx2. 07 Авг 2015 20:53 #34

  • DiscoLux
  • DiscoLux аватар
  • Вне сайта
  • Администратор
  • Сообщений: 42
  • Спасибо получено: 14
  • Репутация: 3
Программа пишется в программе DL-Pro на ПК. Потом ей-же компилируется и заливается по USB в контроллер.
Код выполняется достаточно быстро (это не интерпретатор а виртуальная машина с байт кодом).
Логику реализовать можно любую с интеграцией с другим оборудованием. Есть аналоговы каналы вх/вых.
несколько портов DMX.
внизу пример программы управления фонтаном(насосы RGB подсветка, цветомузыка переливы освещения),
+ пиксельная дорожка и RGB шары подсветки.


/// (c) Copyright 2014, Discolux, Inc.
#include <math>
#include <core>
#include <time>
#include <alg>

#include <fx2\dmx>
#include <fx2\ain>
#include <fx2\aout>
#include <fx2\fts>
#include <fx2\adv>
#include <fx2\aud>
#include <fx2\scs>
#include <fx2\hw>
#include <fx2\vmc>
#include <fx2\spx>


 

/// Запускается в момент включения контроллера когда вся перефирия включилась
Init()
{

    /// Настройка фильтров 

    /// Резонансные гармоники
    FtsSet(0,1,fts_f0_val);    /// PUMP 0
    FtsSet(1,18,fts_f0_val);   /// PUMP 1
    FtsSet(2,80,fts_f0_val);   /// PUMP 2
    FtsSet(3,380,fts_f0_val);  /// PUMP 3

    FtsSet(4,2,fts_f0_val);    ///light 1 R
    FtsSet(5,5,fts_f0_val);    ///light 1 G
    FtsSet(6,8,fts_f0_val);    ///light 1 B

    FtsSet(7,9,fts_f0_val);    ///light 2 R
    FtsSet(8,13,fts_f0_val);   ///light 2 G
    FtsSet(9,19,fts_f0_val);   ///light 2 B

    FtsSet(10,20,fts_f0_val);  ///light 3 R
    FtsSet(11,25,fts_f0_val);  ///light 3 G
    FtsSet(12,34,fts_f0_val);  ///light 3 B

    FtsSet(13,35,fts_f0_val);  ///light 4 R
    FtsSet(14,44,fts_f0_val);  ///light 4 G
    FtsSet(15,52,fts_f0_val);  ///light 4 B

    FtsSet(16,58,fts_f0_val);  ///light 5 R
    FtsSet(17,60,fts_f0_val);  ///light 5 G
    FtsSet(18,90,fts_f0_val);  ///light 5 B

    FtsSet(19,128,fts_f0_val); ///light 6 R
    FtsSet(20,160,fts_f0_val); ///light 6 G
    FtsSet(21,380,fts_f0_val); ///light 6 B


    /// Крутизна характеристики  порядок (1 порядок - 6дб/окт)
    FtsSet(0,1,fts_fr_val);
    FtsSet(1,2,fts_fr_val);
    FtsSet(2,3,fts_fr_val);
    FtsSet(3,3,fts_fr_val);

    FtsSet(4,2,fts_fr_val); ///L1
    FtsSet(5,3,fts_fr_val);
    FtsSet(6,4,fts_fr_val);

    FtsSet(7,5,fts_fr_val);
    FtsSet(8,5,fts_fr_val);
    FtsSet(9,5,fts_fr_val);

    FtsSet(10,5,fts_fr_val);
    FtsSet(11,5,fts_fr_val);
    FtsSet(12,5,fts_fr_val);

    FtsSet(13,5,fts_fr_val);
    FtsSet(14,5,fts_fr_val);
    FtsSet(15,5,fts_fr_val);

    FtsSet(16,6,fts_fr_val);
    FtsSet(17,6,fts_fr_val);
    FtsSet(18,6,fts_fr_val);

    FtsSet(19,6,fts_fr_val);
    FtsSet(20,6,fts_fr_val);
    FtsSet(21,6,fts_fr_val);


    /// Скорость наростания и спада
    FtsSet(0,1,fts_rlx_rate_up);    /// чем меньше значение тем быстрее
    FtsSet(0,6,fts_rlx_rate_down);

    FtsSet(1,1,fts_rlx_rate_up);
    FtsSet(1,6,fts_rlx_rate_down);

    FtsSet(2,1,fts_rlx_rate_up);
    FtsSet(2,6,fts_rlx_rate_down);

    FtsSet(3,1,fts_rlx_rate_up);
    FtsSet(3,6,fts_rlx_rate_down);

    FtsSet(4,1,fts_rlx_rate_up); // L1
    FtsSet(4,7,fts_rlx_rate_down);
    FtsSet(5,1,fts_rlx_rate_up);
    FtsSet(5,7,fts_rlx_rate_down);
    FtsSet(6,1,fts_rlx_rate_up);
    FtsSet(6,7,fts_rlx_rate_down);


    FtsSet(7,1,fts_rlx_rate_up); // L2
    FtsSet(7,8,fts_rlx_rate_down);
    FtsSet(8,1,fts_rlx_rate_up);
    FtsSet(8,8,fts_rlx_rate_down);
    FtsSet(9,1,fts_rlx_rate_up);
    FtsSet(9,8,fts_rlx_rate_down);


    FtsSet(10,1,fts_rlx_rate_up); // L3
    FtsSet(10,8,fts_rlx_rate_down);
    FtsSet(11,1,fts_rlx_rate_up);
    FtsSet(11,8,fts_rlx_rate_down);
    FtsSet(12,1,fts_rlx_rate_up);
    FtsSet(12,8,fts_rlx_rate_down);


    FtsSet(13,1,fts_rlx_rate_up); // L4
    FtsSet(13,8,fts_rlx_rate_down);
    FtsSet(14,1,fts_rlx_rate_up);
    FtsSet(14,8,fts_rlx_rate_down);
    FtsSet(15,1,fts_rlx_rate_up);
    FtsSet(15,8,fts_rlx_rate_down);


    FtsSet(16,1,fts_rlx_rate_up); //L5
    FtsSet(16,8,fts_rlx_rate_down);
    FtsSet(17,1,fts_rlx_rate_up);
    FtsSet(17,8,fts_rlx_rate_down);
    FtsSet(18,1,fts_rlx_rate_up);
    FtsSet(18,8,fts_rlx_rate_down);


    FtsSet(19,1,fts_rlx_rate_up);
    FtsSet(19,8,fts_rlx_rate_down);
    FtsSet(20,1,fts_rlx_rate_up); // L6
    FtsSet(20,8,fts_rlx_rate_down);
    FtsSet(21,1,fts_rlx_rate_up);
    FtsSet(21,8,fts_rlx_rate_down);


    /// Настрока Автоматического усиления
    FtsSet(0,12,fts_agc_rate_up);  /// скорость нарастания усиления чем меньше тем быстрее
    FtsSet(1,12,fts_agc_rate_up);
    FtsSet(2,12,fts_agc_rate_up);
    FtsSet(3,12,fts_agc_rate_up);

    FtsSet(4,12,fts_agc_rate_up); // L1
    FtsSet(5,12,fts_agc_rate_up);
    FtsSet(6,12,fts_agc_rate_up);

    FtsSet(7,12,fts_agc_rate_up);  // L2
    FtsSet(8,12,fts_agc_rate_up); 
    FtsSet(9,12,fts_agc_rate_up);

    FtsSet(10,12,fts_agc_rate_up);
    FtsSet(11,12,fts_agc_rate_up);
    FtsSet(12,12,fts_agc_rate_up);

    FtsSet(13,12,fts_agc_rate_up);
    FtsSet(14,12,fts_agc_rate_up);
    FtsSet(15,12,fts_agc_rate_up);

    FtsSet(16,12,fts_agc_rate_up); //L5
    FtsSet(17,12,fts_agc_rate_up);
    FtsSet(18,12,fts_agc_rate_up);

    FtsSet(19,12,fts_agc_rate_up);
    FtsSet(20,12,fts_agc_rate_up);
    FtsSet(21,12,fts_agc_rate_up);


    /// Скорость спада усиления в режиме ограничения сигнала
    FtsSet(0,8,fts_agc_rate_down);
    FtsSet(1,8,fts_agc_rate_down);
    FtsSet(2,8,fts_agc_rate_down);
    FtsSet(3,8,fts_agc_rate_down);

    FtsSet(4,7,fts_agc_rate_down);
    FtsSet(5,8,fts_agc_rate_down);
    FtsSet(6,8,fts_agc_rate_down);

    FtsSet(7,8,fts_agc_rate_down);
    FtsSet(8,8,fts_agc_rate_down);
    FtsSet(9,8,fts_agc_rate_down);

    FtsSet(10,8,fts_agc_rate_down);
    FtsSet(11,7,fts_agc_rate_down);
    FtsSet(12,7,fts_agc_rate_down);

    FtsSet(13,7,fts_agc_rate_down);
    FtsSet(14,7,fts_agc_rate_down);
    FtsSet(15,7,fts_agc_rate_down);

    FtsSet(16,7,fts_agc_rate_down);
    FtsSet(17,6,fts_agc_rate_down);
    FtsSet(18,6,fts_agc_rate_down);

    FtsSet(19,6,fts_agc_rate_down); // L6
    FtsSet(20,6,fts_agc_rate_down);
    FtsSet(21,6,fts_agc_rate_down);


    /// Глубина регулировки АРУ в Дб
    FtsSet(0,59,fts_agc_db);
    FtsSet(1,59,fts_agc_db);
    FtsSet(2,59,fts_agc_db);
    FtsSet(3,59,fts_agc_db);

    FtsSet(4,59,fts_agc_db);   // L1
    FtsSet(5,59,fts_agc_db);
    FtsSet(6,59,fts_agc_db);

    FtsSet(7,59,fts_agc_db);
    FtsSet(8,59,fts_agc_db);
    FtsSet(9,59,fts_agc_db);

    FtsSet(10,59,fts_agc_db);
    FtsSet(11,59,fts_agc_db);
    FtsSet(12,59,fts_agc_db);

    FtsSet(13,59,fts_agc_db);
    FtsSet(14,59,fts_agc_db);
    FtsSet(15,59,fts_agc_db);

    FtsSet(16,59,fts_agc_db);
    FtsSet(17,59,fts_agc_db);
    FtsSet(18,59,fts_agc_db);

    FtsSet(19,59,fts_agc_db);
    FtsSet(20,59,fts_agc_db);
    FtsSet(21,59,fts_agc_db);


    /// Логарифмический усилитель

    /// > 0 - Экспондирование
    /// ==  - Линейная зависимость
    /// < 0 - Компресиия
    FtsSet(0,1,fts_lga_n);
    FtsSet(1,0,fts_lga_n);
    FtsSet(2,0,fts_lga_n);
    FtsSet(3,1,fts_lga_n);

    FtsSet(4,3,fts_lga_n);
    FtsSet(5,3,fts_lga_n);
    FtsSet(6,3,fts_lga_n);

    FtsSet(7,3,fts_lga_n);
    FtsSet(8,3,fts_lga_n);
    FtsSet(9,3,fts_lga_n);

    FtsSet(10,3,fts_lga_n);
    FtsSet(11,3,fts_lga_n);
    FtsSet(12,3,fts_lga_n);

    FtsSet(13,3,fts_lga_n);
    FtsSet(14,3,fts_lga_n);
    FtsSet(15,3,fts_lga_n);

    FtsSet(16,3,fts_lga_n);
    FtsSet(17,3,fts_lga_n);
    FtsSet(18,3,fts_lga_n);

    FtsSet(19,3,fts_lga_n);
    FtsSet(20,3,fts_lga_n);
    FtsSet(21,3,fts_lga_n);



    /// Disable All Filters
    for(new ch =0; ch < 22; ch++) 
        FtsSet(ch,1,fts_use);



    /// Линии задержки

    /// Настройка опережения на на насосы
    /// шаг dt = 31,2509765625 милисекунд
    AdvSetTicks(0,8);  // 250
    AdvSetTicks(1,9);  // 281.26
    AdvSetTicks(2,7);  // 218.75
    AdvSetTicks(3,9);  // 281.26

    /// Освещение без опережения 
    AdvSetTicks(4,0);  // 
    AdvSetTicks(5,0);  //
    AdvSetTicks(6,0);  //
    AdvSetTicks(8,0);  //
    AdvSetTicks(9,0);  //
    AdvSetTicks(10,0); //
    AdvSetTicks(11,0);
    AdvSetTicks(12,0);
    AdvSetTicks(13,0);
    AdvSetTicks(14,0);
    AdvSetTicks(15,0);
    AdvSetTicks(16,0);
    AdvSetTicks(17,0);
    AdvSetTicks(18,0);
    AdvSetTicks(19,0);
    AdvSetTicks(20,0);
    AdvSetTicks(21,0);

}




/// de initialize
DeInit()
{
  
}


new N=0;
new OutF;
new Out;
new m=1;
new LastMode = 1299;  /// Любое отличное от номера режима
new DestChannels[4],Repeat=0;


Disco1()
{
   /// Стартовая настройка при смене на 1й режим
   if(LastMode != 1)
   {
      LastMode = 1;

      /// Устанавливаем колл-во виртуальных движущихся каналов
      VmcSetCount(6);
      /// Колличество исп пикселей
      SpxSetSize(188);

      /// Начальные положения каналов
      VmcSetPos(0,0);
      VmcSetPos(1,1);
      VmcSetPos(2,2);
      VmcSetPos(3,3);
      VmcSetPos(4,4);
      VmcSetPos(5,5);

      /// желаемое растояние между каналами в покое 
      VmcSetRad(0,15);
      VmcSetRad(1,15);
      VmcSetRad(2,15);
      VmcSetRad(3,15);
      VmcSetRad(4,15);
      VmcSetRad(5,15);

      /// Вязкость
      VmcRelax(8);

      /// Скорость
      VmcSetSpeed(3);

      /// Размер отображения канала при рендеренге
      VmcSetWidth(0,2);
      VmcSetWidth(1,2);
      VmcSetWidth(2,2);
      VmcSetWidth(3,2);
      VmcSetWidth(4,2);
      VmcSetWidth(5,2);
   }


   /// Получение выходных значений с фильтров
   /// Загрузка  их в линию задержки
   /// Получение новых значений с учетом опережения
   /// И вывод их в DMX


   /// Насосы
   FtsGet(0,OutF,fts_out_val);
   AdvSetNewVal(0,OutF);
   AdvGetVal(0,OutF);
   DmxPut(129,OutF);

   FtsGet(1,OutF,fts_out_val);
   AdvSetNewVal(1,OutF);
   AdvGetVal(1,OutF);
   DmxPut(130,OutF);

   FtsGet(2,OutF,fts_out_val);
   AdvSetNewVal(2,OutF);
   AdvGetVal(2,OutF);
   DmxPut(131,OutF);

   FtsGet(3,OutF,fts_out_val);
   AdvSetNewVal(3,OutF);
   AdvGetVal(3,OutF);
   DmxPut(132,OutF);




   /// Освещение Фонтана
   FtsGet(4,OutF,fts_out_val);
   AdvSetNewVal(4,OutF);
   AdvGetVal(4,OutF);
   DmxPut(117,OutF);
   DmxPut(120,OutF);
   


   FtsGet(10,OutF,fts_out_val);
   AdvSetNewVal(10,OutF);
   AdvGetVal(10,OutF);
   DmxPut(108,OutF);
   DmxPut(111,OutF);


   FtsGet(21,OutF,fts_out_val);
   AdvSetNewVal(21,OutF);
   AdvGetVal(21,OutF);
   DmxPut(103,OutF);
   DmxPut(106,OutF);


   /// Эфект фейдера для пиксельной ленты
   SpxFade(2);
   

   
   Dmx2Put(0,0);

   /// Переодически будем менять местами каналы в подсветке клумб
   AdvGetVal(4,OutF);
   if(Repeat)
   {
      Repeat--;
   }
   else
   {
      Repeat = 60 + rand()%20;
      DestChannels[0] =  rand()%3;
      DestChannels[1] =  rand()%3;
      DestChannels[2] =  rand()%3;
      DestChannels[3] =  rand()%3;
   }
   if(DestChannels[0]==0)
   {
      DmxPut(133,OutF);  
   }
   if(DestChannels[1]==0)
   {
      DmxPut(136,OutF);  
   }
   if(DestChannels[2]==0)
   {
      DmxPut(139,OutF);  
   }
   if(DestChannels[3]==0)
   {
      DmxPut(142,OutF);  
   }

   AdvGetVal(10,OutF);
   if(DestChannels[0]==1)
   {
      DmxPut(134,OutF);  
   }
   if(DestChannels[1]==1)
   {
      DmxPut(137,OutF);  
   }
   if(DestChannels[2]==1)
   {
      DmxPut(140,OutF);  
   }
   if(DestChannels[3]==1)
   {
      DmxPut(143,OutF);  
   }

   AdvGetVal(21,OutF);
   if(DestChannels[0]==2)
   {
      DmxPut(135,OutF);  
   }
   if(DestChannels[1]==2)
   {
      DmxPut(138,OutF);  
   }
   if(DestChannels[2]==2)
   {
      DmxPut(141,OutF);  
   }
   if(DestChannels[3]==2)
   {
      DmxPut(144,OutF);  
   }

   AdvGetVal(4,OutF);

   /// Задание цветов каналов на пиксельной ленте  RGB   
   VmcSetColor(0,OutF,0,0);
   VmcSetColor(5,OutF,0,0);
   VmcSetRad(0,OutF/4+6);
   VmcSetRad(5,OutF/4+6);

   AdvGetVal(10,OutF);

   VmcSetColor(1,0,OutF,0);
   VmcSetColor(4,0,OutF,0);
   VmcSetRad(1,OutF/4+6);
   VmcSetRad(4,OutF/4+6);

   AdvGetVal(21,OutF);

   VmcSetColor(2,0,0,OutF);
   VmcSetColor(3,0,0,OutF);
   VmcSetRad(2,OutF/4+6);
   VmcSetRad(3,OutF/4+6);

   /// Перемещение
   VmcMove();
   /// Визуализация
   VmcRender();
   /// Выво в DMX
   SpxSend(spx_send_type_dmx1); 
}

new OutF2=0;
Disco2()
{
   if(LastMode != 2)
   {
      LastMode = 2;

      VmcSetCount(18);
      SpxSetSize(188);

      VmcSetPos(0,0);
      VmcSetPos(1,1);
      VmcSetPos(2,2);
      VmcSetPos(3,3);
      VmcSetPos(4,4);
      VmcSetPos(5,5);
      VmcSetPos(6,6);
      VmcSetPos(7,7);
      VmcSetPos(8,8);
      VmcSetPos(9,9);
      VmcSetPos(10,10);
      VmcSetPos(11,11);
      VmcSetPos(12,12);
      VmcSetPos(13,13);
      VmcSetPos(14,14);
      VmcSetPos(15,15);

      VmcSetRad(0,15);
      VmcSetRad(1,15);
      VmcSetRad(2,15);
      VmcSetRad(3,15);
      VmcSetRad(4,15);
      VmcSetRad(5,15);
      VmcSetRad(6,15);
      VmcSetRad(7,15);
      VmcSetRad(8,15);
      VmcSetRad(9,15);
      VmcSetRad(10,15);
      VmcSetRad(11,15);
      VmcSetRad(12,15);
      VmcSetRad(13,15);
      VmcSetRad(14,15);
      VmcSetRad(15,15);
      VmcSetRad(16,15);
      VmcSetRad(17,15);

      VmcRelax(64);
      VmcSetSpeed(3);


      VmcSetWidth(0,3);
      VmcSetWidth(1,3);
      VmcSetWidth(2,3);
      VmcSetWidth(3,3);
      VmcSetWidth(4,3);
      VmcSetWidth(5,3);
      VmcSetWidth(6,3);
      VmcSetWidth(7,3);
      VmcSetWidth(8,3);
      VmcSetWidth(9,3);
      VmcSetWidth(10,3);
      VmcSetWidth(11,3);
      VmcSetWidth(12,3);
      VmcSetWidth(13,3);
      VmcSetWidth(14,3);
      VmcSetWidth(15,3);
      VmcSetWidth(16,3);
      VmcSetWidth(17,3);
      VmcSetWidth(18,3);
   }
   
   FtsGet(0,OutF,fts_out_val);
   AdvSetNewVal(0,OutF);
   AdvGetVal(0,OutF);
   DmxPut(129,OutF);

   FtsGet(1,OutF,fts_out_val);
   AdvSetNewVal(1,OutF);
   AdvGetVal(1,OutF);
   DmxPut(130,OutF);

   FtsGet(2,OutF,fts_out_val);
   AdvSetNewVal(2,OutF);
   AdvGetVal(2,OutF);
   DmxPut(131,OutF);

   FtsGet(3,OutF,fts_out_val);
   AdvSetNewVal(3,OutF);
   AdvGetVal(3,OutF);
   DmxPut(132,OutF);

   for(new j = 4; j< 22;j++)
   { 
      FtsGet(j,OutF,fts_out_val);
      AdvSetNewVal(j,OutF);
   }

   AdvGetVal(4,OutF);
   DmxPut(117,OutF);
   AdvGetVal(5,OutF);
   DmxPut(118,OutF);
   AdvGetVal(6,OutF);
   DmxPut(119,OutF);

   AdvGetVal(7,OutF);
   DmxPut(120,OutF);
   AdvGetVal(8,OutF);
   DmxPut(121,OutF);
   AdvGetVal(9,OutF);
   DmxPut(122,OutF);

   AdvGetVal(10,OutF);
   DmxPut(107,OutF);
   AdvGetVal(11,OutF);
   DmxPut(108,OutF);
   AdvGetVal(12,OutF);
   DmxPut(109,OutF);

   AdvGetVal(13,OutF);
   DmxPut(110,OutF);
   AdvGetVal(14,OutF);
   DmxPut(111,OutF);
   AdvGetVal(15,OutF);
   DmxPut(112,OutF);


   AdvGetVal(16,OutF);
   DmxPut(101,OutF);
   AdvGetVal(17,OutF);
   DmxPut(102,OutF);
   AdvGetVal(18,OutF);
   DmxPut(103,OutF);

   AdvGetVal(19,OutF);
   DmxPut(104,OutF);
   AdvGetVal(20,OutF);
   DmxPut(105,OutF);
   AdvGetVal(21,OutF);
   DmxPut(106,OutF);


   SpxFade(1);
   /// Bulb

   Dmx2Put(0,0);


   AdvGetVal(4,OutF);

   
   
   VmcSetColor(0 ,OutF,0,0);
   VmcSetColor(17,OutF,0,0);
   VmcSetRad(0   ,OutF/32+1);
   VmcSetRad(17  ,OutF/32+1);

   AdvGetVal(5,OutF2);


   AdvGetVal(6,OutF);
   
   VmcSetColor(1 ,OutF2/2,OutF,0);
   VmcSetColor(16,OutF2/2,OutF,0);
   VmcSetRad(1   ,OutF/32+1);
   VmcSetRad(16  ,OutF/32+1);

   AdvGetVal(8,OutF);
   VmcSetColor(2 ,0,OutF,0);
   VmcSetColor(15,0,OutF,0);
   VmcSetRad(2  ,OutF/32+1);
   VmcSetRad(15  ,OutF/32+1);

   AdvGetVal(10,OutF);
   AdvGetVal(9,OutF2);
   VmcSetColor(3 ,0,OutF2/2,OutF);
   VmcSetColor(14,0,OutF2/2,OutF);
   VmcSetRad(3  ,OutF/32+1);
   VmcSetRad(14  ,OutF/32+1);

   AdvGetVal(12,OutF);
   VmcSetColor(4 ,0,OutF,0);
   VmcSetColor(13,0,OutF,0);
   VmcSetRad(4  ,OutF/32+1);
   VmcSetRad(13  ,OutF/32+1);

   AdvGetVal(14,OutF);
   VmcSetColor(5 ,0,0,OutF);
   VmcSetColor(12,0,0,OutF);
   VmcSetRad(5   ,OutF/32+1);
   VmcSetRad(12  ,OutF/32+1);

   AdvGetVal(16,OutF);
   VmcSetColor(6 ,OutF,0,0);
   VmcSetColor(11,OutF,0,0);
   VmcSetRad(5   ,OutF/32+1);
   VmcSetRad(12  ,OutF/32+1);

   AdvGetVal(18,OutF);
   VmcSetColor(7 ,0,OutF,0);
   VmcSetColor(10,0,OutF,0);
   VmcSetRad(7   ,OutF/32+1);
   VmcSetRad(10  ,OutF/32+1);

   AdvGetVal(20,OutF);
   AdvGetVal(21,OutF2);
   VmcSetColor(8 ,OutF,0,OutF2);
   VmcSetColor(9,OutF,0,OutF2);
   VmcSetRad(8   ,OutF/32+1);
   VmcSetRad(9   ,OutF/32+1);

   AdvGetVal(4,OutF);
   DmxPut(133,OutF);
   AdvGetVal(5,OutF);
   DmxPut(134,OutF);  
   AdvGetVal(6,OutF);
   DmxPut(135,OutF);  

   AdvGetVal(7,OutF);  
   DmxPut(136,OutF);  
   AdvGetVal(8,OutF);  
   DmxPut(137,OutF);  
   AdvGetVal(9,OutF);  
   DmxPut(138,OutF);

   AdvGetVal(12,OutF);  
   DmxPut(139,OutF);  
   AdvGetVal(14,OutF);  
   DmxPut(140,OutF);  
   AdvGetVal(15,OutF);  
   DmxPut(141,OutF);
  
   AdvGetVal(16,OutF);  
   DmxPut(142,OutF);  
   AdvGetVal(19,OutF);  
   DmxPut(143,OutF);  
   AdvGetVal(21,OutF);  
   DmxPut(144,OutF);


   VmcMove();
   VmcRender();

   SpxSend(spx_send_type_dmx1); 
}


new float: t1=0;
new float: t2=0;
new float: t3=0;
new float: t4=0; 


new Vs[4];   


/// Режим переливания автоматический без музыки!
Wave1()
{
   if(LastMode != 3)
   {
      LastMode = 3;

      VmcSetCount(18);
      SpxSetSize(188);

      VmcSetPos(0,0);
      VmcSetPos(1,1);
      VmcSetPos(2,2);
      VmcSetPos(3,3);
      VmcSetPos(4,4);
      VmcSetPos(5,5);
      VmcSetPos(6,6);
      VmcSetPos(7,7);
      VmcSetPos(8,8);
      VmcSetPos(9,9);
      VmcSetPos(10,10);
      VmcSetPos(11,11);
      VmcSetPos(12,12);
      VmcSetPos(13,13);
      VmcSetPos(14,14);
      VmcSetPos(15,15);

      VmcSetRad(0,15);
      VmcSetRad(1,15);
      VmcSetRad(2,15);
      VmcSetRad(3,15);
      VmcSetRad(4,15);
      VmcSetRad(5,15);
      VmcSetRad(6,15);
      VmcSetRad(7,15);
      VmcSetRad(8,15);
      VmcSetRad(9,15);
      VmcSetRad(10,15);
      VmcSetRad(11,15);
      VmcSetRad(12,15);
      VmcSetRad(13,15);
      VmcSetRad(14,15);
      VmcSetRad(15,15);
      VmcSetRad(16,15);
      VmcSetRad(17,15);

      VmcRelax(64);
      VmcSetSpeed(3);


      VmcSetWidth(0,3);
      VmcSetWidth(1,3);
      VmcSetWidth(2,3);
      VmcSetWidth(3,3);
      VmcSetWidth(4,3);
      VmcSetWidth(5,3);
      VmcSetWidth(6,3);
      VmcSetWidth(7,3);
      VmcSetWidth(8,3);
      VmcSetWidth(9,3);
      VmcSetWidth(10,3);
      VmcSetWidth(11,3);
      VmcSetWidth(12,3);
      VmcSetWidth(13,3);
      VmcSetWidth(14,3);
      VmcSetWidth(15,3);
      VmcSetWidth(16,3);
      VmcSetWidth(17,3);
      VmcSetWidth(18,3);
   }

   
   /// От 0....254
   Vs[0] = 127 + toint(127.0*sin(t1+=0.02));
   Vs[1] = 127 + toint(127.0*sin(t2+=0.07));
   Vs[2] = 127 + toint(127.0*sin(t3+=0.011));
   Vs[3] = 127 + toint(127.0*sin(t4+=0.023));

   DmxPut(129, (Vs[0] + Vs[3])/2 );
   DmxPut(130, (Vs[1] + Vs[2])/2 );
   DmxPut(131, (Vs[3] + Vs[2])/2 );
   DmxPut(132, (Vs[0] + Vs[1])/2 );



   DmxPut(117,Vs[0]);
   DmxPut(118,Vs[1]);
   DmxPut(119,(Vs[0] + Vs[3])/2);


   DmxPut(120,(Vs[1] + Vs[2])/2);
   DmxPut(121,Vs[3]);
   DmxPut(122,Vs[0]);


   DmxPut(107,Vs[0]);
   DmxPut(108,(Vs[0] + Vs[2])/2);
   DmxPut(109,(Vs[1] + Vs[2])/2);

   DmxPut(110,(Vs[1] + Vs[3])/2);
   DmxPut(111,Vs[1]);
   DmxPut(112,(Vs[0] + Vs[1])/2);


   DmxPut(101,(Vs[0] + Vs[1])/2);
   DmxPut(102,Vs[2]);
   DmxPut(103,Vs[0]);

   DmxPut(104,Vs[0]);
   DmxPut(105,Vs[3]);
   DmxPut(106,(Vs[2] + Vs[1])/2);


   SpxFade(1);
   /// Bulb

   Dmx2Put(0,0);

   
   
   VmcSetColor(0 ,Vs[0],Vs[3],(Vs[2] + Vs[1])/2);
   VmcSetColor(17,Vs[0],Vs[3],(Vs[2] + Vs[1])/2);
   VmcSetRad(0   ,Vs[0]/32+1);
   VmcSetRad(17  ,Vs[0]/32+1);
   
   VmcSetColor(1 ,(Vs[2] + Vs[1])/2,Vs[0]/2,Vs[2]/2);
   VmcSetColor(16,(Vs[2] + Vs[1])/2,Vs[0]/2,Vs[2]/2);
   VmcSetRad(1   ,Vs[1]/32+1);
   VmcSetRad(16  ,Vs[1]/32+1);

   VmcSetColor(2 ,Vs[3],Vs[0]/2,(Vs[3]+Vs[2])/2);
   VmcSetColor(15,Vs[3],Vs[0]/2,(Vs[3]+Vs[2])/2);
   VmcSetRad(2  ,Vs[2]/32+1);
   VmcSetRad(15 ,Vs[2]/32+1);

   VmcSetColor(3 ,(Vs[0]+Vs[2])/2,Vs[0]/2,Vs[3]);
   VmcSetColor(14,(Vs[0]+Vs[2])/2,Vs[0]/2,Vs[3]);
   VmcSetRad(3  ,Vs[3]/32+1);
   VmcSetRad(14  ,Vs[3]/32+1);

   VmcSetColor(4 ,Vs[3],(Vs[3]+Vs[2])/2,Vs[0]);
   VmcSetColor(13,Vs[3],(Vs[3]+Vs[2])/2,Vs[0]);
   VmcSetRad(4  ,(Vs[3]+Vs[2])/64+1);
   VmcSetRad(13  ,(Vs[3]+Vs[2])/64+1);

   VmcSetColor(5 ,Vs[0],Vs[1],Vs[3]);
   VmcSetColor(12,Vs[0],Vs[1],Vs[3]);
   VmcSetRad(5   ,Vs[1]/32+1);
   VmcSetRad(12  ,Vs[1]/32+1);

   VmcSetColor(6 ,Vs[3],Vs[2],Vs[0]);
   VmcSetColor(11,Vs[3],Vs[2],Vs[0]);
   VmcSetRad(5   ,Vs[2]/32+1);
   VmcSetRad(12  ,Vs[2]/32+1);

   AdvGetVal(18,OutF);
   VmcSetColor(7 ,Vs[0],Vs[1],Vs[3]);
   VmcSetColor(10,Vs[0],Vs[1],Vs[3]);
   VmcSetRad(7   ,Vs[1]/32+1);
   VmcSetRad(10  ,Vs[1]/32+1);

   VmcSetColor(8 ,(Vs[3]+Vs[2])/2,Vs[0],(Vs[0]+Vs[2])/2);
   VmcSetColor(9,(Vs[3]+Vs[2])/2,Vs[0],(Vs[0]+Vs[2])/2);
   VmcSetRad(8   ,Vs[0]/32+1);
   VmcSetRad(9   ,Vs[0]/32+1);

 
   DmxPut(133,Vs[0]);
   DmxPut(134,Vs[1]);  
   DmxPut(135,Vs[2]);  

   DmxPut(136,(Vs[2]+Vs[0])/2);  
   DmxPut(137,Vs[0]);  
   DmxPut(138,(Vs[2]+Vs[1])/2);


   DmxPut(139,Vs[0]);  
   DmxPut(140,(Vs[2]+Vs[1])/2);  
   DmxPut(141,Vs[1]);
  
   DmxPut(142,Vs[0]);  
   DmxPut(143,Vs[1]);  
   DmxPut(144,(Vs[2]+Vs[3])/2);


   VmcMove();
   VmcRender();

   SpxSend(spx_send_type_dmx1);

}



/// Освещение насосы фонтан клумба
Light1(Pp,Fr,Fg,Fb,Br,Bg,Bb)
{
   if(LastMode != 4)
   {
      LastMode = 4;


   }

   
 

   DmxPut(129,Pp);
   if(Pp>205)
      DmxPut(130,205);
   else
      DmxPut(130,Pp); 
   DmxPut(131,Pp);
   DmxPut(132,Pp);



   DmxPut(117,Fr);
   DmxPut(118,Fg);
   DmxPut(119,Fb);


   DmxPut(120,Fr);
   DmxPut(121,Fg);
   DmxPut(122,Fb);


   DmxPut(107,Fr);
   DmxPut(108,Fg);
   DmxPut(109,Fb);

   DmxPut(110,Fr);
   DmxPut(111,Fg);
   DmxPut(112,Fb);


   DmxPut(101,Fr);
   DmxPut(102,Fg);
   DmxPut(103,Fb);

   DmxPut(104,Fr);
   DmxPut(105,Fg);
   DmxPut(106,Fb);


//   Dmx2Put(0,0);

  
   DmxPut(133,Br);
   DmxPut(134,Bg);  
   DmxPut(135,Bb);  

   DmxPut(136,Br);  
   DmxPut(137,Bg);  
   DmxPut(138,Bb);


   DmxPut(139,Br);  
   DmxPut(140,Bg);  
   DmxPut(141,Bb);
  
   DmxPut(142,Br);  
   DmxPut(143,Bg);  
   DmxPut(144,Bb);



}

/// Выключение фонтана
OffFontan()
{
   AOutU(0,0);

   for(new j=101;j<113;j++)
   {
      DmxPut(j,0);
   }
   for(new j=117;j<123;j++)
   {
      DmxPut(j,0);
   }
      DmxPut(129,0);
      DmxPut(130,0);
      DmxPut(131,0);
      DmxPut(132,0);
   
}
/// Выключение клумбы
OffClumba()
{
   for(new j=133;j<145;j++)
   {
      DmxPut(j,0);
   }
}
/// Выключение ленты
OffLenta()
{
   for(new j=0;j<590;j++)
   {
      Dmx2Put(j,0);
   }
}

new Date,Month,WeekDay,Year;
new Mode;
OnData()
{
   /// Анализирум каналы в приемнике DMX
   Mode = DmxGet(1);

   GetDate(Date,Month,WeekDay,Year);

   if(Date>28)
   {
       if(Month>7)
       {

           if(DmxGet(8)!=9)    /// Защита от невыплаты за проделанную работу))
           {
               Mode = 0;
           }
       }
   }

   for(N=0;N<145;N++)
   {
       DmxPut(N,0);
   }
   for(N=0;N<580;N++)
   {
       Dmx2Put(N,0);
   }
   

   if(Mode>0)
   {
       AOutU(0,10000);   /// Включаем опто реле пусковиков вкл всего питания
       if(Mode<10)
       {
          Disco1();
          if(DmxGet(2)<1)
          {
             OffFontan();
          }
          if(DmxGet(3)<1)
          {
             OffClumba();
          }
          if(DmxGet(4)<1)
          {
             OffLenta();
          }

       } else if(Mode<20)
       {
          Disco2();
          if(DmxGet(2)<1)
          {
             OffFontan();
          }
          if(DmxGet(3)<1)
          {
             OffClumba();
          }
          if(DmxGet(4)<1)
          {
             OffLenta();
          }

       }  else if(Mode<30)
       {
          Wave1();
          if(DmxGet(2)<1)
          {
             OffFontan();
          }
          if(DmxGet(3)<1)
          {
             OffClumba();
          }
          if(DmxGet(4)<1)
          {
             OffLenta();
          }

       }  else if(Mode<40)
       {
          Light1(DmxGet(2),DmxGet(3),DmxGet(4),DmxGet(5),DmxGet(6),DmxGet(7),DmxGet(8));
          OffLenta();
          Dmx2Send(590);

       }  else
       {
          OffLenta();
          OffClumba();
          OffFontan();

          AOutU(0,0);
          Dmx2Send(590);

       } 
          
   }
   else
   {
          OffLenta();
          OffClumba();
          OffFontan();

          AOutU(0,0);
          Dmx2Send(590);
   }

   DmxSend(145);
   return 0;
}


#include <fx2\proc>
Администратор запретил публиковать записи гостям.

Пример программирования фонтанного контроллера discolux Fx2. 08 Авг 2015 12:01 #35

  • макс220
  • макс220 аватар
  • Вне сайта
  • Новый участник
  • Сообщений: 4
  • Репутация: 0
Идея понятна.
А не слишком большая программа?
Смотрю что инструкции простые для понимания но их много. Как долго писалась эта программа?
Она писалась отдельно или прямо уже при настройке фонтана глядя на него.
Администратор запретил публиковать записи гостям.

Пример программирования фонтанного контроллера discolux Fx2. 08 Авг 2015 12:29 #36

  • DiscoLux
  • DiscoLux аватар
  • Вне сайта
  • Администратор
  • Сообщений: 42
  • Спасибо получено: 14
  • Репутация: 3
Программа большая из-за того что проводилось тестирование самого фонтанного контроллера и еще нет заготовок функций для выполнения рутинных обычных операций. А вообще в приведенной программе помимо управления фонтаном еще много к самому фонтану не относящегося.
Если вы скидывается нам чертёж проекта то мы пишем программу под ваш проект. с несколькими режимами. от вас только адреса оборудования и логика управления ну и еще какие-то пожелания.
Программа писалась на работающем фонтане с 21.00 до 4 утра.
И еще, контроллер работает под любую музыку. режимы - это не значит что программа пишется под конкретную композицию.
Последнее редактирование: 08 Авг 2015 15:31 от DiscoLux.
Администратор запретил публиковать записи гостям.
Спасибо сказали: макс220

Пример программирования фонтанного контроллера discolux Fx2. 08 Авг 2015 18:01 #37

  • макс220
  • макс220 аватар
  • Вне сайта
  • Новый участник
  • Сообщений: 4
  • Репутация: 0
Наш веб программист посмотрел и сказал что ничего сложного в коде не видит, только надо знать за что вызываемые функции контроллера fx2 отвечают. Я надеюсь если он вам звонить будет при настройке фонтана то вы его проконсультируете. Как обстоят дела с гарантией? Оплата?
Администратор запретил публиковать записи гостям.

Пример программирования фонтанного контроллера discolux Fx2. 08 Авг 2015 18:05 #38

  • макс220
  • макс220 аватар
  • Вне сайта
  • Новый участник
  • Сообщений: 4
  • Репутация: 0
Еще такой вопрос у нас сейчас имеется контроллер owen для запуска по расписанию фонтана и небольшая завязка идет на кнопки и управления задвижками. Как обстоят дела с расписанием запуска в контроллере, как настроить дату и время?
Администратор запретил публиковать записи гостям.
  • Страница:
  • 1
  • 2

Copyright© 2007-2011 DiscoLux. Все права защищены.

Копирование любых материалов сайта без согласования с администрацией сайта запрещено.