#1 Re: Программирование Arduino » Задержка на время проигрывания трека (TMRpcm) » Вчора 22:00:50

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

#2 Re: Программирование Arduino » Задержка на время проигрывания трека (TMRpcm) » Вчора 20:29:43

г0сть пише:

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

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

#3 Re: Программирование Arduino » Задержка на время проигрывания трека (TMRpcm) » Вчора 14:32:30

г0сть пише:

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

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

#4 Программирование Arduino » Задержка на время проигрывания трека (TMRpcm) » Вчора 14:03:57

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

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

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

г0сть пише:

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

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

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

г0сть пише:

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

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

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

г0сть пише:

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

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

#8 Программирование 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.

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