Схема 7.
Через монитор порта вводим число от 0 до 9. Сервопривод поворачивается на угол от 0 до 180 градусов. В этом скетче не используется библиотека «Servo.h». Она не совсем корректно работает с некоторыми серводвигателями. Для поворота сервопривода на нужный угол используется отправка на управляющий пин высокий сигнал определённой длительности. От величины длительности зависит угол, на который будет повёрнут сервопривод.
// В мониторе порта вводим число от 0 до 9 и отправляем его. Сервопривод поворачивается на угол от до 180
int servoPin = 6; // сигнальный провод от серво на порт D3
int val;
void setup()
{
pinMode(servoPin, OUTPUT);
Serial.begin(9600);
Serial.println("Servo ready");
}
void loop()
{
// Масштабируем числа от 0 до 9 к углам от 0 до 180 градусов
val = Serial.read();
if (val >= '0' && val <= '9')
{
val = val - '0';
val = val * (180 / 9);
Serial.print("Поворачиваем сервопривод на ");
Serial.println(val, DEC);
// Поворота двигатель на нужный угол
for (int i = 0; i <= 50; i++)
{
servoPulse(servoPin, val);
}
}
}
void servoPulse(int pin, int angle)
{
int pulseWidth = (angle * 11) + 500;
digitalWrite(pin, HIGH);
delayMicroseconds(pulseWidth);
digitalWrite(pin, LOW);
delay(20 - pulseWidth / 1000);
}
void servoPulse(int pin, int angle)
{
int pulseWidth = (angle * 11) + 500;
digitalWrite(pin, HIGH);
delayMicroseconds(pulseWidth);
digitalWrite(pin, LOW);
delay(20 - pulseWidth / 1000);
}