Природу звука мы рассматривали на уроке 3.16 "Звуковые колебания". Теперь попробуем создать звук, используя Arduino. Для этого нам потребуется пьезоизлучатель. Пьезоизлучатель имеет большое сопротивление, поэтому его можно подключить непосредственно к выводу Arduino. Так как работу мы начнем с уже знакомой вам программы Blink:
void setup() { pinMode(13, OUTPUT); } void loop() { digitalWrite(13, HIGH); delay(1000); // Wait for 1000 millisecond(s) - 1 секунда digitalWrite(13, LOW); delay(1000); // Wait for 1000 millisecond(s) - 1 секунда }подключим один вывод пьезоизлучателя к выводу 13, второй к общему проводу:
После запуска программы, пьезоизлучатель будет издавать щелчки, а на экране
мы увидим сигнал прямоугольной формы (меандр). Период сигнала T (время за
которое происходит один цикл колебания), как и ожидалось 2 секунды,
и действительно, в программе Blink у нас время ожидания, когда на
выводе 13 установлена единица - 1 секунда и еще одна секунда, когда
на выводе 13 установлен ноль. Так как период - величина обратная частоте, то
частота таких колебаний будет: f=1/T. В нашем случае, f=1/2=0.5 колебаний
в секунду, или 0,5 Гц. Эта частота лежит за границами воспринимаемого
человеческим ухом диапазона, мы её не слышим, а щелчки пьезоизлучателя - это
моменты перехода сигнала из 1 в 0 и обратно. Если бы сигнал менялся плавно
(синусоидальный сигнал), мы бы вообще ничего не услышали.
Давайте увеличим частоту, ну скажем в сто раз, до 50 Гц. Период таких
колебаний T=1/50=0.01 секунды или 10 миллисекунд.
void setup() { pinMode(13, OUTPUT); } void loop() { digitalWrite(13, HIGH); delay(10); // Wait for 10 millisecond(s) digitalWrite(13, LOW); delay(10); // Wait for 10 millisecond(s) }После запуска программы будет слышен гул, а на экране осциллографа мы увидим, что форма сигнала не изменилась, но он стал быстрее, чаще менять свое значение.
void setup() { pinMode(13, OUTPUT); } void loop() { digitalWrite(13, HIGH); delayMicroseconds(100); // Wait for 100 microsecond(s) - 0,1 миллисекунды digitalWrite(13, LOW); delayMicroseconds(100); // Wait for 100 microsecond(s) - 0,1 миллисекунды }После запуска мы услышим пронзительный писк, частотой 5 кГц.
tone(pin, frequency, duration)где pin - номер пина, на который будет выводиться частота; frequency - частота в Герцах; duration - длительность сигнала в миллисекундах. Длительность сигнала можно не указывать, но тогда сигнал будет генерироваться пока не будет вызвана функция noTone()
noTone(pin)где pin - номер пина, на который будет прекращен вывод сигнала;
void setup() { pinMode(13, OUTPUT); } void loop() { tone(13, 440); delay(1000); noTone(13); delay(1000); }
void setup() { pinMode(13, OUTPUT); } void loop() { tone(13, 440, 1000); delay(2000); }
int val; // объявление переменной типа integer val = 2; // присваивание переменной val, значение 2.Переменная слева от оператора присваивания (=) должна быть способна сохранить присваиваемое значение. Если оно выходит за диапазон допустимых значений, то сохраненное значение будет не верно.
result = val1 + val2; result = val1 - val2; result = val1 * val2; result = val1 / val2;val1 + val2 - любые переменные или константы; result - возвращаемое значение.
result = dividend % divisordividend - делимое, divisor - делитель.
x = 7 % 5; // x имеет значение 2 x = 9 % 5; // x имеет значение 4 x = 5 % 5; // x имеет значение 0 x = 4 % 5; // x имеет значение 4