нужно создать разработать схему и плату для управление 12ю каналами через оптроны если в кратце нужна ардуино мини про 3.3v но с небольшим изменением . нужно добавить 12 smd резисторов и 12 оптронов добавить пины для подключения корпусных 2х кнопок и добавить линейный стабилизатор3.3 вольта типо такого, со штекером mini usb добавить пины для подключения Кабель USB RS232 так же добавить отверстия под IC 2262 связав кнопки с дорожками под корпусные кнопки пример - разработывали плату шилд для мега2560-[/url] url картинки[/IMG] https://ibb.co/vs01VX9 код работающий на макетной плате - Код (C++): int macros1_time = 1000; //длительность работы первого макроса int macros2_time = 200; //длительность работы второго макроса int macros2_time_max = 2000; // максимальнач длительность работы второго макроса (регилируется удержанием первой кнопки) int timer; #define butt1 2 //пин первой кнопки #define butt2 3 //пин второй кнопки boolean buttState[2],buttFlag[2],butt; byte opt[12] = {4,5,6,7,8,9,10,11,12,13,14,15}; //номера пинов оптопар в порядке срабатывания void setup() { for (byte i = 0; i < 12; i++) { pinMode(opt[i],OUTPUT); } pinMode(butt1,INPUT_PULLUP); pinMode(butt2,INPUT_PULLUP); } void loop() { delay(1); butt = !digitalRead(butt1); if (butt == 1 && buttFlag[0] == 0) { buttFlag[0] = 1; buttState[0] =! buttState[0]; } else if (butt == 0 && buttFlag[0] == 1) { buttFlag[0]=0; macros1(); //запускает макрос первой кнопки } butt = !digitalRead(butt2); if (butt == 1 && buttFlag[1] == 0) { buttFlag[1] = 1; buttState[1] =! buttState[1]; macros2(); //запускает второй макрос } else if (butt == 0 && buttFlag[1] == 1) { buttFlag[1]=0; } if (buttFlag[0]==1) { timer++; if (timer>2000) { macros2_time+=30; timer=0; if (macros2_time>macros2_time_max) { macros2_time = 200; } } } } void macros1() { for (byte i = 0; i < 12; i++) { digitalWrite(opt[i],1); } delay(macros1_time); for (byte i = 0; i < 12; i++) { digitalWrite(opt[i],0); } } void macros2() { for (byte i = 0; i < 12; i++) { digitalWrite(opt[i],1); delay(macros2_time); if (i==11) { digitalWrite(opt[i-1],0); delay(macros2_time); digitalWrite(opt[i],0); } else if (i!=0) { delay(macros2_time); digitalWrite(opt[i-1],0); } } } Ваши предложения в лс