Купил 2 вот таких (Сервомотор Servo SM-S4306R arduino 360град) и столкнулся проблемами: 1. Как в таком случае пользоваться функцией .read(), ведь они возвращает максимум 180 градусов, а тут серво непрерывного вращения. 2. Как пользоваться функцией .write(), если к примеру мне нужно сделать 2 оборота? По сути ето .wirte(720) , но на практике работало по моему не правильно. 3. я не могу остановить серво. То есть даже при скетче: Код (Text): #include <Servo.h> Servo myservo; int pos = 0; void setup(){ Serial.begin(9600); myservo.attach(9); } void loop(){ myservo.write(145); while(1); } Сервопривод крутиться без остановки. Это проблема в сервоприводе, в библиотеке или я не правильно делаю?
Да, всё так. Сервы управляются с помощью сигналов PWM/PPM, которыми задаётся некое значение, от минимального до максимального. В случае ограниченной сервы — это угол, в случае постоянного вращения — это скорость/направление. Библиотека просто правильно отражает область значений [0; 180] на эти сигналы. Эквилибриуму соответствует 90. Это в идеале. Но на практике моторы не всегда идеально откалиброваны, поэтому возможны отклонения как у вас. Чтобы сделать вашу серво «програмно-откалиброванной», поиграйте с входными параметрами конструктора объекта Servo() — ему можно передавать велечины минимального/максимального значения сигнала. Update: Hlx прав, параметры передаются не в конструктор, а в метод Servo.attach()
http://arduino.ru/Reference/Library/Servo/attach Синтаксис servo.attach(pin) servo.attach(pin, min, max) Параметры [*]servo: переменная типа Servo [*]pin: номер выхода, к которому подключаем servo и с которого осуществляется управление приводом [*]min (опциональный): ширина импульса в микросекундах, соответствующий минимальному (угол 0 градусов) положению сервопривода. (по умолчанию 544) [*]max (optional): ширина импульса в микросекундах, соответствующий максимальному (угол 180 градусов) положению сервопривода. щас буду пробовать)