Управление 3 сервомоторами
- Войдите на сайт для отправки комментариев
Парни помогите! скачал программу
/*
* NewSerialServo
* --------------
* Servo control from the Serial port
*
* Alteration of the control interface to use < and > keys
* to slew the servo horn left and right. Works best with
* the Linux/Mac terminal "screen" program.
*
* Created 10 December 2007
* copyleft 2007 Brian D. Wendt
* <a href="http://principialabs.com/" title="http://principialabs.com/" rel="nofollow">http://principialabs.com/</a>
*
* Adapted from code by Tom Igoe
* <a href="http://itp.nyu.edu/physcomp/Labs/Servo" title="http://itp.nyu.edu/physcomp/Labs/Servo" rel="nofollow">http://itp.nyu.edu/physcomp/Labs/Servo</a>
*/
/** Adjust these values for your servo and setup, if necessary **/
int servoPin = 9; // control pin for servo motor
int lservoPin = 11; // control 9 pin
int minPulse = 600; // minimum servo position
int maxPulse = 2400; // maximum servo position
int turnRate = 100; // servo turn rate increment (larger value, faster rate)
int refreshTime = 20; // time (ms) between pulses (50Hz)
/** The Arduino will calculate these values for you **/
int centerServo; // center servo position
int pulseWidth;
int lpulseWidth; // servo pulse width
int moveServo; // raw user input
long llastPulse = 0; // recorded time (ms) of the last pulse
long lastPulse = 0;
void setup() {
pinMode(servoPin, OUTPUT); // Set servo pin as an output pin
pinMode(lservoPin, OUTPUT); // Set servo pin as an output pin
centerServo = maxPulse - ((maxPulse - minPulse)/2);
pulseWidth = centerServo; // Give the servo a starting point (or it floats)
lpulseWidth = centerServo;
Serial.begin(9600);
Serial.println(" Arduino Serial Servo Control");
Serial.println("Press < or > to move, spacebar to center");
Serial.println();
}
void loop() {
// wait for serial input
if (Serial.available() > 0) {
// read the incoming byte:
moveServo = Serial.read();
// ASCII '<' is 44, ASCII '>' is 46 (comma and period, really)
if (moveServo == 44) { pulseWidth = pulseWidth - turnRate; }
if (moveServo == 46) { pulseWidth = pulseWidth + turnRate; }
if (moveServo == 32) { pulseWidth = centerServo; }
if (moveServo == 32) { lpulseWidth = centerServo; }
if (moveServo == 77) { lpulseWidth = lpulseWidth - turnRate; }
if (moveServo == 78) { lpulseWidth = lpulseWidth + turnRate; }
// stop servo 2 pulse at min and max
if (pulseWidth > maxPulse) { pulseWidth = maxPulse; }
if (pulseWidth < minPulse) { pulseWidth = minPulse; }
// stop servo 9 pulse at min and max
if (pulseWidth > maxPulse) { lpulseWidth = maxPulse; }
if (pulseWidth < minPulse) { lpulseWidth = minPulse; }
// print pulseWidth back to the Serial Monitor (uncomment to debug)
Serial.print("Pulse Width: ");
Serial.print(pulseWidth);
Serial.println("us"); // microseconds
Serial.print("LPulse Width: ");
Serial.print(lpulseWidth);
Serial.println("us"); // microseconds
}
// pulse the servo every 20 ms (refreshTime) with current pulseWidth
// this will hold the servo's position if unchanged, or move it if changed
//move pin2
if (millis() - lastPulse >= refreshTime) {
digitalWrite(servoPin, HIGH); // start the pulse
delayMicroseconds(pulseWidth); // pulse width
digitalWrite(servoPin, LOW); // stop the pulse
lastPulse = millis(); // save the time of the last pulse
}
//move pin9
if (millis() - llastPulse >= refreshTime) {
digitalWrite(lservoPin, HIGH); // start the pulse
delayMicroseconds(lpulseWidth); // pulse width
digitalWrite(lservoPin, LOW); // stop the pulse
llastPulse = millis(); // save the time of the last pulse
}
}
это всё круто, 1 сервомотор крутится как надо, при отправке через монитор порта команд < и > крутится в разные стороны, при отправке 2 и более знаков < или > мотор увеличивает скорость,всего 4 ступени походу, при отправке пробела всё останавливается. Меня такой путь управления полностью устраивает,но вот только мне нужно чтобы остальные 2 сервомотора тоже можно было крутить таким же образом,только на другие кнопки,к примеру (A и Z) и (Q и W),управляющие проводки сервомоторов подключены в 9 10 и 11 выходы, 9 работает с выше приведенной программой. помогите нубу пжлст!
ох уж эти нубики ))))))))))
Для начала посмотрите как выкладывать исходник на форуме чтоб он был более читабелен и распознаваем:
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...
изучите внимательно свой код, какие именно команды отвечают за чтение входов или управление выходов.
Я бы обратил внимание на эту часть:
Поэксперементируйте.
Вот тут или ошибка или можно сократить заменив:
на это:
не понятный ответ, он не удовлетворил мои потребности) но всё равно спасибо, я уже все что хотел сделал)