Скетч для цветомузыки

IamNikolay

★★★✩✩✩✩
15 Янв 2020
483
111
@MaxD, Вот, написал вам код, который при сигнале с микрофона больше 2,5 вольт включит все 3 светодиода на 2 секунды, а затем выключит

чередование строк включения/выключения и задержки и даст различные эффекты. Тут какие хотите - те и получите эффекты.


C++:
void setup() {
pinMode(A0, INPUT); //микрофон до 5 вольт

//управляющие пины
pinMode(2, OUTPUT); //красный к 2
pinMode(3, OUTPUT); //зеленый к 3
pinMode(4, OUTPUT); //синий к 4

}

void loop() {
  if (analogRead(A0)> 500) { //500 - уровень звука от которого будет срабатывать включение. 500 это 2,5 вольта, максимум 1024 = 5 вольтам

    digitalWrite(2, HIGH); //включение красного
    digitalWrite(3, HIGH); //включение зеленого
    digitalWrite(4, HIGH); //включение синего

    delay(2000); //задержка на 2 секунды
   
    digitalWrite(2, LOW); //выключение красного
    digitalWrite(3, LOW); //выключение зеленого
    digitalWrite(4, LOW); //выключение синего
  }

}
 

MaxD

✩✩✩✩✩✩✩
5 Апр 2020
16
0
Такой код только запускает программу, а как остановить если тишина и продолжить если звук пошел?
 

IamNikolay

★★★✩✩✩✩
15 Янв 2020
483
111
@MaxD, не совсем так, этот код запускает управление светодиодами (в коде включение на 2 сек.), а после проверяет есть ли музыка, если она есть - то запускает повторно, а если нет - то ничего не делает. Т.е. после появления музыки код отрабатывает 1 раз и снова проверяет её наличие.
 

MaxD

✩✩✩✩✩✩✩
5 Апр 2020
16
0
@IamNikolay, Да именно так, но мой код длится полторы минуты. И пока не пройдет круг, не останавливается)))) Хотелось бы чтобы останавливался и потом продолжал(если возможно). Если нет, то вариант один, укорачивать мой код хотя бы до 30 секунд... (наверное)...
 

kalobyte

★★★✩✩✩✩
1 Янв 2020
725
151
нужно сделать массив из байт
в каждом байте можно закодировать все 6 светодиодов и потом таким макаром составить эффекты и тупо их перебирать

можно конечно сделать эффекты функциями, особенно если там есть шим управление светодиодами или самому его сделать
функции тоже можно будет переключать, но тут уже работа с указателями на функции и все куда сложнее и еще эффекты эти долго делать
 

IamNikolay

★★★✩✩✩✩
15 Янв 2020
483
111
@Эдуард Анисимов, delay там ни как не мешает, т.к. 2 сек это пример, а по факту в эффектах для музыки более 50 миллисекунд не требуется. Для прерывания же нужен цифровой выход микрофона, которого на данный момент у автора нет...
 

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
1,495
526
55
Марий-Эл
delay там ни как не мешает, т.к. 2 сек это пример, а по факту в эффектах для музыки более 50 миллисекунд не требуется.
Короткий delay() не помешает. Длинный тормозить весь процесс будет. Здесь Ваша правда.
А автору лучше предусмотреть цифровой вход для прерывания от микрофона. Такой микрофон больше будет реагировать на ударные. При каждом прерывании мы декрементируем какой то счётчик, который инициализируется случайным числом, но не очень большим. Что бы эффекты не так часто менялись. При обнулении счётчика меняется эффект, а счётчик заново инициализируется случайным числом.
Можно по каждому такту ударных менять подъэффект, а после обнуления счётчика сам эффект. Вариантов 100500.
 

IamNikolay

★★★✩✩✩✩
15 Янв 2020
483
111
@Эдуард Анисимов, автор выше писал что эффекты у него уже есть и нужно их останавливать при выключении музыки, а затем продолжать с остановленного места. Т.е. - нужна просто пауза, а не переключение и реакция. Хотя с реакцией и рандомом может получиться весьма интересно. А паузу можно реализовать следующими способами: если с цифровым выводом - то через прерывания, а если с аналоговым - то через проверку микрофона и зацикливание внутри самих эффектов
 

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
1,495
526
55
Марий-Эл
если с аналоговым - то через проверку микрофона и зацикливание внутри самих эффектов
Забудьте аналоговый вход. Математическую обработку писать забодаетесь.
Только если порог ловить. А это не даст переключение в такт.
Если ему это не нужно, а только чуханье музыки, то тоже прерывание, только и по фронту и по спаду. По фронту, в прерывании, выставляется флаг, по спаду обнуляется. А в основном цикле только проверять этот флаг перед выводом следующего эффекта.
 

IamNikolay

★★★✩✩✩✩
15 Янв 2020
483
111
@Эдуард Анисимов, так переключение в такт и не требуется, а только пауза при отсутствии музыки, здесь банальная проверка уровня шума analogRead(A0) < 500 c зацикливанием когда условие верно. исходим из того что музыка дает уровень выше 500 (в зависимости от микрофона и усиления меняем это значение).
Если работать с флагом, то код эффектов нужно разбивать на условия с проверкой флага, причем это не даст паузы, а только остановит эффект, а после появления будет уже другой эффект
 
  • Лойс +1
Реакции: MaxD

MaxD

✩✩✩✩✩✩✩
5 Апр 2020
16
0
Ребят, в принципе, если остановка в тишине будет работать, то особо не важно с какого места продолжит работать при появлении звука.
Просто нужно останавливать свет при тишине, чтобы просто так не моргали они...
 

MaxD

✩✩✩✩✩✩✩
5 Апр 2020
16
0
@IamNikolay, Спасибо большое за помощь, проблема решена. Тему можно я так думаю и закрыть. Или можете готовое устройство посмотреть, как готово будет, я видео выложу...
 

MaxD

✩✩✩✩✩✩✩
5 Апр 2020
16
0
Ну вот что получилось. То что надо!


 
Изменено: