Arduino и MP3 плеер. Нужна помощь
- Войдите на сайт для отправки комментариев
Доброго всем дня!
Прошу помощи!
Есть такая задача, есть МП3 плеер и ардуино
В общем надо сделать так, что бы при включении ардуины она давала команду плееру включится (включается он кнопкой PLAY), о том, что он включился можно понять по напряжению на подсветке дисплея,
включается он нажатием на кнопку PLAY 1-2 сек., затем нужно подождать 5-6 секунд и подать еще одну короткую команду на кнопку PLAY (0,1 сек), что б перевести его в режим
плеера. затем при замыкании кнопки S2 (коротком, длинном, должно все равно каким) на кнопку PLAY подаётся короткий сигнал 0,1 сек от чего плеер начинает воспроизводить музыку
и пока он ее воспроизводит (определенное время, скажем пусть будет 15 сек) состояние кнопки S2 никак не должно влиять на работу плеера в течении этого времени, по
истечению 15 секунд она должна вернуться к ожиданию нажатия на кнопку.
Пожалуйста, помогите со стетчем, наставьте на пусть истинный))
Всем огромное человеческое спасибо!
Не наблюдаю скетча, с которым нужно помочь.
Вот с ним и надо помочь, его как бы вообще нету у меня))
Прям совсем не умею, но я обязательно научусь!
Спасибо!
Вот с ним и надо помочь, его как бы вообще нету у меня))
Это называется написать скетч за тебя, а не помочь. Помогают только с уже имеющимся скетчем, чтобы исправить в нём ошибки. Поэтому либо учись, либо в платный раздел (ссылку на который дал ЕвгенийП).
За совет конечно спасибо! Вот что у меня получилось,
Та часть, что void setup, в принцепе работает как надо и меня устраивает, то что в loop не совсем получается, не как не могу понять логику работы.
Суть такая, что после срабатывания датчика на sensor_pin (будет HIGH на время от 1 до 20 сек), тем временем на выходе play_pin должен появится сигнал HIGH на 100 мс, а после он не должен ни как реагировать на sensor_pin в течении 15 сек., через 15 секунд он должен опять ждать HIGH, что бы снова подать сигнал HIGH на play_pin 100 мс.
Или вот есть какой вариант, у сенсора группа контактов на переключение, может ее как то задействовать?
Есть мысли какие?
Спасибо!
Та часть, что void setup, в принцепе работает как надо и меня устраивает, то что в loop не совсем получается, не как не могу понять логику работы. Суть такая, что после срабатывания датчика на sensor_pin (будет HIGH на время от 1 до 20 сек), тем временем на выходе play_pin должен появится сигнал HIGH на 100 мс, а после он не должен ни как реагировать на sensor_pin в течении 15 сек., через 15 секунд он должен опять ждать HIGH, что бы снова подать сигнал HIGH на play_pin 100 мс. Или вот есть какой вариант, у сенсора группа контактов на переключение, может ее как то задействовать? Есть мысли какие? Спасибо!
А зачем тогда пишете программу? Если Вы не понимаете логику работы системы, программу писать рано.
Сядьте с листом бумаги и распишите логику от начала и до конца. И только когда Вы будете её чётко понимать, только тогда можно приступать к разработке программы.
Логика работы того, что я хочу сделать, мне ясна и понятна, а вот как это сделать программно, мне не ясно.
Поэтому я тут и прошу помощи.
А советы типа " в платный раздел" "сядь с листком" "иди учи" мне к сожалению не помогут.
Я специалист не много в другой сфере и учавствую в форумах и конферециях и не когда не кого не куда не отправлял, если у кого то были вопросы и просьбы о помощи в моей сфере.
А вот тут попросили меня сделать сеё устройтво, ну просить больше не кого, я взялся помочь, прошу заметить, не на платной основе, а совершенно безвозмездно, те даром))!
Евгений, спасибо за совет и помощь.
Логика работы того, что я хочу сделать, мне ясна и понятна,
Это Вам так кажется.
Давайте разбираться что Вы тут написали:
Итак,
1.
факт срабатывания датчика мы фикируем по появлению HIGH на sensor_pin на период времени от 1 до 20 сек. Сразу вопрос - факт того, того, что датчик сработал мы фиксируем в момент появления HIGH? Через 1 сек после появления HIGH (если он ещё не исчез), через 20 секунд? Или может быть "после исчезновения HIGH, при условии что он там был от 1 до 20 секунд"? В какой конкретно момент времени мы принимаем решение, что датчик сработал?
2.
"тем временем на выходе play_pin должен появится сигнал HIGH на 100 мс"
Каким "тем" временем? В момент появления HIGH на sensor_pin? В моент его исчезновения? В общем, смотрите перечисление в п. 1 выше, и разберитесь таки каким именно "тем временем".
3.
"после он не должен ни как реагировать на sensor_pin в течении 15 сек., через 15 секунд он должен опять ждать HIGH"
А если HIGH c sensor_pin всё ещё не исчез? Ведь 15 сек меньше 20, которые от там может торчать. Тогда что?
Вот и думайте насколько Вы хорошо понимаете задачу.
А без ответов на все приведённые вопросы программировать невозможно - компьютер не понимает выражений типа "тем временем", нужно всё определить точно. И пока Вы этого не сделаете, даже не приступайте к программированию.
А советы типа " в платный раздел" "сядь с листком" "иди учи" мне к сожалению не помогут.
А что Вам может помочь? Если самостоятельно "сесть с листком" Вы не желаете, заплатить тому, кто сядет за Вас, тоже не хотите. Что же Вам может помочь? Какой именно помощи Вы ожидаете?
факт срабатывания датчика мы фикируем по появлению HIGH на sensor_pin на период времени от 1 до 20 сек. - Именно так, для полноты картины, этот датчик- Геркон на двери, когда дверь откывается на sensor_pin приходит значение HIGH которое в свю очередь формирует 1 сигнал HIGH длительностью 100 мс на play_pin (это то, что я назвал "тем временем), это нужно для того, что бы плеер начал воспроизводить файл, вот и пока он воспроизводится состояние входа sensor_pin должно игнорироваться или блокироваться чем либо.
Вот, по сути, тот код, что я показал, так работает, но хотельсь бы сделать кое что еще т.к. при постоянно открытой двери получается, что play_pin через каждые 15 сек HIGH и это ведет к повтору воспроизведения файла, желательно сделать так, что бы повторное воспроизвдение было только после прохода sensor_pin через LOW (дверь закрыли-открыли) , но при этом если файл воспроизводится, то открытие-закртытие ни как не влияло.
Спасибо
Сделайте переменную playEnable, которая будет превращаться в true. когда play_pin == LOW. И играйте музыку только тогда, когда playEnable == true (т.е. когда-то до этого момента случилось закрытие двери) и play_pin == HIGH (дверь в этот момент открыта) . Как отыграли - playEnable переводите в false.
Так понятно?
Логика работы того, что я хочу сделать, мне ясна и понятна, а вот как это сделать программно, мне не ясно.
Так не бывает.
Если Вам ясна и понятна логика, то написать программу очень просто:
1. Подробно описываете по-русски логику работы (это творческий процесс).
2. Переводите написанное с одного языка (русского) на другой (С++) - это процесс чисто механический.
Суть понятно, не сложно ли будет Вам отобразить в виде части кода?
Спасибо!
Суть понятно, не сложно ли будет Вам отобразить в виде части кода?
Сложно.
Коллега Вам написал тоже самое, что и я раньше - Вы не проработали логику работы системы. Ваше "факт срабатывания датчика мы фиксируем по появлению HIGH на sensor_pin на период времени от 1 до 20 сек" это не описание логики, а эмоции и разведение руками. Вы же так и не ответили на мои вопросы из поста #9.
А до тех пор, пока логика работы не вполне ясна, писать код не просто сложно, а настолько сложно, что бесполезно, ибо вероятность успеха исчезающе мала.
Ощущение, что Вы просто не понимаете, что Вам говорят. Давайте я попробую объяснить ещё раз по-другому (на примере). Если останутся непоянтки, то ... либо просите другого объяснять, либо смиритесь, что эта деятельность не для Вас - у людей разные стили мышления, для этой работы нужно быть изрядным занудой, а если Вы по стилю мышления – художник, то это не для Вас.
факт срабатывания датчика мы фикируем по появлению HIGH на sensor_pin на период времени от 1 до 20 сек. - Именно так
Итак, ещё раз. В ответ на мои вопросы о конкретике, Вы, по сути, повторили своё прежний тезис:
Отлично поехали определять.
1. Начали. На пине LOW - ждём.
..... появился HIGH. С этого момента начинаем отсчёт времени ....
2. Время 0с. На пине появилось HIGH. Пока мы не можем считать это срабатыванием, т.к. не знаем на сколько веремени появился этот HIGH.
.... прошла 1 секунда, на пине по-прежнему HIGH ....
3. Время 1с. Пока мы не можем считать это срабатыванием. Первая часть условия (от 1 сек) выполнилась, но вторая (до 20 сек) пока нет. Может HIGH там все 40 сек продержится и Ваше условие таким образом нарушится, откуда нам знать.
Далее возможны два варианта.
Вариант 1
или Вариант 2
Вот как-то так. Теперь думайте, Вы действительно хотите, чтобы факт сигнала фиксировался только тогда, когда дверь уже закроют? Боюсь, что нет. А по-другому, при Вашем описании, никак!
Так что, садитесь и расписывайте желаемую логику, но не "одной фразой ни о чём", а вот так, как я только Вашу логику прописал. И добивайтесь, чтобы всё было разумно и непротиворечиво.
Пока не распишете логику, ни о каком коде даже не думайте - рано!