Ви не увійшли.
Сторінки 1
Всё, разобрался. На другом форуме вычитал что параллельно питанию необходимо установить конденсатор 22 мкф (собственно он всю малину и портил, периодически, как я понимаю, просаживая питание на DFPlayerMini). Сейчас как часики.
Тему можно закрывать.
Всем бобров.
Ммде... Забыл delay после "myMP3.play(RandomNumber);".
Частично проблема решилась. Треки воспроизводятся, но иногда не срабатывают. Возможно дело в кнопке?..
Хотя, если использовать ресет на плате UNO- ситуация аналогичная. По некой причине иногда треки не воспроизводятся...
Доброго времени суток уважаемые форумчане.
Пытаюсь сделать некое подобие звонка с рандомным звуковым сигналом при нажатии на кнопку. Код работал исправно пока я не начал играть с режимом сна. После ресета звукового сигнала нет и не загорается диод на DFPlayerMini. Пытался прописать пробуждение в начале, чтобы при ребуте устройство просыпалось, но это ничего не изменило. Подскажите пожалуйста, в чём у меня косяк? Заранее благодарен.
С ув. athe.
#include <SoftwareSerial.h>
#include <DFPlayerMini_Fast.h>
long RandomNumber;
SoftwareSerial mySerial(10, 11); // RX, TX
DFPlayerMini_Fast myMP3;
void setup()
{
Serial.begin(115200);
mySerial.begin(9600);
myMP3.begin(mySerial);
Serial.println("Waking up");
myMP3.wakeUp();
Serial.println("Setting volume to max");
myMP3.volume(30);
delay(20);
randomSeed(analogRead(0));
RandomNumber = round(random(20, 90)/10); // сейчас работает от 2 до 9 файла.
Serial.println(RandomNumber);
delay(20);
myMP3.play(RandomNumber);
Serial.println("Sleeping mode");
myMP3.sleep();
}
void loop()
{
}
Проще - это понажимать кнопки, поморгать тем же светодиодом...
Светодиодами я честно поморгал. Почитываю книжку "Программируем Arduino". Просто на интересных проектах оно и разбираться веселей. ^^
Весьма вам благодарен.
Вопрос решён.
И сразу за такие вещи браться? С чего-нибудь попроще начинать надо.
Мне казалось что куда уж проще).
По поводу кода, работает. В исходном виде есть небольшой фон (вполне допустимый) после открытия и закрытия датчика. Если строки поменять местами- фон усиливается.
Получилось так что от моего кода ничего и не осталось
Благодарю за помощь.
Хмм... Код вроде работает, но воспроизведения трека нет. Слышен только зумер при засветке фоторезистора. При закрытии оного зумер пропадает.
Зачем там вообще прерывания? Или у вас там еще какой-то суперкод скрывается?
Не, я просто неделю назад начал с ардуино разбираться...
Пошёл курить ваш код. Спасибо за помощь.
Начнем с того что где у вас в коде используется прерывание?
Здравствуйте. До сего момента я искренне верил что вот это:
attachInterrupt(0, DARK, CHANGE);
Пин D2 ардуино покдлючен к DO на модуле освещённости. При закрытии модуля освещённости проигрывание трека действительно прекращается.
Доброго времени суток уважаемые форумчане.
Продолжаю пилить свою "музыкальную шкатулку" (https://forum.arduino.ua/viewtopic.php?id=2632). Задумка такова что при открытии крышки свет попадает на модуль освещённости (LM393) и с SD карты начинает играть трек (~3 минуты). При закрытии крышки трек должен заглохнуть, а при новом открытии снова запуститься.
Код:
int pinA0 = A0; // Пин к которому подключен A0
int pinD0 = A1; // Пин к которому подключен D0
#include <EEPROM.h>
#include <SD.h> // Библиотека для SD Card.
#include <TMRpcm.h> // Библиотека TMRpcm 1.6.1 https://github.com/TMRh20/TMRpcm
TMRpcm tmrpcm; // create an object for use in this sketch.
void setup(){
tmrpcm.speakerPin = 9;
if (!SD.begin(4));
tmrpcm.volume(1);
attachInterrupt(0, DARK, CHANGE);
}
void DARK() {
tmrpcm.disable();
}
void loop()
{
pinMode (pinD0, INPUT);
pinMode (pinA0, INPUT);
int xA0, xD0;
xA0 = analogRead (pinA0);
xD0 = digitalRead (pinD0);
if (xA0 < 500){
tmrpcm.play("rickroll.wav");
delay (50000);
}
}
else {
tmrpcm.disable();
}
}
В общем и целом код работает, вот только пришлось добавить delay для того чтобы трек успевал поиграть какое-то время. Проблема состоит в том что при прерывании delay никуда не девается. Я пробовал использовать millis, но трек не играет. Такое впечатление что ардуино каждую секунду начинает трек заново.
unsigned long this_time;
...
...
if (xA0 < 500){
tmrpcm.play("rickroll.wav");
if(millis() - this_time > 50000) {
this_time = millis();
}
}
else {
tmrpcm.disable();
}
}
Подскажите пожалуйста, где я ошибся?
С уважением,
athe.
Загрузите код из указанного вами сайта. Посмотрите значение А0 при закрытой и открытой крышке. Потом пропишите их в условие в свой код, и замените хD0 на хА0
Да, я посмотрел комментарии кода в статье и понял что таки лопухнулся. Спасибо. Ещё я добавил "delay" на длину трека. Как я понимаю, программа пыталась воспроизвести трек в промежутке между замерами освещённости и я получал только белый шум. Нужно ещё придумать как сделать прерывание проигрывания в случае закрытия датчика освещённости. Через while как-то или attachInterrupt...
Что за модуль?
Модуль освещённости на LM393 (https://robotchip.ru/obzor-modulya-osve … sti-lm393/)
Тестировал код по статье выше- всё работает, а вот логика моего кода- не очень.
Плата- ардуино nano.
Ну так где опрос модуля освещенности?
Добрый день.
Модуль подключен на пины А0 и А1.
xD0 (как я понял)- числовое значение уровня освещённости.
Я пытался контролировать запуск трека с помощью условия "if (xD0 == HIGH)".
Доброго времени суток уважаемые форумчане.
Пытаюсь сделать некий аналог музыкальной шкатулки и никак не могу допереть как заставить всё это работать. Задумка следующая: открывается крышка коробки, внутри находится модуль освещённости который при дневном свете подаёт сигнал на проигрывание трека. При закрытии крышки- соответственно идёт сигнал на прекращение проигрывания трека.
Пока удалось только добиться просто проигрывания трека, но побороть модуль освещённости никак не могу.
Вот мои художества:
int pinA0 = A0;
int pinD0 = A1;
#include <EEPROM.h>
#include <SD.h>
#include <TMRpcm.h>
TMRpcm tmrpcm;
void setup(){
tmrpcm.speakerPin = 9;
if (!SD.begin(4));
tmrpcm.volume(2);
tmrpcm.play("rickroll.wav");
}
void loop()
{
pinMode (pinA0, INPUT);
pinMode (pinD0, INPUT);
int xA0, xD0;
xA0 = analogRead (pinA0);
xD0 = digitalRead (pinD0);
if (xD0 == HIGH){
tmrpcm.speakerPin = 9; // Динамик подключен к 9 - pin.
if (!SD.begin(4)); // Здесь можно изменить № pin-CS - pin 4.
tmrpcm.volume(2);
tmrpcm.play("rickroll.wav");
}
else {
tmrpcm.disable();
}
}
Буду благодарен за любую подсказку.
С уважением,
athe.
Сторінки 1