уменьшить размер записи

dethdron
Offline
Зарегистрирован: 10.08.2016

приветствую  вссех, имеется воот такая запись выполняимая в setup один раз( мелодия для пьезопищалки). запись слишком громоздкая и занимает лишнюю необходимую память как можно уменьшить ее и оптимизировать?

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);

 

xazard
Offline
Зарегистрирован: 04.01.2017

Я новичек в программировании на ардуино, но где тут память занимается? Вы исполняете одно и тоже несколько раз, выполняя задержку и метод tone() из библиотеки видимо...
Создайте метод void initSound(){тут ваш код}, вызовите его вместо этого забора.
Надеюсь не играю в капитана.

dethdron
Offline
Зарегистрирован: 10.08.2016

Дело в том что при удалени половины  и уменьшении количества строк размер скетча заметно уменьшаеться, мне это необходимо для того что бы размер всей программы робота уместился в atmega8 так как их валяется несколько штук и надо куда то их применить) 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

создай массив const int и циклом извлекай и проигрывай.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

1.у функции tone() второй аргумент - целое, а не дробное. Поэтому писать дробное - это в два раза больше памяти и более ничего.Итого  -32 байта.

2. комбинацию из tone() и delay() можно описать одной функцией и будет экономия еще более 100 байт (от оптимизатора зависит - лень проверять)

dethdron
Offline
Зарегистрирован: 10.08.2016

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

это до -  Скетч использует 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[i], durations);
    delay (50);
}
}

 

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014
ВЫ используете 2 одиноковых блока с 4 по 19 и с 20 по 34
В масив Вы тоже так записали
Может лучше использовать один блок и проиграть его 2 раза?