/* * Servo Serial Simple * ------------------- * Приводит авиамодельную сервомашинку в одну из 9 позиций согласно ASCII-номеру * от 1 до 9, полученному через последовательный порт. * * Created 18 October 2006 * copyleft 2006 Tod E. Kurt * http://todbot.com/ * * Взято у Daniel @ * http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1160470155/0 * Поворачивает серву на 180 градусов, используя функцию "servoPulse" * взято из "Temporary Servo Function" (Tom Igoe, Jeff Gray) */ int servoPin = 7; // серва, подключённая к цифровому порту int myAngle; // угол сервы (грубо в градусах) 0-180 int pulseWidth; // переменная для функции int val; // переменная для хранения данных из последовательного порта void servoPulse(int servoPin, int myAngle) { pulseWidth = (myAngle * 9) + 700; // перевести угол в микросекунды digitalWrite(servoPin, HIGH); // послать высокий уровень на серву delayMicroseconds(pulseWidth); // подождать очень маленькое время digitalWrite(servoPin, LOW); // послать низкий уровень на серву delay(20); // время на перерыв у типичных серв (20 миллисекунд) } void setup() { pinMode(servoPin, OUTPUT); // объявить пин сервы выходом Serial.begin(19200); // подключиться к последовательному порту Serial.println("Servo Serial Simple ready"); } void loop() { val = Serial.read(); // прочитать значение с последовательного порта // если величина - число из одной цифры, мигнуть светодиодом столько раз if (val >= '0' && val <= '9' ) { val = val - '0'; // преобразовать из символа в число val = val * (180/9); // преобразовать из числа в градус Serial.print("moving servo to "); Serial.print(val,DEC); Serial.println(); for( int i=0; i<50; i++ ) { servoPulse(servoPin, val); } } }