Вопрос по проекту Кашляющая пепельница

Тема в разделе "Arduino & Shields", создана пользователем sanik, 10 апр 2015.

  1. sanik

    sanik Гик

    Подскажите пожалуйста как изменить код чтобы запустить воспроизведение нескольких треков по таймеру вместо датчика, и не было ограничений времени трека?
    Код (Text):
    #include <SoftwareSerial.h>
    #include <DFPlayer_Mini_Mp3.h>
    // даём разумное имя для пина к которому подключен датчик
    #define MQ2_PIN A0
    // длительность трека
    #define INTERVAL_PLAY 10000
    // интервал вывода информации в Serial
    #define INTERVAL_SERIAL 1000
    // погрешность на случайные наводки датчика
    #define DELTA 20
    // инициализируем новый последовательный порт (RX 10, TX 11)
    SoftwareSerial mp3Serial(10, 11);
    int flag = 0;
    int mq2 = 0;
    int previous_mq2 = 0;
    // Массив 10 значений c датчика
    int mass_mq2[10] = {0};
    // переменная для хранения текущего время работы программы в мс
    unsigned long currentMillis = 0;
    // переменная для хранения времени работы программы
    // с последнего резкого вверх скачка вредных газов
    long previousMillisPlay = 0;
    // переменная для хранения времени работы программы
    // с последнего вывода данных в Serial
    long previousMillisSerial = 0;
    void setup()
    {
      // начало связи через HardwareSerial
      Serial.begin(9600);
      // начало связи через SoftwareSerial
      mp3Serial.begin(9600);
      // для нормальной работы DFPlayer
      // требуется задержка от 5 до 15 секунд
      delay(5000);
      // выбор Serial для упрапвления DFPlayer
      mp3_set_serial(mp3Serial);
      // установка громкости и к ней задержка
      mp3_set_volume(30);
      delay(1000);
    }
    void loop()
    {
      // обнуляем текущее значение датчика
      mq2 = 0;
      // Считывание 10 значений с датчика
      for (int i = 0; i < 10; i++) {
        mass_mq2[i] = analogRead(MQ2_PIN);
        delay(100);
        mq2 = mq2 + mass_mq2[i];
      }
      // считаем среднее арифметическое
      mq2 = mq2 / 10;
      // если программа выполняется впервые, то
      // запись текущего значения датчика
      if (flag == 0) {
        previous_mq2 = mq2;
      }
      flag = 1;
      // считываем текущее время работы программы
      currentMillis = millis() + INTERVAL_PLAY;
      // проверяем прошло ли 10 секунд с момента включения семпла
      if (currentMillis - previousMillisPlay > INTERVAL_PLAY) {
        // если текущее значение датчика
        // больше предыдущего включая погрешность
        // запись текущего времени для Play
        // и включаем случайный трек от 1 до 7
        if (mq2 > previous_mq2 + DELTA) {
          previousMillisPlay = currentMillis;
          mp3_play(random(1, 8));
          Serial.println("Play");
        } else {
          previousMillisPlay = 0;
        }
      }
      // Вывод результатов в Serial:
      sensorPrint();
      // запись текущего значения датчика
      previous_mq2 = mq2;
    }
    // Функция выводва значений в Serial
    void sensorPrint()
    {
      // значения будут выводиться каждую секунду
      if (currentMillis - previousMillisSerial > INTERVAL_SERIAL) {
        // запись текущего времени для Serial
        previousMillisSerial = currentMillis;
        Serial.print("Previous MQ2 = ");
        Serial.println(previous_mq2);
        Serial.print("Sensor MQ2 = ");
        Serial.println(mq2);
        Serial.println();
      }
    }
     
  2. sanik

    sanik Гик

    Трреки нужно воспроизводить по порядку