Запуск MP3 по значению фоторезистора

МоделистКонстру...
Offline
Зарегистрирован: 15.07.2018

Добрый день, прошу помочь с кодом, что не так, mp3 не запускается (((

 

const int pinPhoto = A0;
#include <SoftwareSerial.h>    // библиотека для для обмена данными 
#include <DFPlayer_Mini_Mp3.h> // подключаем библиотеку для DFPlayer Mini
int raw = 0;
 
void setup() {
  Serial.begin(9600);
  pinMode( pinPhoto, INPUT );
   mp3_set_serial(Serial); // включаем передачу данных с DFPlayer mini mp3
    delay(1);               // задержка в 1ms для установки громкости
    mp3_set_volume(6);     // устанавливаем громкость от 0 до 30
    mp3_set_EQ(0);          // устанавливаем эквалайзер от 0 до 5
}
 
void loop() {
  raw = analogRead( pinPhoto );
 // Serial.println( raw );
 // delay(1000);
  
  if( raw < 800) mp3_play(2);
 
 
}
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вставьте код нормально.

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

По отдельности работает? 

Можешь привесто код, который

1. Просто заупскает плеер (без резистора)

2. Просто зажигает светодиод на 13-ом пине при нужной освещённости (без плеера).

Так можешь? И оно работает?

Приведи пожалуйста эти два кода только работающих!

И перевставь общий код правильно.

МоделистКонстру...
Offline
Зарегистрирован: 15.07.2018

Отдельно mp3 работает

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

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

void loop() // процедура loop
{
    mp3_play(2); // проигрываем файл mp3/0001.mp3
    delay(5000); // задержка 5 секунд

    mp3_next();  // проигрываем следующий файл
    delay(5000); // задержка 5 секунд

    mp3_play(4); // проигрываем файл mp3/0004.mp3
    delay(5000); // задержка 5 секунд

    mp3_prev();  // проигрываем предыдущий файл
    delay(5000); // задержка 5 секунд

 

и Отдельно скетч фоторезистор с монитором порта работает

 

 

МоделистКонстру...
Offline
Зарегистрирован: 15.07.2018
const int pinPhoto = A0;
#include <SoftwareSerial.h>    // библиотека для для обмена данными 
#include <DFPlayer_Mini_Mp3.h> // подключаем библиотеку для DFPlayer Mini
int raw = 0;

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

void loop() {
  raw = analogRead( pinPhoto );
 // Serial.println( raw );
 // delay(1000);
  
  if( raw < 800) mp3_play(2);

 

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

Ну так скетч постоянно перезапускает mp3_play(). Задержку кто будет делать - Пушкин АС?

МоделистКонстру...
Offline
Зарегистрирован: 15.07.2018

Заработало!, Спасибо. Подскажите команду для работы с диапазонами показайний фоторезистора, что бы в в одном инервале запускался один файл, в другом интервале другой. Заранее спасибо.

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

Команда называется if()

МоделистКонстру...
Offline
Зарегистрирован: 15.07.2018

Спасибо, поможете с вопросом выше?

МоделистКонстру...
Offline
Зарегистрирован: 15.07.2018

Это понятно.

 

if (raw < 800 )mp3_play(31);

 

Как поставить вместо меньше 800, диапазон, что то типа >100 и <200

 

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

А я что сделал? 

Хорошо, подскажу поисковый запрос: "с++ if диапазон значений"

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

МоделистКонструкторович пишет:

Как поставить вместо меньше 800, диапазон, что то типа >100 и <200

Есть такие страшно-секретные операции И и ИЛИ изучите внимательно, причём всё, а не только эти операции.

А потом так и пишите

x > 100 И x < 200

Вот и получится Ваш интервал.

МоделистКонстру...
Offline
Зарегистрирован: 15.07.2018
const int pinPhoto = A0;
#include <SoftwareSerial.h>    // библиотека для для обмена данными 
#include <DFPlayer_Mini_Mp3.h> // подключаем библиотеку для DFPlayer Mini
int raw = 0;

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

void loop() {
  raw = analogRead( pinPhoto );
 // Serial.println( raw );
 // delay(100);
  
  if( raw >= 11 && raw < 50) mp3_play(31);
  delay(1000);
 return 0;
   else
  if( raw >= 51 && raw < 150) mp3_play(32);
  delay(1000);
 return 1;
   else
  if( raw >= 151 && raw < 650) mp3_play(33);
  delay(1000);
 return 2;
   else
   return 0;
  if( raw >= 651 && raw < 800) mp3_play(34);
  delay(1000);


}

 

ругается что последнее else без значения if )))

 

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

Потомушто надо внимательно читать про фигурные скобки: http://arduino.ru/Reference/If

Или return-ы убрать.

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

Не "или", а "и". Поторопился жать "сохранить"

МоделистКонстру...
Offline
Зарегистрирован: 15.07.2018

Благодарю

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

МоделистКонструкторович пишет:

void loop() {
... 
 return 0;
...
 return 1;
...
 return 2;
...
   if( raw >= 651 && raw < 800) mp3_play(34);
  delay(1000);
}

А Вас ни разу не смущает, что из функции, описанной как void, Вы пытаетесь вернуть какие-то значения. Да ещё и не во всех ветках?

МоделистКонстру...
Offline
Зарегистрирован: 15.07.2018

Да, тут ошибка, уже убрал. Все заработало.