#1 Re: Програмування Arduino » Режим сна в DFPlayerMini_Fast » 2022-11-01 13:25:11

Всё, разобрался. На другом форуме вычитал что параллельно питанию необходимо установить конденсатор 22 мкф (собственно он всю малину и портил, периодически, как я понимаю, просаживая питание на DFPlayerMini). Сейчас как часики.
Тему можно закрывать.
Всем бобров.

#2 Re: Програмування Arduino » Режим сна в DFPlayerMini_Fast » 2022-11-01 12:58:17

Ммде... Забыл delay после "myMP3.play(RandomNumber);". big_smile
Частично проблема решилась. Треки воспроизводятся, но иногда не срабатывают. Возможно дело в кнопке?..
Хотя, если использовать ресет на плате UNO- ситуация аналогичная. По некой причине иногда треки не воспроизводятся...

#3 Програмування Arduino » Режим сна в DFPlayerMini_Fast » 2022-10-31 14:39:01

athe
відповідей: 2

Доброго времени суток уважаемые форумчане.
Пытаюсь сделать некое подобие звонка с рандомным звуковым сигналом при нажатии на кнопку. Код работал исправно пока я не начал играть с режимом сна. После ресета звукового сигнала нет и не загорается диод на 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()
{
}

#4 Re: Програмування Arduino » Задержка на время проигрывания трека (TMRpcm) » 2022-01-21 21:05:01

г0сть пише:

Проще - это понажимать кнопки, поморгать тем же светодиодом...

Светодиодами я честно поморгал. Почитываю книжку "Программируем Arduino". Просто на  интересных проектах оно и разбираться веселей. ^^

Весьма вам благодарен.
Вопрос решён.

#5 Re: Програмування Arduino » Задержка на время проигрывания трека (TMRpcm) » 2022-01-21 17:44:33

г0сть пише:

И сразу за такие вещи браться? С чего-нибудь попроще начинать надо.

Мне казалось что куда уж проще).

По поводу кода, работает. В исходном виде есть небольшой фон (вполне допустимый) после открытия и закрытия датчика. Если строки поменять местами- фон усиливается.
Получилось так что от моего кода ничего и не осталось  big_smile
Благодарю за помощь.

#6 Re: Програмування Arduino » Задержка на время проигрывания трека (TMRpcm) » 2022-01-19 22:00:50

Хмм... Код вроде работает, но воспроизведения трека нет. Слышен только зумер при засветке фоторезистора. При закрытии оного зумер пропадает.

#7 Re: Програмування Arduino » Задержка на время проигрывания трека (TMRpcm) » 2022-01-19 20:29:43

г0сть пише:

Зачем там вообще прерывания? Или у вас там еще какой-то суперкод скрывается?

Не, я просто неделю назад начал с ардуино разбираться... roll
Пошёл курить ваш код. Спасибо за помощь.

#8 Re: Програмування Arduino » Задержка на время проигрывания трека (TMRpcm) » 2022-01-19 14:32:30

г0сть пише:

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

Здравствуйте. До сего момента я искренне верил что вот это:
attachInterrupt(0, DARK, CHANGE);
Пин D2 ардуино покдлючен к DO на модуле освещённости. При закрытии модуля освещённости проигрывание трека действительно прекращается.

#9 Програмування Arduino » Задержка на время проигрывания трека (TMRpcm) » 2022-01-19 14:03:57

athe
відповідей: 11

Доброго времени суток уважаемые форумчане.
Продолжаю пилить свою "музыкальную шкатулку" (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.

#10 Re: Програмування Arduino » Запуск плеера (TMRpcm) посредством модуля освещённости » 2022-01-13 20:34:16

г0сть пише:

Загрузите код из указанного вами сайта. Посмотрите значение А0 при закрытой и открытой крышке. Потом пропишите их в условие в свой код, и замените хD0 на хА0

Да, я посмотрел комментарии кода в статье и понял что таки лопухнулся. Спасибо. Ещё я добавил "delay" на длину трека. Как я понимаю, программа пыталась воспроизвести трек в промежутке между замерами освещённости и я получал только белый шум. Нужно ещё придумать как сделать прерывание проигрывания в случае закрытия датчика освещённости. Через while как-то или attachInterrupt...

#11 Re: Програмування Arduino » Запуск плеера (TMRpcm) посредством модуля освещённости » 2022-01-13 18:36:40

г0сть пише:

Что за модуль?

Модуль освещённости на LM393 (https://robotchip.ru/obzor-modulya-osve … sti-lm393/)
Тестировал код по статье выше- всё работает, а вот логика моего кода- не очень.
Плата- ардуино nano.

#12 Re: Програмування Arduino » Запуск плеера (TMRpcm) посредством модуля освещённости » 2022-01-13 18:12:30

г0сть пише:

Ну так где опрос модуля освещенности?

Добрый день.
Модуль подключен на пины А0 и А1.
xD0 (как я понял)- числовое значение уровня освещённости.
Я пытался контролировать запуск трека с помощью условия "if (xD0 == HIGH)".

#13 Програмування Arduino » Запуск плеера (TMRpcm) посредством модуля освещённости » 2022-01-13 17:00:46

athe
відповідей: 7

Доброго времени суток уважаемые форумчане.
Пытаюсь сделать некий аналог музыкальной шкатулки и никак не могу допереть как заставить всё это работать. Задумка следующая: открывается крышка коробки, внутри находится модуль освещённости который при дневном свете подаёт сигнал на проигрывание трека. При закрытии крышки- соответственно идёт сигнал на прекращение проигрывания трека.
Пока удалось только добиться просто проигрывания трека, но побороть модуль освещённости никак не могу.
Вот мои художества:

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.

Підвал форуму