уменьшить запись для пьезопищалки

Тема в разделе "Arduino & Shields", создана пользователем dethdron, 5 янв 2017.

  1. dethdron

    dethdron Нуб

    Имеется запись в setup при подаче питания проигрывается мелодия один раз но запись получается слишком большая как уменьшить размер? Может можно как то избавиться от постоянного delay и как вадно мелодия состоит из двух одинаковых частей !
    Код (C++):
     pinMode(soundPin, OUTPUT);

      // tone(pin, note, duration)
      tone(10, 3520.0, 501);
      delay(50);
      tone(10, 3135.96, 50);
      delay(50);
      tone(10, 2637.02, 50);
      delay(50);
      tone(10, 2093.00, 50);
      delay(50);
      tone(10, 2349.32, 50);
      delay(50);
      tone(10, 3951.07, 50);
      delay(50);
      tone(10, 2793.83, 50);
      delay(50);
      tone(10, 4186.01, 50);
      delay(50);
      tone(10, 3520.01, 50);
      delay(50);
      tone(10, 3135.96, 50);
      delay(50);
      tone(10, 2637.02, 50);
      delay(50);
      tone(10, 2093.00, 50);
      delay(50);
      tone(10, 2349.32, 50);
      delay(50);
      tone(10, 3951.07, 50);
      delay(50);
      tone(10, 2793.83, 50);
      delay(50);
      tone(10, 4186.01, 50);
     
  2. ANV

    ANV Гуру

    Сделать массив, каждый элемент которого это длительность и частота.
     
  3. Arkad_snz

    Arkad_snz Гик

    Вообще, каждая нота - это тройка (частота, длительность, пауза)
     
  4. dethdron

    dethdron Нуб

    вообщем сделал!

    это до - Скетч использует 7 448 байт (103%) памяти устройства. Всего доступно 7 168 байт.

    это после - Скетч использует 7 110 байт (99%) памяти устройства. Всего доступно 7 168 байт.

    запись получилась вот такая

    int frequences[16] = {3520, 3135, 2637, 2093, 2349, 3951, 2793, 4186, 3520, 3135, 2637, 2093, 2349, 3951, 2793, 4186}; // мелодия старта
    int durations = 50;
    int soundPin = 10;

    void setup(){
    for (int i=0; i<16; i++)
    {
    tone(soundPin, frequences, durations);
    delay (50);
    }
    }
     
  5. Arkad_snz

    Arkad_snz Гик

    Добавь еще speed [0-1.0] и все durations и delay помножай на (1-speed)
    0 - нормальная скорость
    0.5 - порезвее
    0.9 - быстро
     
  6. mcureenab

    mcureenab Гуру

    Фальшивит расстроенный инструмент)))
    Тут наверное пропущено.

    Код (C++):
    tone(soundPin, frequences[i], durations);
    В старой книжке читал, что данных в программе должно быть гораздо больше чем методов. Т.е. методы, реализуют базовые операции решаемой задачи, а данные рулят процессом.
    И в общем менять данные должно быть проще, чем код.

    Еще можно вместо нот проиграть кусок кода)))

    И данные которые нужны только для запуска можно собрать в union с прочими переменными, которые позже понадобятся.
     
    Последнее редактирование: 5 янв 2017
  7. dethdron

    dethdron Нуб

    Все в порядке) играет как надо издает звук "аля" r2d2 все ноты одинаковой длительности с одинаковыми паузами