Вход

Регистрация
Главная
 

 

Пиротехнические пульты, пиротехническое оборудование
и пиротехника
Pyro Alex RF 48
Open Pyro SFX 8 D
Open Pyro SFX 10/120
Pyro Man 200 M
Spets 150
Приём заказов на изготовление пиротехнических пультов
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Пиропульты - Электроника Форум » Пиротехническое оборудование » Изготовление пиропультов и таймеров » "32х канальный програмируемый Sequencer" (На базе Arduino.)
"32х канальный програмируемый Sequencer"
alexval2007Дата: Пятница, 27.08.2010, 04:11 | Сообщение # 1
Электро воспламенитель
Группа: Администраторы
Сообщений: 659
Награды: 7
Репутация: 7
Статус: Offline
На буржуйском форуме выпросил код секвенсора на базе контролера Arduino вот собственно сам проект и схемка которую я нарисовал к нему.
вот схема

А это код для Arduino временные задержки правим вручную под себя и заливаем в контролер по USB
Код доработал но все равно остались еще косяки в ближайшее время доведу до ума.
**************************************************************************************
/* "24CH Programmable Sequencer". On the basis of Arduino the controler. Author RESET.
Optimized the program alexval2006. 27.08.2010 V1.0.
*/
int INDICATOR = 13; // choose the pin for power indicator
int CH1 = 0; // choose the pin for CH1
int CH2 = 1; // choose the pin for CH2
int CH3 = 2; // choose the pin for CH3
int CH4 = 3; // choose the pin for CH4
int CH5 = 4; // choose the pin for CH5
int CH6 = 5; // choose the pin for CH6
int CH7 = 6; // choose the pin for CH7
int CH8 = 7; // choose the pin for CH8
int CH9 = 8; // choose the pin for CH9
int CH10 = 9; // choose the pin for CH10
int CH11 = 10; // choose the pin for CH11
int CH12 = 11; // choose the pin for CH12
int RELAY = 12; // choose the pin for RELAY
int BUTTON = 14; // choose the input pin (for a pushbutton)
int val = 0; // variable for reading the pin status
//******************************************************************************************************
// Constants which need to be changed to the user.
#define CueInterval 1000 // Time interval between inclusion of Cues, 2 seconds.
#define CueHIGH 500 // Time of a starting impulse for igniters, 500ms.
//******************************************************************************************************
// Initialization of ports of input / output.
void setup(){
pinMode(INDICATOR, OUTPUT); // declare INDICATOR as output
pinMode(CH1, OUTPUT); // declare CH1 as output
pinMode(CH2, OUTPUT); // declare CH2 as output
pinMode(CH3, OUTPUT); // declare CH3 as output
pinMode(CH4, OUTPUT); // declare CH4 as output
pinMode(CH5, OUTPUT); // declare CH5 as output
pinMode(CH6, OUTPUT); // declare CH6 as output
pinMode(CH7, OUTPUT); // declare CH7 as output
pinMode(CH8, OUTPUT); // declare CH8 as output
pinMode(CH9, OUTPUT); // declare CH9 as output
pinMode(CH10, OUTPUT); // declare CH10 as output
pinMode(CH11, OUTPUT); // declare CH11 as output
pinMode(CH12, OUTPUT); // declare CH12 as output
pinMode(RELAY, OUTPUT); // declare RELAY as output
pinMode(BUTTON, INPUT); // declare pushbutton as input
digitalWrite(BUTTON, HIGH); // I engage tightening resistor.
// We switch off all ports just in case from failures though they and are switched off by default.
digitalWrite(CH1, LOW); // turn CH1 OFF
digitalWrite(CH2, LOW); // turn CH2 OFF
digitalWrite(CH3, LOW); // turn CH3 OFF
digitalWrite(CH4, LOW); // turn CH4 OFF
digitalWrite(CH5, LOW); // turn CH5 OFF
digitalWrite(CH6, LOW); // turn CH6 OFF
digitalWrite(CH7, LOW); // turn CH7 OFF
digitalWrite(CH8, LOW); // turn CH8 OFF
digitalWrite(CH9, LOW); // turn CH9 OFF
digitalWrite(CH10, LOW); // turn CH10 OFF
digitalWrite(CH11, LOW); // turn CH11 OFF
digitalWrite(CH12, LOW); // turn CH12 OFF
digitalWrite(RELAY, LOW); // turn RELAY OFF
digitalWrite(INDICATOR, LOW); // turn INDICATOR OFF
}

void loop(){ // The basic program cycle
val = digitalRead(BUTTON); // read input value
if (val == LOW) { // check the input state
digitalWrite(INDICATOR, HIGH); // turn INDICATOR on
//*****************************************************************************************************//
// ON bank for Cue 1-12
//*****************************************************************************************************//
// Cue 1
digitalWrite(CH1, HIGH); // sets CH1 on
delay(CueHIGH); // Time of a starting impulse for igniters
digitalWrite(CH1, LOW); // sets CH1 off
delay(CueInterval); // Time interval between inclusion of Cues
// Cue 2
digitalWrite(CH2, HIGH); // sets CH2 on
delay(CueHIGH); // Time of a starting impulse for igniters
digitalWrite(CH2, LOW); // sets CH2 off
delay(CueInterval); // Time interval between inclusion of Cues
// Cue 3
digitalWrite(CH3, HIGH); // sets CH3 on
delay(CueHIGH); // Time of a starting impulse for igniters
digitalWrite(CH3, LOW); // sets CH3 off
delay(CueInterval); // Time interval between inclusion of Cues
// Cue 4
digitalWrite(CH4, HIGH); // sets CH4 on
delay(CueHIGH); // Time of a starting impulse for igniters
digitalWrite(CH4, LOW); // sets CH4 off
delay(CueInterval); // Time interval between inclusion of Cues
// Cue 5
digitalWrite(CH5, HIGH); // sets CH5 on
delay(CueHIGH); // Time of a starting impulse for igniters
digitalWrite(CH5, LOW); // sets CH5 off
delay(CueInterval); // Time interval between inclusion of Cues
// Cue 6
digitalWrite(CH6, HIGH); // sets CH6 on
delay(CueHIGH); // Time of a starting impulse for igniters
digitalWrite(CH6, LOW); // sets CH6 off
delay(CueInterval); // Time interval between inclusion of Cues
// Cue 7
digitalWrite(CH7, HIGH); // sets CH7 on
delay(CueHIGH); // Time of a starting impulse for igniters
digitalWrite(CH7, LOW); // sets CH7 off
delay(CueInterval); // Time interval between inclusion of Cues
// Cue 8
digitalWrite(CH8, HIGH); // sets CH8 on
delay(CueHIGH); // Time of a starting impulse for igniters
digitalWrite(CH8, LOW); // sets CH8 off
delay(CueInterval); // Time interval between inclusion of Cues
// Cue 9
digitalWrite(CH9, HIGH); // sets CH9 on
delay(CueHIGH); // Time of a starting impulse for igniters
digitalWrite(CH9, LOW); // sets CH9 off
delay(CueInterval); // Time interval between inclusion of Cues
// Cue 10
digitalWrite(CH10, HIGH); // sets CH10 on
delay(CueHIGH); // Time of a starting impulse for igniters
digitalWrite(CH10, LOW); // sets CH10 off
delay(CueInterval); // Time interval between inclusion of Cues
// Cue 11
digitalWrite(CH11, HIGH); // sets CH11 on
delay(CueHIGH); // Time of a starting impulse for igniters
digitalWrite(CH11, LOW); // sets CH11 off
delay(CueInterval); // Time interval between inclusion of Cues
// Cue 12
digitalWrite(CH12, HIGH); // sets CH12 on
delay(CueHIGH); // Time of a starting impulse for igniters
digitalWrite(CH12, LOW); // sets CH12 off
//*****************************************************************************************************//
// ON bank for Cue 13-24, OFF bank for Cue 1-12.
//*****************************************************************************************************//
digitalWrite(RELAY, HIGH); // sets RELAY on
delay(CueInterval); // Time interval between inclusion of Cues
// Cue 13
digitalWrite(CH1, HIGH); // sets CH13 on
delay(CueHIGH); // Time of a starting impulse for igniters
digitalWrite(CH1, LOW); // sets CH13 off
delay(CueInterval); // Time interval between inclusion of Cues
// Cue 14
digitalWrite(CH2, HIGH); // sets CH14 on
delay(CueHIGH); // Time of a starting impulse for igniters
digitalWrite(CH2, LOW); // sets CH14 off
delay(CueInterval); // Time interval between inclusion of Cues
// Cue 15
digitalWrite(CH3, HIGH); // sets CH15 on
delay(CueHIGH); // Time of a starting impulse for igniters
digitalWrite(CH3, LOW); // sets CH15 off
delay(CueInterval); // Time interval between inclusion of Cues
// Cue 16
digitalWrite(CH4, HIGH); // sets CH16 on
delay(CueHIGH); // Время пускового импульса на воспламенители
digitalWrite(CH4, LOW); // sets CH16 off
delay(CueInterval); // Time interval between inclusion of Cues
// Cue 17
digitalWrite(CH5, HIGH); // sets CH17 on
delay(CueHIGH); // Time of a starting impulse for igniters
digitalWrite(CH5, LOW); // sets CH17 off
delay(CueInterval); // Time interval between inclusion of Cues
// Cue 18
digitalWrite(CH6, HIGH); // sets CH18 on
delay(CueHIGH); // Time of a starting impulse for igniters
digitalWrite(CH6, LOW); // sets CH18 off
delay(CueInterval); // Time interval between inclusion of Cues
// Cue 19
digitalWrite(CH7, HIGH); // sets CH19 on
delay(CueHIGH); // Time of a starting impulse for igniters
digitalWrite(CH7, LOW); // sets CH19 off
delay(CueInterval); // Time interval between inclusion of Cues
// Cue 20
digitalWrite(CH8, HIGH); // sets CH20 on
delay(CueHIGH); // Time of a starting impulse for igniters
digitalWrite(CH8, LOW); // sets CH20 off
delay(CueInterval); // Time interval between inclusion of Cues
// Cue 21
digitalWrite(CH9, HIGH); // sets CH21 on
delay(CueHIGH); // Time of a starting impulse for igniters
digitalWrite(CH9, LOW); // sets CH21 off
delay(CueInterval); // Time interval between inclusion of Cues
// Cue 22
digitalWrite(CH10, HIGH); // sets CH22 on
delay(CueHIGH); // Time of a starting impulse for igniters
digitalWrite(CH10, LOW); // sets CH22 off
delay(CueInterval); // Time interval between inclusion of Cues
// Cue 23
digitalWrite(CH11, HIGH); // sets CH23 on
delay(CueHIGH); // Time of a starting impulse for igniters
digitalWrite(CH11, LOW); // sets CH23 off
delay(CueInterval); // Time interval between inclusion of Cues
// Cue 24
digitalWrite(CH12, HIGH); // sets CH24 on
delay(CueHIGH); // Time of a starting impulse for igniters
digitalWrite(CH12, LOW); // sets CH24 off
delay(CueInterval); // Time interval between inclusion of Cues
//*****************************************************************************************************//
// Return to the first bank, OFF bank for Cue 13-34, ON bank for Cue 1-12. //
//*****************************************************************************************************//
}
else{
digitalWrite(INDICATOR, LOW); // turn INDICATOR OFF
digitalWrite(CH1, LOW); // turn CH1 OFF
digitalWrite(CH2, LOW); // turn CH2 OFF
digitalWrite(CH3, LOW); // turn CH3 OFF
digitalWrite(CH4, LOW); // turn CH4 OFF
digitalWrite(CH5, LOW); // turn CH5 OFF
digitalWrite(CH6, LOW); // turn CH6 OFF
digitalWrite(CH7, LOW); // turn CH7 OFF
digitalWrite(CH8, LOW); // turn CH8 OFF
digitalWrite(CH9, LOW); // turn CH9 OFF
digitalWrite(CH10, LOW); // turn CH10 OFF
digitalWrite(CH11, LOW); // turn CH11 OFF
digitalWrite(CH12, LOW); // turn CH12 OFF
digitalWrite(RELAY, LOW); // turn RELAY OFF
}
}

 
alexval2007Дата: Суббота, 28.08.2010, 23:44 | Сообщение # 2
Электро воспламенитель
Группа: Администраторы
Сообщений: 659
Награды: 7
Репутация: 7
Статус: Offline
Переработал код потому что код написанный интуристом RESET полное ггг даже с моими доработками потому было принято решение написать с нуля

//"32CH Programmable Sequencer". On the basis of Arduino the controler. The author of idea RESET.
//The author of the program alexval2006. 29.08.2010 V1.1.
//******************************************************************************************************
// Constants which need to be changed to the user.
#define CueInterval 1000 // Time interval between inclusion of Cues, 1 seconds.
#define CueHIGH 500 // Time of a starting impulse for igniters, 500ms.
//******************************************************************************************************
int RELAY = 18; // choose the pin for RELAY
int BUTTON = 19; // choose the input pin (for a pushbutton)
int val = 0; // variable for reading the pin status
int lnumber=18; // cues+2=our quantity of Cues. 16+2=18
int i; // a variable of cycles

void setup(){ // Initialization of ports of input / output.
for (i=2; i < lnumber; i++){
pinMode(i,OUTPUT); //We adjust ports on a conclusion. Ports aren't necessary to 0 and 1 us at reset on them HIGH level.
}
pinMode(RELAY, OUTPUT); // declare RELAY as output
pinMode(BUTTON, INPUT); // declare pushbutton as input
digitalWrite(BUTTON, HIGH); // I engage tightening resistor.
}

void loop(){ // The basic program cycle
val = digitalRead(BUTTON); // read input value
if (val == LOW) { // check the input state
// bank A for Cue 1-16
for (i=2; i < lnumber; i++){
digitalWrite(i,HIGH);//sets Cue ON
delay(CueHIGH); // Time of a starting impulse for igniters.
digitalWrite(i,LOW);//sets Cue OFF
delay(CueInterval); // Time interval between inclusion of Cues.
}
// bank B for Cue 17-32
digitalWrite(RELAY, HIGH); // sets RELAY on
for (i=2; i < lnumber; i++){
digitalWrite(i,HIGH);//sets Cue ON
delay(CueHIGH); // Time of a starting impulse for igniters.
digitalWrite(i,LOW);//sets Cue OFF
delay(CueInterval); // Time interval between inclusion of Cues.
}
digitalWrite(RELAY, LOW); // turn RELAY OFF
}
}

Схема для него тоже новая

PLATA FT232R MOD
доки по FTDI
98,63гривен

Прикрепления: sequencer_v1_1.zip (1.21 Mb)
 
AsttoxaДата: Воскресенье, 29.08.2010, 19:56 | Сообщение # 3
Рядовой
Группа: Проверенные
Сообщений: 1
Награды: 1
Репутация: 0
Статус: Offline
Вот последний код:
Полностью работоспособный.

//"32CH Programmable Sequencer". On the basis of Arduino the controler. The author of idea RESET.
//The author of the program alexval2007, Asstoxa. 29.08.2010 V1.2.
//******************************************************************************************************
// Constants which need to be changed to the user.
#define CueHIGH 500 // Time of a starting impulse for igniters, 500ms.
#define Cue1 50
#define Cue2 100
#define Cue3 10
#define Cue4 200
#define Cue5 10
#define Cue6 100
#define Cue7 1000
#define Cue8 100
#define Cue9 10
#define Cue10 100
#define Cue11 10
#define Cue12 100
#define Cue13 10
#define Cue14 100
#define Cue15 10
#define Cue16 100
#define Cue17 20
#define Cue18 200
#define Cue19 20
#define Cue20 200
#define Cue21 20
#define Cue22 200
#define Cue23 20
#define Cue24 200
#define Cue25 20
#define Cue26 200
#define Cue27 20
#define Cue28 200
#define Cue29 20
#define Cue30 200
#define Cue31 20
#define Cue32 200
//******************************************************************************************************
int RELAY = 18; // choose the pin for RELAY
int BUTTON = 19; // choose the input pin (for a pushbutton)
int val = 0; // variable for reading the pin status
int CueNumber=16; // quantity of Cues.
int i,j; // a variables of cycles
int CueDelay[2][16] = {{ Cue1, Cue2, Cue3, Cue4, Cue5, Cue6, Cue7, Cue8, Cue9, Cue10, Cue11, Cue12, Cue13, Cue14, Cue15, Cue16},
{Cue17, Cue18, Cue19, Cue20, Cue21, Cue22, Cue23, Cue24, Cue25, Cue26, Cue27, Cue28, Cue29, Cue30, Cue31, Cue32}};

void setup(){ // Initialization of ports of input / output.
for (i=2; i < CueNumber+2; i++){
pinMode(i,OUTPUT); //We adjust ports on a conclusion. Ports aren't necessary to 0 and 1 us at reset on them HIGH level.
}
pinMode(RELAY, OUTPUT); // declare RELAY as output
pinMode(BUTTON, INPUT); // declare pushbutton as input
digitalWrite(BUTTON, HIGH); // I engage tightening resistor.
}

void loop(){
val = digitalRead(BUTTON);
if (val == LOW){
for (j=0; j < 2; j++){
for (i=2; i < CueNumber+2; i++){
digitalWrite(i,HIGH);//sets Cue ON
delay(CueHIGH); // Time of a starting impulse for igniters.
digitalWrite(i,LOW);//sets Cue OFF
delay(CueDelay[j][i-2]); // Time interval between inclusion of Cues.
}
digitalWrite(RELAY,HIGH); // банк 2 вкл
delay(500);
// задержка на переключение реле
}
digitalWrite(RELAY,LOW); // банк 1 вкл, банк 2 выкл.
delay(500);
// задержка на переключение реле.
}
}

Сообщение отредактировал Asttoxa - Понедельник, 30.08.2010, 01:13
 
alexval2007Дата: Пятница, 03.09.2010, 19:35 | Сообщение # 4
Электро воспламенитель
Группа: Администраторы
Сообщений: 659
Награды: 7
Репутация: 7
Статус: Offline
У меня есть мысли о создании приложения для PC для удобного редактирования задержек и записи их в микроконтроллер в его энергонезависимую память EEPROM. wink
 
sTsДата: Суббота, 04.09.2010, 13:25 | Сообщение # 5
Подполковник
Группа: Проверенные
Сообщений: 133
Награды: 7
Репутация: 0
Статус: Offline
Вещь!
А прозвонка каналов возможно только попарно или можно все 32 светодиода поставить?
 
alexval2007Дата: Суббота, 04.09.2010, 15:58 | Сообщение # 6
Электро воспламенитель
Группа: Администраторы
Сообщений: 659
Награды: 7
Репутация: 7
Статус: Offline
Да там надо схему изменить и все будет
 
MRACOBESSS-Дата: Суббота, 04.09.2010, 17:34 | Сообщение # 7
Рядовой
Группа: Проверенные
Сообщений: 11
Награды: 1
Репутация: 0
Статус: Offline
скажу от лица всего простого народа:
кончайте кормить кодами и программами для высоколобых!!! даешь готовое изделие за недорого!!!
 
alexval2007Дата: Воскресенье, 05.09.2010, 10:43 | Сообщение # 8
Электро воспламенитель
Группа: Администраторы
Сообщений: 659
Награды: 7
Репутация: 7
Статус: Offline
Ну совсем недорого невыйдет пощитай скоко деталий а потом это еще и собрать в кучу а это все время. Можно сделать конструктор набор основных деталей ну там печатные платы прошитый контролер может еще чего а полевики резисторы и светодиоды на совести обладателя этого набора wink вобщем чтонибудь придумать можно
 
Open_PyroДата: Четверг, 09.09.2010, 02:26 | Сообщение # 9
Генерал-майор
Группа: Проверенные
Сообщений: 390
Награды: 3
Репутация: 6
Статус: Offline
MRACOBESSS-,

На счет готового изделия не вопрос , но вот параметр "недорого" для него задан неверно. Если можно то более конкретно чего ждет "народ".
Сейчас закончил новую версию радио пульта на 10 каналов со встроенным Sequencer. В ближайшее время выложу подробную информацию. Может быть тебя такой простой пульт заинтересует. wink

alexval2007,
Погоняй схему в протеусе !!! Ты делаешь подобие матрицы 16*2 и она у тебя без диодов! Возможны самопроизвольные запуски соседних каналов.
Еще рекомендую заменить реле на полевые транзисторы и сделать матрицу 8*4 =32 с использованием всего 12 выводов микроконтроллера против 18 которые задействованы сейчас.

 
MRACOBESSS-Дата: Четверг, 09.09.2010, 17:01 | Сообщение # 10
Рядовой
Группа: Проверенные
Сообщений: 11
Награды: 1
Репутация: 0
Статус: Offline
Open_Pyro
нет, спасибо, я уже "упакован". просто я имел в виду что очень малому количеству людей интересен процесс сборки с полного нуля. А конечное законченное изделие обычно дороговато. В этом плане Санин вариант производства конструктора мне кажется оптимальным. Дешевле и проще для пользователя я не вижу другого варианта.
 
alexval2007Дата: Пятница, 10.09.2010, 16:11 | Сообщение # 11
Электро воспламенитель
Группа: Администраторы
Сообщений: 659
Награды: 7
Репутация: 7
Статус: Offline
Quote (Open_Pyro)
alexval2007,
Погоняй схему в протеусе !!! Ты делаешь подобие матрицы 16*2 и она у тебя без диодов! Возможны самопроизвольные запуски соседних каналов.
Еще рекомендую заменить реле на полевые транзисторы и сделать матрицу 8*4 =32 с использованием всего 12 выводов микроконтроллера против 18 которые задействованы сейчас.

принято к сведению посмотрю как будет время что можно сделать
 
alexval2007Дата: Понедельник, 01.11.2010, 18:47 | Сообщение # 12
Электро воспламенитель
Группа: Администраторы
Сообщений: 659
Награды: 7
Репутация: 7
Статус: Offline
Новое творчество на сдвиговом регистре недописанное но я обязательно доделаю работает вывод на регистры состояния массива но нет пока что вывода по времени нужно разобраться с с интервалами времени
схема


//"32CH Programmable Sequencer". On the basis of Arduino the controler.
//The author of the program alexval2007, Asstoxa. 1.10.2010 V2.
//******************************************************************************************************
// Constants which need to be changed to the user.
#define CueHIGH 500 // Time of a starting impulse for igniters, 500ms.
#define Cue1 50
#define Cue2 100
#define Cue3 10
#define Cue4 200
#define Cue5 10
#define Cue6 100
#define Cue7 1000
#define Cue8 100
#define Cue9 10
#define Cue10 100
#define Cue11 10
#define Cue12 100
#define Cue13 10
#define Cue14 100
#define Cue15 10
#define Cue16 100
#define Cue17 20
#define Cue18 200
#define Cue19 20
#define Cue20 200
#define Cue21 20
#define Cue22 200
#define Cue23 20
#define Cue24 200
#define Cue25 20
#define Cue26 200
#define Cue27 20
#define Cue28 200
#define Cue29 20
#define Cue30 200
#define Cue31 20
#define Cue32 200
//******************************************************************************************************
int latchPin = 4; // Подключаем вывод к ST_CP of 74HC595
int clockPin = 2; // Подключаем вывод к SH_CP of 74HC595
int dataPin = 3; // Подключаем вывод к DS of 74HC595
int BUTTON = 19; // choose the input pin (for a pushbutton)
//Обявляю переменные и массивы
byte dataRED; // Обявляю глобальные переменные массив зеленых светодиодов
byte dataGREEN; // Обявляю глобальные переменные массив красных светодиодов
byte dataArrayRED[10]; // Обявляю битовый массив красных светодиодов из 10 элементов
byte dataArrayGREEN[10]; // Обявляю битовый массив зелёных светодиодов из 10 элементов
int val = 0; // variable for reading the pin status
int CueNumber=16; // quantity of Cues.
int i,j; // a variables of cycles
int CueDelay[2][16] = {{ Cue1, Cue2, Cue3, Cue4, Cue5, Cue6, Cue7, Cue8, Cue9, Cue10, Cue11, Cue12, Cue13, Cue14, Cue15, Cue16},
{Cue17, Cue18, Cue19, Cue20, Cue21, Cue22, Cue23, Cue24, Cue25, Cue26, Cue27, Cue28, Cue29, Cue30, Cue31, Cue32}};

void setup(){ // Инициализация
pinMode(BUTTON, INPUT); // Настраиваю Pin на ввод
digitalWrite(BUTTON, HIGH); // Включаю подтягивающий резистор по входу к лог 1
pinMode(latchPin, OUTPUT); // Настраиваем портына вывод
Serial.begin(9600); // Скорость обмена по UART
// Записую все состояния элементов Массива
dataArrayRED[0] = 0xFF; //11111111
dataArrayRED[1] = 0xFE; //11111110
dataArrayRED[2] = 0xFC; //11111100
dataArrayRED[3] = 0xF8; //11111000
dataArrayRED[4] = 0xF0; //11110000
dataArrayRED[5] = 0xE0; //11100000
dataArrayRED[6] = 0xC0; //11000000
dataArrayRED[7] = 0x80; //10000000
dataArrayRED[8] = 0x00; //00000000
dataArrayRED[9] = 0xFF; //11111111

dataArrayGREEN[0] = 0xFF; //11111111
dataArrayGREEN[1] = 0x00; //01111111
dataArrayGREEN[2] = 0x00; //00111111
dataArrayGREEN[3] = 0x1F; //00011111
dataArrayGREEN[4] = 0x0F; //00001111
dataArrayGREEN[5] = 0x07; //00000111
dataArrayGREEN[6] = 0x03; //00000011
dataArrayGREEN[7] = 0x00; //00000001
dataArrayGREEN[8] = 0x00; //00000000
dataArrayGREEN[9] = 0x07; //00000111
}

void loop(){ // Основной цикл
val = digitalRead(BUTTON); // Обработка состояния пускового входного сигнала
if (val == LOW){
/*
for (j=0; j < 2; j++){
for (i=2; i < CueNumber+2; i++){
digitalWrite(i,HIGH); // Установить Высокий уровень на канале
delay(CueHIGH); // Время запускающегося импульса на воспламенителей.
digitalWrite(i,LOW); // Установить Низкий уровень на канале
delay(CueDelay[j][i-2]); // Временной интервал между включением Сигналов.
}
}
*/
for (j = 0; j < 10; j++){ //Цикл перебора элементов массива из 10 элементов
dataRED = dataArrayRED[j]; //присваиваем переменной dataRED состояние j элемента массива красных светодиодов
dataGREEN = dataArrayGREEN[j]; //присваиваем переменной dataGREEN состояние j элемента массива зелёных светодиодов
digitalWrite(latchPin, 0); //Подготавливаем регистр к приёму данных
//Выводим данные из масивов в сдвиговые регистры
shiftOut(dataPin, clockPin, dataGREEN); // данные для зеленых светодиодов
shiftOut(dataPin, clockPin, dataRED); // данные для красных светодиодов
digitalWrite(latchPin, 1); //Защелкиваем данные в регистре
delay(300); // Задержка перебора данных для вывода из массива на регистр
}

}
}

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< pinState= 1;
}else{
pinState= 0;
}
digitalWrite(myDataPin, pinState);//Устанавливает pin данных в ВЫСОКИЙ или НИЗКОЕ в зависимости от pinState
digitalWrite(myClockPin, 1);//установить бит clock pin в лог 1
digitalWrite(myDataPin, 0);//обнулите контакт данных после сдвига, чтобы предотвратить выход за край
}
digitalWrite(myClockPin, 0);// остановить сдвиг
}

 
Open_PyroДата: Понедельник, 01.11.2010, 22:15 | Сообщение # 13
Генерал-майор
Группа: Проверенные
Сообщений: 390
Награды: 3
Репутация: 6
Статус: Offline
О это уже по круче up !!!

Схемотехника очень нравится, но зачем сдвиговые регистры разделять по палам ?

Программный код осталось только просмотреть чтобы ошибок не было.

 
Open_PyroДата: Вторник, 02.11.2010, 02:07 | Сообщение # 14
Генерал-майор
Группа: Проверенные
Сообщений: 390
Награды: 3
Репутация: 6
Статус: Offline
Что-то не правильно с последним абзацем кода:

Quote
if (myDataOut & (1< pinState= 1;
}else{
pinState= 0;
}
digitalWrite(myDataPin, pinState);//Устанавливает pin данных в ВЫСОКИЙ или НИЗКОЕ в зависимости от pinState
digitalWrite(myClockPin, 1);//установить бит clock pin в лог 1
digitalWrite(myDataPin, 0);//обнулите контакт данных после сдвига, чтобы предотвратить выход за край
}
digitalWrite(myClockPin, 0);// остановить сдвиг
}

Проект не компилится.

 
Open_PyroДата: Вторник, 02.11.2010, 03:09 | Сообщение # 15
Генерал-майор
Группа: Проверенные
Сообщений: 390
Награды: 3
Репутация: 6
Статус: Offline
Вот код хотя бы в читаемом виде.
Понятно что сырой до ужаса. Его еще делать и делать.
Уже компилиируется нормально, но не проверял по тому что не на чем.

В прикрепленном файле исходный код проекта.

Code


//"32CH Programmable Sequencer". On the basis of Arduino the controler.   
//The author of the program alexval2007, Asstoxa , Open_Pyro. 2.10.2010 V3.   

//******************************************************************************************************   
// Constants which need to be changed to the user.   
    #define CueHIGH 500 // Time of a starting impulse for igniters, 500ms.   
      
    #define Cue1 50   
    #define Cue2 100   
    #define Cue3 10   
    #define Cue4 200   
    #define Cue5 10   
    #define Cue6 100   
    #define Cue7 1000   
    #define Cue8 100   
    #define Cue9 10   
    #define Cue10 100   
    #define Cue11 10   
    #define Cue12 100   
    #define Cue13 10   
    #define Cue14 100   
    #define Cue15 10   
    #define Cue16 100   
    #define Cue17 20   
    #define Cue18 200   
    #define Cue19 20   
    #define Cue20 200   
    #define Cue21 20   
    #define Cue22 200   
    #define Cue23 20   
    #define Cue24 200   
    #define Cue25 20   
    #define Cue26 200   
    #define Cue27 20   
    #define Cue28 200   
    #define Cue29 20   
    #define Cue30 200   
    #define Cue31 20   
    #define Cue32 200   
//******************************************************************************************************   
    int latchPin = 4;        // Подключаем вывод к ST_CP of 74HC595   
    int clockPin = 2;       // Подключаем вывод к SH_CP of 74HC595   
    int dataPin  = 3;       // Подключаем вывод к DS of 74HC595   
    int BUTTON   = 19;   // choose the input pin (for a pushbutton)
      
//Обявляю переменные и массивы   
    byte dataRED;                    // Обявляю глобальные переменные массив зеленых светодиодов   
    byte dataGREEN;                // Обявляю глобальные переменные массив красных светодиодов   
    byte dataArrayRED[10];      // Обявляю битовый массив красных светодиодов из 10 элементов   
    byte dataArrayGREEN[10];  // Обявляю битовый массив зелёных светодиодов из 10 элементов   
    int  val = 0;                       // variable for reading the pin status   
    int  CueNumber=16;          // quantity of Cues.   
    int  i,j;                    // a variables of cycles   
    int  CueDelay[2][16] = {{ Cue1, Cue2, Cue3, Cue4, Cue5, Cue6, Cue7, Cue8, Cue9, Cue10, Cue11, Cue12, Cue13, Cue14, Cue15, Cue16},   
{Cue17, Cue18, Cue19, Cue20, Cue21, Cue22, Cue23, Cue24, Cue25, Cue26, Cue27, Cue28, Cue29, Cue30, Cue31, Cue32}};   

//******************************************************************************************************   
// Инициализация   
    void setup(){   
      pinMode(BUTTON, INPUT);    // Настраиваю Pin на ввод   
      digitalWrite(BUTTON, HIGH); // Включаю подтягивающий резистор по входу к лог 1   
      pinMode(latchPin, OUTPUT);  // Настраиваем портына вывод   
      Serial.begin(9600);              // Скорость обмена по UART   

      // Записую все состояния элементов Массива   
      dataArrayRED[0] = 0xFF; //11111111   
      dataArrayRED[1] = 0xFE; //11111110   
      dataArrayRED[2] = 0xFC; //11111100   
      dataArrayRED[3] = 0xF8; //11111000   
      dataArrayRED[4] = 0xF0; //11110000   
      dataArrayRED[5] = 0xE0; //11100000   
      dataArrayRED[6] = 0xC0; //11000000   
      dataArrayRED[7] = 0x80; //10000000   
      dataArrayRED[8] = 0x00; //00000000   
      dataArrayRED[9] = 0xFF; //11111111   

      // dataArrayRED[9] = 0b11111111; - Скорее всего проще применить этот формат записи !

      dataArrayGREEN[0] = 0xFF; //11111111   
      dataArrayGREEN[1] = 0x00; //01111111   
      dataArrayGREEN[2] = 0x00; //00111111   
      dataArrayGREEN[3] = 0x1F; //00011111   
      dataArrayGREEN[4] = 0x0F; //00001111   
      dataArrayGREEN[5] = 0x07; //00000111   
      dataArrayGREEN[6] = 0x03; //00000011   
      dataArrayGREEN[7] = 0x00; //00000001   
      dataArrayGREEN[8] = 0x00; //00000000   
      dataArrayGREEN[9] = 0x07; //00000111   
    }   
      
//******************************************************************************************************   
// Основной цикл
    void loop(){    
      val = digitalRead(BUTTON); // Обработка состояния пускового входного сигнала   
      if (val == LOW){   
/*   
      for (j=0; j < 2; j++){   
        for (i=2; i < CueNumber+2; i++){   
          digitalWrite(i,HIGH);        // Установить Высокий уровень на канале   
          delay(CueHIGH);            // Время запускающегося импульса на воспламенителей.   
          digitalWrite(i,LOW);         // Установить Низкий уровень на канале   
          delay(CueDelay[j][i-2]); // Временной интервал между включением Сигналов.   
        }   
      }   
*/
      // Цикл перебора элементов массива из 10 элементов   
      for (j = 0; j < 10; j++){          
        dataRED = dataArrayRED[j];         // присваиваем переменной dataRED состояние j элемента массива красных светодиодов   
        dataGREEN = dataArrayGREEN[j]; // присваиваем переменной dataGREEN состояние j элемента массива зелёных светодиодов   
        digitalWrite(latchPin, 0);               // Подготавливаем регистр к приёму данных
        
        // Выводим данные из масивов в сдвиговые регистры   
        shiftOut(dataPin, clockPin, dataGREEN); // данные для зеленых светодиодов   
        shiftOut(dataPin, clockPin, dataRED);     // данные для красных светодиодов   
        digitalWrite(latchPin, 1);                       // Защелкиваем данные в регистре   
        delay(300);                    // Задержка перебора данных для вывода из массива на регистр   
      }       
    }   
}   

//******************************************************************************************************
//Основная программа вывода на сдвиговый регистр   
    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 >> i) & 0x01 ) pinState= 1;    
        else pinState= 0;   
     
        digitalWrite(myDataPin, pinState); // Устанавливает pin данных в ВЫСОКИЙ или НИЗКОЕ в зависимости от pinState   
        digitalWrite(myClockPin, 1);          // установить бит clock pin в лог 1   
        digitalWrite(myDataPin, 0);           // обнулите контакт данных после сдвига, чтобы предотвратить выход за край   
      }   
      digitalWrite(myClockPin, 0);            // остановить сдвиг   
}
//******************************************************************************************************

Прикрепления: _32_sic.pde (7.2 Kb)
 
Пиропульты - Электроника Форум » Пиротехническое оборудование » Изготовление пиропультов и таймеров » "32х канальный програмируемый Sequencer" (На базе Arduino.)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:


Rambler's Top100 Пиротехника, салюты, фейерверки. Яндекс цитирования
www.alexval2007.ucoz.ru © 2008