//"32CH Programmable Sequencer". On the basis of Arduino the controler. //The author of the program alexval2007, Asstoxa , Open_Pyro. 2.10.2010 V3. //****************************************************************************************************** #define CueHIGH 500 // Время импульса на воспламенители 500ms. #define Cue1 50 #define Cue2 200 #define Cue3 50 #define Cue4 200 #define Cue5 60 #define Cue6 100 #define Cue7 1000 #define Cue8 100 #define Cue9 10 #define Cue10 10 #define Cue11 10 #define Cue12 10 #define Cue13 10 #define Cue14 10 #define Cue15 10 #define Cue16 10 //****************************************************************************************************** int dataPin = 2; // Подключаем вывод к DS of 74HC595 int latchPin = 3; // Подключаем вывод к ST_CP of 74HC595 int clockPin = 4; // Подключаем вывод к SH_CP of 74HC595 int BUTTON = 19; //Обявляю переменные и массивы byte data; // Обявляю глобальные переменные массива byte dataArray[8]; // Обявляю битовый массив из 8 элементов int val = 0; // перменная состояния кнопки int CueNumber=16; // количество каналов. int x,y,j,i; // переменные цыклов int CueDelay[2][8] = {{ Cue1, Cue2, Cue3, Cue4, Cue5, Cue6, Cue7, Cue8}, {Cue9, Cue10, Cue11, Cue12, Cue13, Cue14, Cue15, Cue16}}; //****************************************************************************************************** // Инициализация void setup(){ pinMode(BUTTON, INPUT); // Настраиваю Pin на ввод digitalWrite(BUTTON, HIGH); // Включаю подтягивающий резистор по входу к лог 1 pinMode(latchPin, OUTPUT); // Настраиваем портына вывод Serial.begin(9600); // Скорость обмена по UART Serial.println("TEST HELLO"); // Записую все состояния элементов Массивов dataArray[0] = 0x01; //00000001 dataArray[1] = 0x02; //00000010 dataArray[2] = 0x04; //00000100 dataArray[3] = 0x08; //00001000 dataArray[4] = 0x10; //00010000 dataArray[5] = 0x20; //00100000 dataArray[6] = 0x40; //01000000 dataArray[7] = 0x80; //10000000 //********************************** digitalWrite(latchPin, 0); // Подготавливаем регистр к приёму данных shiftOut(dataPin, clockPin, 0x00); // данные для зеленых светодиодов shiftOut(dataPin, clockPin, 0x00); // данные я зеленых светодиодов digitalWrite(latchPin, 1); // Защелкиваем данные в регистре delay(50); } //****************************************************************************************************** // Основной цикл void loop(){ val = digitalRead(BUTTON); // Обработка состояния пускового входного сигнала if (val == LOW){ //****************************************************************************************************** // for (x=0; x < 2; x++){ // for (y=2; y < CueNumber; y++){ //********************************** for (y=0; y < 2; y++){ for (j = 0; j < 8; j++){ // Цикл перебора элементов массива из 8 элементов data = dataArray[j]; // присваиваем переменной data состояние j элемента массива //Выводим данные из масивов в сдвиговые регистры delay(CueDelay[y][j]); // Временной интервал между включением Сигналов. digitalWrite(latchPin, 0); // Подготавливаем регистр к приёму данных shiftOut(dataPin, clockPin, data); // данные для массива shiftOut(dataPin, clockPin, data); // данные для массива digitalWrite(latchPin, 1); // Защелкиваем данные в регистре delay(CueHIGH); // Время импульса на воспламенители 500ms. digitalWrite(latchPin, 0); // Подготавливаем регистр к приёму данных shiftOut(dataPin, clockPin, 0x00); // обнуляем shiftOut(dataPin, clockPin, 0x00); // digitalWrite(latchPin, 1); // Защелкиваем данные в регистре delay(50); } } // digitalWrite(y,HIGH); // Установить Высокий уровень на канале // delay(CueHIGH); // Время запускающегося импульса на воспламенителей. // digitalWrite(y,LOW); // Установить Низкий уровень на канале // delay(CueDelay[x][y-2]); // Временной интервал между включением Сигналов. // } // } //****************************************************************************************************** } else{ delay(50); digitalWrite(latchPin, 0); // Подготавливаем регистр к приёму данных shiftOut(dataPin, clockPin, 0x00); // данные для зеленых светодиодов shiftOut(dataPin, clockPin, 0x00); // данные для зеленых светодиодов digitalWrite(latchPin, 1); // Защелкиваем данные в регистре } } //****************************************************************************************************** //Подпрограмма вывода на сдвиговый регистр void shiftOut(int myDataPin, int myClockPin, byte myDataOut){ //Это смещает 8 битов MSB сначала, на нарастающем фронте часов, часы бездействуют низко int i=0; // Обявляю внутреннию переменную int pinState; pinMode(myClockPin, OUTPUT); // Настраиваем на вывод pinMode(myDataPin, OUTPUT); // Настраиваем на вывод digitalWrite(myDataPin, 0); // Записуем в регистр 0 на всякий случай digitalWrite(myClockPin, 0); for (i=7; i>=0; i--){ digitalWrite(myClockPin, 0); if (myDataOut & (1<