Запуск воспроизведения аудио записи при размыкании концевика DF Player

Anton555
Offline
Зарегистрирован: 23.01.2017

Доброго вермени суток. 

Сделал програмку которая должна была проигрывать музыку при срабатывыании концевика. 

При открывании шкатулки, концевик размыкается и должна играть музыка, но этого не происходит(((

Если без кнопки програмно запускать то все работает, как только добавляю кнопку с условием (если) то сразу перестает работать, что я делаю не так? 

Спасибо за Ваше время. 

а вот и скетч: 

 




#include <SoftwareSerial.h>    // библиотека для для обмена данными 
#include <DFPlayer_Mini_Mp3.h> // подключаем библиотеку для DFPlayer Mini



int button = 2;

void setup() //
{
    Serial.begin(9600);
    mp3_set_serial(Serial); // включаем передачу данных с DFPlayer mini mp3
    delay(1);               // задержка в 1ms для установки громкости
    mp3_set_volume(15);     // устанавливаем громкость от 0 до 30
    mp3_set_EQ(0);          // устанавливаем эквалайзер от 0 до 5
    pinMode(button, INPUT);
}



void loop(){

if (digitalRead(button) == LOW) {

  mp3_play(1); // проигрываем файл mp3/0001.mp3
  delay(99999999); (Проигрываем файл до тех пор пока ардуину не перезапустят)

}



}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Кнопка как подключена - с резистором на +5V или нет? Гарантированное "Пока не перезапустят" - это while(true);

Anton555
Offline
Зарегистрирован: 23.01.2017

Это не просто кнопка. 
Это готовый модуль, я так понмаю, резисторы цеплять тут не нужно.

sadman41
Offline
Зарегистрирован: 19.10.2016

Советую прозвонить. Сдается мне, что там резистор только на светодиоде. Если более черненьких деталей цифрами нет на плате, то шарахните INPUT_PULLUP вместо INPUT в своем скетче.

Anton555
Offline
Зарегистрирован: 23.01.2017

Измерил сопротивление, если положение вкл, получилось 0 ом. 

изменил программу, написал  INPUT_PULLUP вместо INPUT, результат тот же 

strarbit
Offline
Зарегистрирован: 12.06.2016

если свитч концевик нажат, то сигнал `0` и led включен, иначе сигнал `1` и led выключен

 

Image already added
 
 
 
sadman41
Offline
Зарегистрирован: 19.10.2016

Anton555 пишет:

Измерил сопротивление, если положение вкл, получилось 0 ом. 

изменил программу, написал  INPUT_PULLUP вместо INPUT, результат тот же 

А что, если вместо запуска мелодии поджигать светодиод - тоже не работает? Я вот ничего в этих трех строчках с условием криминального не вижу. Разве что delay на while(1) заменил бы.

Провод от концевика на тот вход подсоединен, что проверяется в скетче?

mixail844
Offline
Зарегистрирован: 30.04.2012

а ничего что пока идет

delay(999999)

условие if просто не проверяется? 

upd : по условиям задачи,там этого и ненадо.

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Так ему и не надо постоянно проверять вроде как - один раз тыкнул и пошла музыка бесконечная.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Anton555,

так она же у Вас не компилируется. А потому и не загружается. В 25-ой строке пропущен знак начала комментария. Вы на сообщения-то смотрите?

------------------

Если же на самом деле компилируется, только Вы нас обмануть рещили и неправильный код вставили, то сделайте какой-нибудь индикатор прохождения loop (хоть как у меня ниже).

//#include <SoftwareSerial.h>    // *** Это нигде не используется - нафиг выьрасываем
#include <DFPlayer_Mini_Mp3.h> // подключаем библиотеку для DFPlayer Mini

int button = 2;

void setup() {
  Serial.begin(9600);
  mp3_set_serial(Serial); // включаем передачу данных с DFPlayer mini mp3
  delay(1);               // задержка в 1ms для установки громкости
  mp3_set_volume(15);     // устанавливаем громкость от 0 до 30
  mp3_set_EQ(0);          // устанавливаем эквалайзер от 0 до 5
  pinMode(button, INPUT);
  pinMode(LED_BUILTIN, OUTPUT); // 13-ый пин будет индикатором
}



void loop() {
	delay(1000); // чтобы не слишком часто дёргалось и мы успевали рассмотреть
	
	// здесь делаем короткое мигание - признак начала прохода loop
	digitalWrite(LED_BUILTIN, LOW);
	delay(100);
	digitalWrite(LED_BUILTIN, HIGH);
	delay(100);
	digitalWrite(LED_BUILTIN, LOW);
	delay(100);

	// здесь выводми на 13-ый пин состояние кнопки
	digitalWrite(LED_BUILTIN, digitalRead(button));
	
	if (digitalRead(button) == LOW) {
		mp3_play(1); // проигрываем файл mp3/0001.mp3
		while(true); // (Проигрываем файл до тех пор пока ардуину не перезапустят)
	}
}

Потом зажмите кнопку и держите не менее 1 сек. Если LOW он нажатия кнопки ничего не меняется и цикл миганий продолжается, то разбирайтесь с концевиком. Если же при нажатии кнопки светодиод на 13-ом гаснет и больше не дёргается - разбирайтесь почему у Вас не срабатывает запуск музыки.

Скажите, что получилось.

Gugnin Anton
Offline
Зарегистрирован: 05.10.2020

Делей уберите и все заработает.