Копия примера кода Arduino для функции tone() выдает ошибку компиляции: 'tone' is not declared in this scope. Как исправить?
Это 32-разрядный процессор ядра ARM — SAM3X8E ARM Cortex-M3.
Ошибка:
sketch_nov16b\sketch_nov16b.ino: In function 'void setup()': sketch_nov16b:49:43: error: 'tone' was not declared in this scope tone(8, melody[thisNote], noteDuration);
^ sketch_nov16b:61:13: error: 'noTone' was not declared in this scope noTone(8);
^ exit status 1 'tone' was not declared in this scope
Код:
/*
Мелодия
Играет мелодию
схема:
- Динамик 8 Ом на цифровом контакте 8
создано 21 января 2010 г.
изменено 30 августа 2011 г.
Том Айго
Этот пример кода находится в свободном доступе.
https://www.arduino.cc/en/Tutorial/Tone
*/
#include "pitches.h"
// ноты в мелодии:
int melody[] = {
NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4
};
// длительность нот: 4 = четвертная нота, 8 = восьмая нота и т. д.:
int noteDurations[] = {
4, 8, 8, 4, 4, 4, 4, 4
};
void setup() {
// перебираем ноты мелодии:
for (int thisNote = 0; thisNote < 8; thisNote++) {
// чтобы вычислить длительность ноты, разделите одну секунду на тип ноты.
//например, четвертная нота = 1000/4, восьмая = 1000/8 и т. д.
int noteDuration = 1000 / noteDurations[thisNote];
tone(8, melody[thisNote], noteDuration);
// чтобы различать ноты, установите минимальное время между ними.
// продолжительность ноты +30%, кажется, работает хорошо:
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
// остановить воспроизведение тона:
noTone(8);
}
}
void loop() {
// не нужно повторять мелодию.
}
@JohnB, 👍0
Обсуждение1 ответ
Короче говоря, они просто никогда не реализовали tone()
в ядре Due/SAM.
Таким образом, обычная функция tone()
у вас не заработает.
Заголовокtone.h пустой.
Вероятно, им следует предпринять ряд действий, которые могли бы дать более четкое предупреждение об этом.Соответствующий файл .cpp был переименован в .cpp.disabled, поэтому попытки его компиляции не предпринимаются, и он полный AVR-кода, который они скопировали в проект для справки с намерением заменить его, но так и не сделали.
Существует проблема с github, отслеживающая это. Но он не обновлялся с 2020 года. Эта проблема ссылается на форум Arduino, очевидно рабочий альтернативный код для создания тонов. Так что, возможно, попробуйте их код.
Я не вижу какой-либо популярной альтернативы в виде библиотеки Arduino для создания простых тонов. Однако в чипе есть ЦАП и аудиобиблиотека. Это немного излишне для создания базовых тонов, но вы можете изменить пример там, чтобы заполнить буфер сигналом тона, а не загружать его из файла SD-карты.
- Что мне делать с StackOverflow при ошибке компиляции?
- Проблема с преобразованием скетча из SPIFFS в LittleFS – нет функции сопоставления для ошибки вызова
- Как компилировать, загружать и контролировать через командную строку Linux?
- Предупреждение при проверке скетча с кодом VS
- esp32, platformio A fatal error occurred: Packet content transfer stopped (received 8 bytes) *** [upload] Error 2
- Компиляция идет медленно
- Экран LCD 16*02 I2C показывает только первый напечатанный символ
- Будет ли .ino-скетч ардуино компилироваться непосредственно на GCC-AVR?
Какое ядро вы используете?, @Edgar Bonet
Это 32-битный процессор ядра ARM — процессор SAM3X8E ARM Cortex-M3., @JohnB
Соответствует ли это запросу jsotola?sketch_nov16b\sketch_nov16b.ino: В функции void setup(): Sketch_nov16b:49:43: ошибка: «тон» не был объявлен в этой области тон (8, мелодия [thisNote], noteDuration); ^ Sketch_nov16b:61:13: ошибка: «noTone» не был объявлен в этой области noTone(8); ^ статус выхода 1 «тон» не был объявлен в этой области, @JohnB
@JohnB Я сказал: «не вставлять в комментарий», а вы вставили в комментарий… этот сайт не является форумом… это сайт вопросов и ответов… вся информация должна содержаться в вопросе, @jsotola