Генерирует на выводе прямоугольный сигнал заданной частоты (с коэффициентом заполнения 50%). Функция также позволяет задавать длительность сигнала. Однако, если длительность сигнала не указана, он будет генерироваться до тех пор, пока не будет вызвана функция noTone(). Для воспроизведения звука вывод можно подключить к зуммеру или динамику.
В каждый момент времени может генерироваться только один сигнал заданной частоты. Если сигнал уже генерируется на каком-либо выводе, то использование функции tone() для этого вывода просто приведет к изменению частоты этого сигнала. В то же время вызов функции tone() для другого вывода не будет иметь никакого эффекта.
Использование функции tone() может влиять на ШИМ-сигнал на выводах 3 и 11 (на всех платах, кроме Mega).
Ключевое слово const обозначает константу. Это спецификатор, который изменяет поведение переменной и делает ее доступной только для чтения. Другими словами, эта переменная может использоваться так же, как и любая другая переменная этого же типа, однако ее значение изменить нельзя. Если вы попытаетесь переприсвоить значение константе, компилятор выдаст ошибку.
На константы, обозначенные ключевым словом const, распространяются те же правила области видимости, как и для обычных переменных. Именно поэтому использование ключевого слова keyword при объявлении констант более предпочтительно, чем использование директивы #define.
volatile - это ключевое слово, известное как спецификатор переменной. Как правило, употребляется перед указанием типа переменной, чтобы изменить порядок ее обработки компилятором и последующей программой.
Объявление переменной как volatile - это директива компилятору. Компилятор - программа, которая переводит программный код C/C++ в машинный код, представляющий собой набор команд для микроконтроллера ATmega в Ардуино.
По сути, эта директива заставляет компилятор размещать переменную в ОЗУ, а не во внутренних регистрах, использующихся для временного хранения и обработки различных переменных. При определенных условиях, значение переменной, хранимой в регистрах, может быть неточным.
Ключевое слово static используется для создания переменных, которые будут видны только одной функции. Однако, в отличие от локальных переменных, которые создаются и уничтожаются при каждом вызове функции, переменные static сохраняют свое значение между вызовами.
Переменные, объявленные как static, создаются и инициализируются только при первом вызове функции.