уменьшить размер записи
- Войдите на сайт для отправки комментариев
Чт, 05/01/2017 - 00:13
приветствую вссех, имеется воот такая запись выполняимая в 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);
Я новичек в программировании на ардуино, но где тут память занимается? Вы исполняете одно и тоже несколько раз, выполняя задержку и метод tone() из библиотеки видимо...
Создайте метод void initSound(){тут ваш код}, вызовите его вместо этого забора.
Надеюсь не играю в капитана.
Дело в том что при удалени половины и уменьшении количества строк размер скетча заметно уменьшаеться, мне это необходимо для того что бы размер всей программы робота уместился в atmega8 так как их валяется несколько штук и надо куда то их применить)
создай массив const int и циклом извлекай и проигрывай.
1.у функции tone() второй аргумент - целое, а не дробное. Поэтому писать дробное - это в два раза больше памяти и более ничего.Итого -32 байта.
2. комбинацию из tone() и delay() можно описать одной функцией и будет экономия еще более 100 байт (от оптимизатора зависит - лень проверять)
вообщем сделал!
это до - Скетч использует 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); } }