В этом уроке мы вращаем сервопривод на угол, задаваемый потенциометром.
// управлять сервоприводами (англ. servo motor) самостоятельно
// не так то просто, но в стандартной библиотеке уже всё
// заготовлено, что делает задачу тривиальной
#include
#define POT_MAX_ANGLE 270.0 // макс. угол поворота потенциометра
// объявляем объект типа Servo с именем myServo. Ранее мы
// использовали int, boolean, float, а теперь точно также
// используем тип Servo, предоставляемый библиотекой. В случае
// Serial мы использовали объект сразу же: он уже был создан
// для нас, но в случае с Servo, мы должны сделать это явно.
// Ведь в нашем проекте могут быть одновременно несколько
// приводов, и нам понадобится различать их по именам
Servo myServo;
void setup( )
{
// прикрепляем (англ. attach) нашу серву к 9-му пину. Явный
// вызов pinMode не нужен: функция attach сделает всё за нас
myServo.attach ( 9 ) ;
}
void loop( )
{
int val = analogRead(A0) ;
// на основе сигнала понимаем реальный угол поворота движка.
// Используем вещественные числа в расчётах, но полученный
// результат округляем обратно до целого числа
int angle = int (val / 1024.0 * POT_MAX_ANGLE) ;
// обычная серва не сможет повторить угол потенциометра на
// всём диапазоне углов. Она умеет вставать в углы от 0° до
// 180°. Ограничиваем угол соответствующе
angle = constrain(angle, 0, 180 ) ;
// и, наконец, подаём серве команду встать в указанный угол
myServo.write (angle) ;
}