- Главная
- Форум
- Оборудование DiscoLux
- Фонтанные контроллеры
- Контроллер для фонтана DL-Fx2
- Пример программирования фонтанного контроллера discolux Fx2.
Добро пожаловать,
Гость
|
ТЕМА: Пример программирования фонтанного контроллера discolux Fx2.
Пример программирования фонтанного контроллера discolux Fx2. 07 Авг 2015 17:26 #33
|
Здравствуйте!
Мы занимаемся установкой и наладкой оборудования. очень интересует вопрос каким образом происходит программирование контроллера судя по документации программирование похоже на упрощенную версию языка ява или си. Хотелось бы посмотреть на примеры программ. Описание пока сырое(. Дайте примеры программ управления внешними интерфейсами. Спасибо! |
Администратор запретил публиковать записи гостям.
|
Пример программирования фонтанного контроллера discolux Fx2. 07 Авг 2015 20:53 #34
|
Программа пишется в программе 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
|
Идея понятна.
А не слишком большая программа? Смотрю что инструкции простые для понимания но их много. Как долго писалась эта программа? Она писалась отдельно или прямо уже при настройке фонтана глядя на него. |
Администратор запретил публиковать записи гостям.
|
Пример программирования фонтанного контроллера discolux Fx2. 08 Авг 2015 12:29 #36
|
Программа большая из-за того что проводилось тестирование самого фонтанного контроллера и еще нет заготовок функций для выполнения рутинных обычных операций. А вообще в приведенной программе помимо управления фонтаном еще много к самому фонтану не относящегося.
Если вы скидывается нам чертёж проекта то мы пишем программу под ваш проект. с несколькими режимами. от вас только адреса оборудования и логика управления ну и еще какие-то пожелания. Программа писалась на работающем фонтане с 21.00 до 4 утра. И еще, контроллер работает под любую музыку. режимы - это не значит что программа пишется под конкретную композицию. |
Последнее редактирование: 08 Авг 2015 15:31 от DiscoLux.
Администратор запретил публиковать записи гостям.
Спасибо сказали: макс220
|
Пример программирования фонтанного контроллера discolux Fx2. 08 Авг 2015 18:01 #37
|
Наш веб программист посмотрел и сказал что ничего сложного в коде не видит, только надо знать за что вызываемые функции контроллера fx2 отвечают. Я надеюсь если он вам звонить будет при настройке фонтана то вы его проконсультируете. Как обстоят дела с гарантией? Оплата?
|
Администратор запретил публиковать записи гостям.
|
Пример программирования фонтанного контроллера discolux Fx2. 08 Авг 2015 18:05 #38
|
Еще такой вопрос у нас сейчас имеется контроллер owen для запуска по расписанию фонтана и небольшая завязка идет на кнопки и управления задвижками. Как обстоят дела с расписанием запуска в контроллере, как настроить дату и время?
|
Администратор запретил публиковать записи гостям.
|