Например TDA7294

Форум РадиоКот • Просмотр темы - Хочу сделать секвенсор, есть некоторые вопросы.
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср апр 17, 2024 02:37:15

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 147 ]     ... , , , 6, ,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Хочу сделать секвенсор, есть некоторые вопросы.
СообщениеДобавлено: Чт авг 17, 2017 14:59:32 
Генеральный секретарь МЯУ
Аватар пользователя

Карма: 69
Рейтинг сообщений: 22
Зарегистрирован: Пн сен 03, 2007 18:24:27
Сообщений: 18417
Откуда: Россия. Омск.
Рейтинг сообщения: 0
Brigadir писал(а):
Мои советы Серега не воспринимает, так как совершенно не знает логику работы цифровых микросхем

Нет. Твои советы я не воспринимаю потому что ничего толкового в них нет и быть не может. В лучшем случае подъёбка про детские вопросы и откровения в стиле одного известного капитана. Никакой конкретики там быть не может. Потому что ты отвечаешь даже не задумываясь о сути вопроса. Тебе главное поскорей что-то написать, пусть и фигню полную, лиж бы с умными словами, чтобы выставить себы этаким мудрым знатаком. Мол "долго живу, потому и мудрый" (с)
Есть и другая причина, по которой я твои советы не воспринимаю. На форуме есть множество людей, чьи советы я с удовольствием послушаю. И есть один (всего один, на весь форум), чьи советы мне вообще слушать не хочется, какими бы они ни были. Угадаешь, кто этот человек?

Добавлено after 9 minutes 11 seconds:
Мне не надо знать протокол МИДИ. Я в него никогда не впихивался и не собираюсь. У меня полноценный аппарат, сам по себе играет.

Я про что и говорю. Советы не втему раздаёшь, а у самого ума не хватит, чтобы это сделать. Купил себе детский недосинтезатор, который ещё и играет за тебя и понтуешься при каждом удобном случае.
А я не зная ничего и ничего не умея, возьму и сделаю то, на что тебе ума не хватит даже со знаниями и умениями.
Как-то так.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хочу сделать секвенсор, есть некоторые вопросы.
СообщениеДобавлено: Чт авг 17, 2017 15:03:28 
Друг Кота
Аватар пользователя

Карма: 43
Рейтинг сообщений: 167
Зарегистрирован: Вс янв 25, 2009 21:16:04
Сообщений: 35726
Откуда: Москва
Рейтинг сообщения: 0
Не отвлекайся: весь форум знает , что твоя писулька намного длиннее и толще. Тебе список команд МИДИ нужен? Могу прислать. А будешь выёбываться - порхай сам как нибудь. Умник...( в Инете найдешь - это стандартные данные).

_________________
А поболтать?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хочу сделать секвенсор, есть некоторые вопросы.
СообщениеДобавлено: Чт авг 17, 2017 15:05:48 
Генеральный секретарь МЯУ
Аватар пользователя

Карма: 69
Рейтинг сообщений: 22
Зарегистрирован: Пн сен 03, 2007 18:24:27
Сообщений: 18417
Откуда: Россия. Омск.
Рейтинг сообщения: 0
Иди, гуляй уже, знаток длинных и толстых писулек :))) :facepalm:


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Хочу сделать секвенсор, есть некоторые вопросы.
СообщениеДобавлено: Чт авг 17, 2017 15:13:30 
Друг Кота

Карма: 49
Рейтинг сообщений: 523
Зарегистрирован: Чт фев 20, 2014 18:57:55
Сообщений: 18443
Рейтинг сообщения: 0
Докатились :))

_________________
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Хочу сделать секвенсор, есть некоторые вопросы.
СообщениеДобавлено: Чт авг 17, 2017 15:18:37 
Генеральный секретарь МЯУ
Аватар пользователя

Карма: 69
Рейтинг сообщений: 22
Зарегистрирован: Пн сен 03, 2007 18:24:27
Сообщений: 18417
Откуда: Россия. Омск.
Рейтинг сообщения: 0
Не, оно так давно. И так будет всегда.
Данный кадр у меня вызывает стойкий рвотный позыв. Если он не желает быть обрызганым, ему достаточно просто не общаться со мной. Но видимо ему это нравится, потому и лезет со своими ценными советами туда, куда ему лезть прямым текстом настоятельно не рекомендовали.


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Хочу сделать секвенсор, есть некоторые вопросы.
СообщениеДобавлено: Чт авг 17, 2017 15:22:00 
Друг Кота
Аватар пользователя

Карма: 43
Рейтинг сообщений: 167
Зарегистрирован: Вс янв 25, 2009 21:16:04
Сообщений: 35726
Откуда: Москва
Рейтинг сообщения: 0
Ну поплачь...может кто и пожалеет. Сам же лезешь в бутылку.

_________________
А поболтать?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хочу сделать секвенсор, есть некоторые вопросы.
СообщениеДобавлено: Чт авг 17, 2017 20:31:00 
Генеральный секретарь МЯУ
Аватар пользователя

Карма: 69
Рейтинг сообщений: 22
Зарегистрирован: Пн сен 03, 2007 18:24:27
Сообщений: 18417
Откуда: Россия. Омск.
Рейтинг сообщения: 0
Лезу. И буду лезть. По другому с тобой общаться я не могу и не хочу.

Добавлено after 5 hours 5 minutes 39 seconds:
Набросал фрагмент кода на пару тактов. Примерно так (номера выходов ардуины наугад пока поставил, потом дома прсмотрю, куда что удобнее подключить):
Спойлер
Код:
#define pot A0 // Потенциометр на вход A0
int drum1 = 1;
// вход барабан 1
int drum2 = 2;
// вход барабан 2
int drum3 = 3;
int drum4 = 4;
int drum5 = 5;
int inA0 = 6; // выход на мультиплексор
int inA1 = 7;
int inA2 = 8;
int inA3 = 9;

void setup() {
Serial.begin(31250);   // скорость передачи MIDI-данных:
pinMode(pot, INPUT);
pinMode(drum1, INPUT);
pinMode(drum2, INPUT);
pinMode(drum3, INPUT);
pinMode(drum4, INPUT);
pinMode(drum5, INPUT);
pinMode(inA0, OUTPUT);
pinMode(inA1, OUTPUT);
pinMode(inA2, OUTPUT);
pinMode(inA3, OUTPUT);
}

void loop(){
int x;
x = analogRead(pot) / 4 + 50; // Задаётся длительность паузы между нотами, регулируемая потенциометром.
digitalWrite(inA0, LOW); // мультиплексор, канал 1
digitalWrite(inA1, LOW);
digitalWrite(inA2, LOW);
digitalWrite(inA3, LOW);
delay(1); //антидребезг (если понадобится)

if (digitalRead(drum1) == LOW)  {
noteOn(0x90, 1, 0x45);
}
if (digitalRead(drum2) == LOW)  {
noteOn(0x90, 2, 0x45);
}
if (digitalRead(drum3) == LOW)  {
noteOn(0x90, 3, 0x45);
}
if (digitalRead(drum4) == LOW)  {
noteOn(0x90, 4, 0x45);
}
if (digitalRead(drum5) == LOW)  {
noteOn(0x90, 5, 0x45);
}
delay (x);

digitalWrite(inA0, HIGH); // мультиплексор, канал 2
digitalWrite(inA1, LOW);
digitalWrite(inA2, LOW);
digitalWrite(inA3, LOW);
delay(1); //антидребезг (если понадобится)

if (digitalRead(drum2) == LOW)  {
noteOn(0x90, 1, 0x45);  // Проверка включенных тумблеров (низкий уровень) и отправка нот по миди.
}
if (digitalRead(drum2) == LOW)  {
noteOn(0x90, 2, 0x45);
}
if (digitalRead(drum3) == LOW)  {
noteOn(0x90, 3, 0x45);
}
if (digitalRead(drum4) == LOW)  {
noteOn(0x90, 4, 0x45);
}
if (digitalRead(drum5) == LOW)  {
noteOn(0x90, 5, 0x45);
}
delay (x);

}

void noteOn(int cmd, int pitch, int velocity)
{
  Serial.write(cmd);
  Serial.write(pitch);
  Serial.write(velocity);
}

Вот там в цикле loop я правильно написал?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хочу сделать секвенсор, есть некоторые вопросы.
СообщениеДобавлено: Чт авг 17, 2017 21:04:15 
Друг Кота

Карма: 49
Рейтинг сообщений: 523
Зарегистрирован: Чт фев 20, 2014 18:57:55
Сообщений: 18443
Рейтинг сообщения: 0
В целом то да, но желательно завернуть в цикл и обход 0-15 по мультиплексору и в другой обход ног drum1-drum5 можно. Но можно и так размахать - работать будет не хуже, править только неудобно если что.

_________________
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хочу сделать секвенсор, есть некоторые вопросы.
СообщениеДобавлено: Пт авг 18, 2017 07:28:13 
Генеральный секретарь МЯУ
Аватар пользователя

Карма: 69
Рейтинг сообщений: 22
Зарегистрирован: Пн сен 03, 2007 18:24:27
Сообщений: 18417
Откуда: Россия. Омск.
Рейтинг сообщения: 0
Интересная фигня. Код, который я выложил выше, я писал на работе на телефоне, в текстовом редакторе.
Дома скопировал его в Arduino IDE, а она мне пишет: error: stray '\240' in program
Погуглил эту ошибку, пишут что это связано с неправильной кодировкой текста. Переписывать полностью вручную было лень, скопировал тот-же текст, но уже не с того файла, который я на телефоне писал, а прямо с форума, этой ошибки уже не было (были другие, их исправил, стало пока без ошибок).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хочу сделать секвенсор, есть некоторые вопросы.
СообщениеДобавлено: Пт авг 18, 2017 08:55:53 
Друг Кота

Карма: 49
Рейтинг сообщений: 523
Зарегистрирован: Чт фев 20, 2014 18:57:55
Сообщений: 18443
Рейтинг сообщения: 0
Даже в блокноте можно кодировку переключать - в "сохранить как" внизу выбирается. Так что вполне может быть.

_________________
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хочу сделать секвенсор, есть некоторые вопросы.
СообщениеДобавлено: Пт авг 18, 2017 15:55:02 
Генеральный секретарь МЯУ
Аватар пользователя

Карма: 69
Рейтинг сообщений: 22
Зарегистрирован: Пн сен 03, 2007 18:24:27
Сообщений: 18417
Откуда: Россия. Омск.
Рейтинг сообщения: 0
Ну я как-то даже не думал что проблема с кодировками может возникнуть даже с латиницей.

Добавлено after 6 hours 39 minutes 41 second:
Написал вот такой код:
Спойлер
Код:
#define pot A0 // Потенциометр на вход A0
/*#define A = 1; // Барабан "A" на ноту 1
#define B = 2;
#define C = 3;
#define D = 4;
#define E = 5;*/

int drum1 = 2; // вход барабан 1
int drum2 = 3; // вход барабан 2
int drum3 = 4;
int drum4 = 5;
int drum5 = 6;
int inA0 = 7; // выход на мультиплексор
int inA1 = 8;
int inA2 = 9;
int inA3 = 10;

void setup() {
Serial.begin(31250);   // скорость передачи MIDI-данных:
pinMode(pot, INPUT);
pinMode(drum1, INPUT);
pinMode(drum2, INPUT);
pinMode(drum3, INPUT);
pinMode(drum4, INPUT);
pinMode(drum5, INPUT);
pinMode(inA0, OUTPUT);
pinMode(inA1, OUTPUT);
pinMode(inA2, OUTPUT);
pinMode(inA3, OUTPUT);
}

void loop(){
int x;
x = analogRead(pot) / 4 + 50; // Задаётся длительность паузы между нотами, регулируемая потенциометром.
digitalWrite(inA0, LOW); // мультиплексор, канал 0
digitalWrite(inA1, LOW);
digitalWrite(inA2, LOW);
digitalWrite(inA3, LOW);
if (digitalRead(drum1) == LOW)  {
noteOn(0x90, 1, 0x45);
}
if (digitalRead(drum2) == LOW)  {
noteOn(0x90, 2, 0x45);
}
if (digitalRead(drum3) == LOW)  {
noteOn(0x90, 3, 0x45);
}
if (digitalRead(drum4) == LOW)  {
noteOn(0x90, 4, 0x45);
}
if (digitalRead(drum5) == LOW)  {
noteOn(0x90, 5, 0x45);
}
delay (x);

x = analogRead(pot) / 4 + 50;
digitalWrite(inA0, HIGH); // мультиплексор, канал 1
digitalWrite(inA1, LOW);
digitalWrite(inA2, LOW);
digitalWrite(inA3, LOW);
if (digitalRead(drum1) == LOW)  {
noteOn(0x90, 1, 0x45);  // Проверка включенных тумблеров (низкий уровень) и отправка нот по миди.
}
if (digitalRead(drum2) == LOW)  {
noteOn(0x90, 2, 0x45);
}
if (digitalRead(drum3) == LOW)  {
noteOn(0x90, 3, 0x45);
}
if (digitalRead(drum4) == LOW)  {
noteOn(0x90, 4, 0x45);
}
if (digitalRead(drum5) == LOW)  {
noteOn(0x90, 5, 0x45);
}
delay (x);

x = analogRead(pot) / 4 + 50;
digitalWrite(inA0, LOW); // мультиплексор, канал 2
digitalWrite(inA1, HIGH);
digitalWrite(inA2, LOW);
digitalWrite(inA3, LOW);
if (digitalRead(drum1) == LOW)  {
noteOn(0x90, 1, 0x45);  // Проверка включенных тумблеров (низкий уровень) и отправка нот по миди.
}
if (digitalRead(drum2) == LOW)  {
noteOn(0x90, 2, 0x45);
}
if (digitalRead(drum3) == LOW)  {
noteOn(0x90, 3, 0x45);
}
if (digitalRead(drum4) == LOW)  {
noteOn(0x90, 4, 0x45);
}
if (digitalRead(drum5) == LOW)  {
noteOn(0x90, 5, 0x45);
}
delay (x);

x = analogRead(pot) / 4 + 50;
digitalWrite(inA0, HIGH); // мультиплексор, канал 3
digitalWrite(inA1, HIGH);
digitalWrite(inA2, LOW);
digitalWrite(inA3, LOW);
if (digitalRead(drum1) == LOW)  {
noteOn(0x90, 1, 0x45);  // Проверка включенных тумблеров (низкий уровень) и отправка нот по миди.
}
if (digitalRead(drum2) == LOW)  {
noteOn(0x90, 2, 0x45);
}
if (digitalRead(drum3) == LOW)  {
noteOn(0x90, 3, 0x45);
}
if (digitalRead(drum4) == LOW)  {
noteOn(0x90, 4, 0x45);
}
if (digitalRead(drum5) == LOW)  {
noteOn(0x90, 5, 0x45);
}
delay (x);

x = analogRead(pot) / 4 + 50;
digitalWrite(inA0, LOW); // мультиплексор, канал 4
digitalWrite(inA1, LOW);
digitalWrite(inA2, HIGH);
digitalWrite(inA3, LOW);
if (digitalRead(drum1) == LOW)  {
noteOn(0x90, 1, 0x45);  // Проверка включенных тумблеров (низкий уровень) и отправка нот по миди.
}
if (digitalRead(drum2) == LOW)  {
noteOn(0x90, 2, 0x45);
}
if (digitalRead(drum3) == LOW)  {
noteOn(0x90, 3, 0x45);
}
if (digitalRead(drum4) == LOW)  {
noteOn(0x90, 4, 0x45);
}
if (digitalRead(drum5) == LOW)  {
noteOn(0x90, 5, 0x45);
}
delay (x);

x = analogRead(pot) / 4 + 50;
digitalWrite(inA0, HIGH); // мультиплексор, канал 5
digitalWrite(inA1, LOW);
digitalWrite(inA2, HIGH);
digitalWrite(inA3, LOW);
if (digitalRead(drum1) == LOW)  {
noteOn(0x90, 1, 0x45);  // Проверка включенных тумблеров (низкий уровень) и отправка нот по миди.
}
if (digitalRead(drum2) == LOW)  {
noteOn(0x90, 2, 0x45);
}
if (digitalRead(drum3) == LOW)  {
noteOn(0x90, 3, 0x45);
}
if (digitalRead(drum4) == LOW)  {
noteOn(0x90, 4, 0x45);
}
if (digitalRead(drum5) == LOW)  {
noteOn(0x90, 5, 0x45);
}
delay (x);

x = analogRead(pot) / 4 + 50;
digitalWrite(inA0, LOW); // мультиплексор, канал 6
digitalWrite(inA1, HIGH);
digitalWrite(inA2, HIGH);
digitalWrite(inA3, LOW);
if (digitalRead(drum1) == LOW)  {
noteOn(0x90, 1, 0x45);  // Проверка включенных тумблеров (низкий уровень) и отправка нот по миди.
}
if (digitalRead(drum2) == LOW)  {
noteOn(0x90, 2, 0x45);
}
if (digitalRead(drum3) == LOW)  {
noteOn(0x90, 3, 0x45);
}
if (digitalRead(drum4) == LOW)  {
noteOn(0x90, 4, 0x45);
}
if (digitalRead(drum5) == LOW)  {
noteOn(0x90, 5, 0x45);
}
delay (x);

x = analogRead(pot) / 4 + 50;
digitalWrite(inA0, HIGH); // мультиплексор, канал 7
digitalWrite(inA1, HIGH);
digitalWrite(inA2, HIGH);
digitalWrite(inA3, LOW);
if (digitalRead(drum1) == LOW)  {
noteOn(0x90, 1, 0x45);  // Проверка включенных тумблеров (низкий уровень) и отправка нот по миди.
}
if (digitalRead(drum2) == LOW)  {
noteOn(0x90, 2, 0x45);
}
if (digitalRead(drum3) == LOW)  {
noteOn(0x90, 3, 0x45);
}
if (digitalRead(drum4) == LOW)  {
noteOn(0x90, 4, 0x45);
}
if (digitalRead(drum5) == LOW)  {
noteOn(0x90, 5, 0x45);
}
delay (x);

x = analogRead(pot) / 4 + 50;
digitalWrite(inA0, LOW); // мультиплексор, канал 8
digitalWrite(inA1, LOW);
digitalWrite(inA2, LOW);
digitalWrite(inA3, HIGH);
if (digitalRead(drum1) == LOW)  {
noteOn(0x90, 1, 0x45);  // Проверка включенных тумблеров (низкий уровень) и отправка нот по миди.
}
if (digitalRead(drum2) == LOW)  {
noteOn(0x90, 2, 0x45);
}
if (digitalRead(drum3) == LOW)  {
noteOn(0x90, 3, 0x45);
}
if (digitalRead(drum4) == LOW)  {
noteOn(0x90, 4, 0x45);
}
if (digitalRead(drum5) == LOW)  {
noteOn(0x90, 5, 0x45);
}
delay (x);

x = analogRead(pot) / 4 + 50;
digitalWrite(inA0, HIGH); // мультиплексор, канал 9
digitalWrite(inA1, LOW);
digitalWrite(inA2, LOW);
digitalWrite(inA3, HIGH);
if (digitalRead(drum1) == LOW)  {
noteOn(0x90, 1, 0x45);  // Проверка включенных тумблеров (низкий уровень) и отправка нот по миди.
}
if (digitalRead(drum2) == LOW)  {
noteOn(0x90, 2, 0x45);
}
if (digitalRead(drum3) == LOW)  {
noteOn(0x90, 3, 0x45);
}
if (digitalRead(drum4) == LOW)  {
noteOn(0x90, 4, 0x45);
}
if (digitalRead(drum5) == LOW)  {
noteOn(0x90, 5, 0x45);
}
delay (x);

x = analogRead(pot) / 4 + 50;
digitalWrite(inA0, LOW); // мультиплексор, канал 10
digitalWrite(inA1, HIGH);
digitalWrite(inA2, LOW);
digitalWrite(inA3, HIGH);
if (digitalRead(drum1) == LOW)  {
noteOn(0x90, 1, 0x45);  // Проверка включенных тумблеров (низкий уровень) и отправка нот по миди.
}
if (digitalRead(drum2) == LOW)  {
noteOn(0x90, 2, 0x45);
}
if (digitalRead(drum3) == LOW)  {
noteOn(0x90, 3, 0x45);
}
if (digitalRead(drum4) == LOW)  {
noteOn(0x90, 4, 0x45);
}
if (digitalRead(drum5) == LOW)  {
noteOn(0x90, 5, 0x45);
}
delay (x);

x = analogRead(pot) / 4 + 50;
digitalWrite(inA0, HIGH); // мультиплексор, канал 11
digitalWrite(inA1, HIGH);
digitalWrite(inA2, LOW);
digitalWrite(inA3, HIGH);
if (digitalRead(drum1) == LOW)  {
noteOn(0x90, 1, 0x45);  // Проверка включенных тумблеров (низкий уровень) и отправка нот по миди.
}
if (digitalRead(drum2) == LOW)  {
noteOn(0x90, 2, 0x45);
}
if (digitalRead(drum3) == LOW)  {
noteOn(0x90, 3, 0x45);
}
if (digitalRead(drum4) == LOW)  {
noteOn(0x90, 4, 0x45);
}
if (digitalRead(drum5) == LOW)  {
noteOn(0x90, 5, 0x45);
}
delay (x);

x = analogRead(pot) / 4 + 50;
digitalWrite(inA0, LOW); // мультиплексор, канал 12
digitalWrite(inA1, LOW);
digitalWrite(inA2, HIGH);
digitalWrite(inA3, HIGH);
if (digitalRead(drum1) == LOW)  {
noteOn(0x90, 1, 0x45);  // Проверка включенных тумблеров (низкий уровень) и отправка нот по миди.
}
if (digitalRead(drum2) == LOW)  {
noteOn(0x90, 2, 0x45);
}
if (digitalRead(drum3) == LOW)  {
noteOn(0x90, 3, 0x45);
}
if (digitalRead(drum4) == LOW)  {
noteOn(0x90, 4, 0x45);
}
if (digitalRead(drum5) == LOW)  {
noteOn(0x90, 5, 0x45);
}
delay (x);

x = analogRead(pot) / 4 + 50;
digitalWrite(inA0, HIGH); // мультиплексор, канал 13
digitalWrite(inA1, LOW);
digitalWrite(inA2, HIGH);
digitalWrite(inA3, HIGH);
if (digitalRead(drum1) == LOW)  {
noteOn(0x90, 1, 0x45);  // Проверка включенных тумблеров (низкий уровень) и отправка нот по миди.
}
if (digitalRead(drum2) == LOW)  {
noteOn(0x90, 2, 0x45);
}
if (digitalRead(drum3) == LOW)  {
noteOn(0x90, 3, 0x45);
}
if (digitalRead(drum4) == LOW)  {
noteOn(0x90, 4, 0x45);
}
if (digitalRead(drum5) == LOW)  {
noteOn(0x90, 5, 0x45);
}
delay (x);

x = analogRead(pot) / 4 + 50;
digitalWrite(inA0, LOW); // мультиплексор, канал 14
digitalWrite(inA1, HIGH);
digitalWrite(inA2, HIGH);
digitalWrite(inA3, HIGH);
if (digitalRead(drum1) == LOW)  {
noteOn(0x90, 1, 0x45);  // Проверка включенных тумблеров (низкий уровень) и отправка нот по миди.
}
if (digitalRead(drum2) == LOW)  {
noteOn(0x90, 2, 0x45);
}
if (digitalRead(drum3) == LOW)  {
noteOn(0x90, 3, 0x45);
}
if (digitalRead(drum4) == LOW)  {
noteOn(0x90, 4, 0x45);
}
if (digitalRead(drum5) == LOW)  {
noteOn(0x90, 5, 0x45);
}
delay (x);

x = analogRead(pot) / 4 + 50;
digitalWrite(inA0, HIGH); // мультиплексор, канал 14
digitalWrite(inA1, HIGH);
digitalWrite(inA2, HIGH);
digitalWrite(inA3, HIGH);
if (digitalRead(drum1) == LOW)  {
noteOn(0x90, 1, 0x45);  // Проверка включенных тумблеров (низкий уровень) и отправка нот по миди.
}
if (digitalRead(drum2) == LOW)  {
noteOn(0x90, 2, 0x45);
}
if (digitalRead(drum3) == LOW)  {
noteOn(0x90, 3, 0x45);
}
if (digitalRead(drum4) == LOW)  {
noteOn(0x90, 4, 0x45);
}
if (digitalRead(drum5) == LOW)  {
noteOn(0x90, 5, 0x45);
}
delay (x);
}
void noteOn(int cmd, int pitch, int velocity)
{
  Serial.write(cmd);
  Serial.write(pitch);
  Serial.write(velocity);
}

Работает, но как-то странно. В некоторых комбинациях задействованные барабаны начинают звучать одновременно, даже если тумблеры какого-то барабана не включены.
Например если включить на первом канале 1й и 5й барабан, то они будут звучать одновременно везде (например первый ещё несколько раз включен, а пятый только в начале, но звучать они будут всегда одновременно).
Если включить первый на первом канале, а пятый на пятом - то-же самое.
А если первый на первом канале, а пятый на втором канале - всё работает нормально, пятый звучит только один раз, не зависимо от того, сколько раз звучит первый. Ну и ещё много таких комбинаций, когда некоторые барабаны звучат одновременно...
Может в схеме где-то накосячил, но уже на сто раз всё просмотрел и проверил, всё правильно вроде, нигде ничего не замыкает.
И ещё. Пробовал замыкать проволочками со снятым мультиплексором, если занкнуть вывод какого либо барабана, он стучит не переставая и довольно быстро (скорость регулируется, но всё равно гораздо быстрее, чем завершается цикл и начинается по новой). Вроде по коду такого быть не должно. С мультиплексором звучит как положено, один раз (мультиплексор кратковременно даёт сигнал) и это не мешает, но кажется мне, что загвоздка где-то именно здесь...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хочу сделать секвенсор, есть некоторые вопросы.
СообщениеДобавлено: Пт авг 18, 2017 16:01:04 
Друг Кота

Карма: 49
Рейтинг сообщений: 523
Зарегистрирован: Чт фев 20, 2014 18:57:55
Сообщений: 18443
Рейтинг сообщения: 0
Надо будет это как то покомпактней написать, а то глаза разбегаются. Попозже.

_________________
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хочу сделать секвенсор, есть некоторые вопросы.
СообщениеДобавлено: Пт авг 18, 2017 16:20:38 
Генеральный секретарь МЯУ
Аватар пользователя

Карма: 69
Рейтинг сообщений: 22
Зарегистрирован: Пн сен 03, 2007 18:24:27
Сообщений: 18417
Откуда: Россия. Омск.
Рейтинг сообщения: 0
SeregaT писал(а):
Пробовал замыкать проволочками со снятым мультиплексором, если занкнуть вывод какого либо барабана, он стучит не переставая и довольно быстро (скорость регулируется, но всё равно гораздо быстрее, чем завершается цикл и начинается по новой). Вроде по коду такого быть не должно.

Не, тут правильно всё. Он так и должен стучать, так как после паузы снова проверяется, не включен ли тумблер, а там замкнуто.
Значит дело в чём-то другом. Буду копать дальше :))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хочу сделать секвенсор, есть некоторые вопросы.
СообщениеДобавлено: Пт авг 18, 2017 16:28:21 
Друг Кота

Карма: 49
Рейтинг сообщений: 523
Зарегистрирован: Чт фев 20, 2014 18:57:55
Сообщений: 18443
Рейтинг сообщения: 0
Serial.print надо сделать и посмотреть в мониторе com-порта что там реально генерится и на каком шаге опроса мультиплексора.

_________________
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хочу сделать секвенсор, есть некоторые вопросы.
СообщениеДобавлено: Пт авг 18, 2017 16:56:18 
Генеральный секретарь МЯУ
Аватар пользователя

Карма: 69
Рейтинг сообщений: 22
Зарегистрирован: Пн сен 03, 2007 18:24:27
Сообщений: 18417
Откуда: Россия. Омск.
Рейтинг сообщения: 0
Это я не умею пока :(

Добавлено after 12 minutes 43 seconds:
Получается, что если какой либо барабан хотябы один раз включить в одном столбце тумблеров с другим барабаном, он будет звучать одновременно с этим барабаном даже тогда, когда этот барабан должен звучать один. То есть включил первый барабан восемь раз, через тумблер (1,3,5,7,9,11,13,15), а второй барабан только один раз (1), то он всё равно будет звучать вместе с первым восемь раз за каждый такт. А если совпадающих в одном столбце барабанов нет, всё нормально работает.

Добавлено after 10 minutes 38 seconds:
А, оно так и будет. Если один тумблер замкнуть в одном столбце одновременно с другим, он будет замыкать эти два барабана каждый раз вместе. Надо как я и говорил, ставить 4 мультиплексора, чтобы были 64 независимых тумблера.
Надо было таки на кнопках делать :))) :facepalm:
Но на кнопках дорого (кнопки гораздо дороже обойдутся и дохрена светодиодов надо и опять же их куда-то подключить... В общем оно того не стоит.
Значит буду по одному барабану включать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хочу сделать секвенсор, есть некоторые вопросы.
СообщениеДобавлено: Пт авг 18, 2017 16:58:09 
Друг Кота

Карма: 49
Рейтинг сообщений: 523
Зарегистрирован: Чт фев 20, 2014 18:57:55
Сообщений: 18443
Рейтинг сообщения: 0
Что то я запутался. А как тумблеры включены ? Я думал там 16 в длину и по кол-ву барабанов в ширину.

_________________
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хочу сделать секвенсор, есть некоторые вопросы.
СообщениеДобавлено: Пт авг 18, 2017 17:03:43 
Генеральный секретарь МЯУ
Аватар пользователя

Карма: 69
Рейтинг сообщений: 22
Зарегистрирован: Пн сен 03, 2007 18:24:27
Сообщений: 18417
Откуда: Россия. Омск.
Рейтинг сообщения: 0
Да, именно так.
5 строк и 16 столбцов.

Добавлено after 1 minute 51 second:
Пока буду пробовать с предыдущим кодом.
Надо будет туда добавить несколько массивов и переключаться между ними. Только пока не знаю, как это сделать. Надо подумать :)))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хочу сделать секвенсор, есть некоторые вопросы.
СообщениеДобавлено: Сб авг 19, 2017 13:47:07 
Друг Кота

Карма: 49
Рейтинг сообщений: 523
Зарегистрирован: Чт фев 20, 2014 18:57:55
Сообщений: 18443
Рейтинг сообщения: 0
Вот ваш в более компактном виде.
Спойлер
Код:
#define pot A4 // Потенциометр на вход A4

int pin_drum[5] = {2,3,4,5,6};
int pin_mux[4]  = {7,8,9,10};

void setup() {
  int i;
  Serial.begin(31240);   // скорость передачи MIDI-данных: 31250
  pinMode(pot, INPUT);
  for (i=0;i<5;i++) pinMode(pin_drum[i], INPUT);
  for (i=0;i<4;i++) pinMode(pin_mux[i], OUTPUT);
}

void loop(){
  int x;
  for (byte mux=0;mux<16;mux++) {
    x = analogRead(pot) / 4 + 50; // Задаётся длительность паузы между нотами, регулируемая потенциометром.   
    digitalWrite(pin_mux[0], mux & 0b0001); // мультиплексор 1й бит
    digitalWrite(pin_mux[1], mux & 0b0010); // мультиплексор 2й бит
    digitalWrite(pin_mux[2], mux & 0b0100); // мультиплексор 3й бит
    digitalWrite(pin_mux[3], mux & 0b1000); // мультиплексор 4й бит
    delay(1);
    for (byte drum=0;drum<5;drum++) { // обход барабанов, ноты drum + 1 = от 1 до 5
      if (digitalRead(pin_drum[drum]) == LOW) noteOn(0x90, (drum+1), 0x45);
    }
    delay (x);
  }
}

void noteOn(int cmd, int pitch, int velocity)
{
  Serial.write(cmd);
  Serial.write(pitch);
  Serial.write(velocity);
}

А ноту не надо выключать, отправляя команду в MIDI, если на очередном шаге она выключена переключателем ? Этого ведь нет в коде - может поэтому не то получается ?

_________________
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хочу сделать секвенсор, есть некоторые вопросы.
СообщениеДобавлено: Сб авг 19, 2017 14:09:27 
Генеральный секретарь МЯУ
Аватар пользователя

Карма: 69
Рейтинг сообщений: 22
Зарегистрирован: Пн сен 03, 2007 18:24:27
Сообщений: 18417
Откуда: Россия. Омск.
Рейтинг сообщения: 0
Morroc писал(а):
Вот ваш в более компактном виде.

Нифига себе :shock: Этот код размером как тот маленький фрагмент кода, который я выкладывал. Надо повнимательнее изучить, интересно же, как это можно так компактно его записать.
Morroc писал(а):
А ноту не надо выключать, отправляя команду в MIDI, если на очередном шаге она выключена переключателем ?

Был бы музыкальный секвенсор, было бы нужно. Но у меня барабанный секвенсор. Барабаны долго не звучат :) Стук-дзынь и готово :)))
Но каждый стук прозвучать должен до конца (длина стука у всех разная), иначе звучать будет беспонтово, звуки будут обрубаться.
Единственное, это надо глушить открытый хайхет, перед тем, как будет звучать закрытый (они на одной "тарелке" расположены и в реале звучание открытого хайхета заглушается, когда его закрывают, чтобы брякнуть по закрытому :) Но я пока такие сложности решил не использовать. У меня будет просто закрытый или просто открытый. Иначе там кучу каналов надо, чтобы все барабанные заморочки использовать.
Morroc писал(а):
Этого ведь нет в коде - может поэтому не то получается ?

Не, получается не то только потому, что если в одном столбце включено два тумблера, то каналы этих тумблеров будут всегда замкнуты между собой на каждом шаге. Тут чисто электрическая заморочка получилась.
Оно в общем-то и так отлично. Просто исключает возможность звучания двух барабанов одновременно. Или один из барабанов, который должен звучать одновременно с каким либо ещё, можно ещё раз назначить на другой канал и включать его вместо основного в те моменты, когда он должен звучать одновременно с другим барабаном. Например одновременно звучащий Kikc и Clap на каждом втором ударе (типа как в стилях House), просто бочка размещается на два канала и на одном канале каждый первый удар, на другом - каждый второй.
Эта заморочка немного ограничивает ритмические рисунки, но пользоваться очень даже можно и так.

Я кстати нашёл в интернете готовый проект драммашины на ардуине, но это не мидисеквенсор, а именно драммашина и ардуина сама генерирует звуки барабанов. Я сперва не обратил на этот проект внимания (хотел именно миди, так как там можно очень качественные сэмплы использовать, а тут - ну какое там качество звука ардуина может нагенерировать). Но на ютубе посмотрел, вроде неплохо звучит, решил попробовать. Там надо 9 тумблеров, у меня нет ни одного, пока так, проволочками позамыкаю :))) Схему сейчас допаял, буду пробовать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хочу сделать секвенсор, есть некоторые вопросы.
СообщениеДобавлено: Сб авг 19, 2017 14:21:35 
Друг Кота

Карма: 49
Рейтинг сообщений: 523
Зарегистрирован: Чт фев 20, 2014 18:57:55
Сообщений: 18443
Рейтинг сообщения: 0
Поиграйтесь в code.org, у меня ребенок даже что то там оптимизировал циклами. :)) Можно биты управления мультиплексором тоже в одну в строку уместить, оставил для наглядности.

Не пойму почему с тумблерами так вышло, вроде всего хватает со стороны мк и мультиплексора чтобы каждый отдельно определять вкл/выкл. На проводах где то сэкономили, соединив что то вместе ?

_________________
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 147 ]     ... , , , 6, ,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Bing [Bot], encelad и гости: 45


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y