// подключаем модуль сервопривода к пину 8 var servo = require('@amperka/servo').connect(P8); // задаем количество и длительность каждого стука молотка (нот мелодии) var massMelody =[400, 400, 400, 150, 150, 400, 150, 150, 150, 400, 150]; // объявляем вспомогательные переменные var len = massMelody.length; var servoWork = false; var count = 0; // читаем значения с сенсора вибрации каждые 10 миллисекунд setInterval(function() { // создаём переменную и записываем в неё текущее значения сенсора вибрации var sensorVal = analogRead(A5); // если значение сенсора вибрации превысило допустимый порог if (sensorVal > 0.01) { // вызываем функцию стука молотком по батареи servoBang(); } }, 10); function servoBang() { // если сервопривод еще не отбил предыдущий запрос (стук), выходим из функции if (servoWork === true) { return; } // переходим в рабочий режим молотка servoWork = true; // проверяем все ли ноты мы отыграли if (count < len) { setTimeout(function() { // в зависимости от длительности текущей ноты опускаем молоток вниз servo.write(60); print('DOWN'); // по истечении 150 миллисекунд поднимаем молоток вверх setTimeout(function() { servo.write(30); print('UP'); // увеличиваем счётчик нот на единицу count++; print(count); // переходим в режим ожидания молотка новой команды servoWork = false; // вызываем функцию следующего стука servoBang(); // если вся мелодия отыграла по батареи if (count === len) { // через 300 миллисекунд переходим в режим ожидания новой команды setTimeout(function() { servoWork = false; count = 0; print('End'); }, 300); } }, 150); }, massMelody[count]); } }