Запуск сервоприводов один раз в программе
- Войдите на сайт для отправки комментариев
Вс, 22/06/2014 - 12:19
Требуется запустить сервоприводы (работают синхроно) только при наличии сигнала с датчика линии. То есть если есть линия они запускаются поворачиваются: первый - от 0 до 50 градусов, второй - от 60 до 0; и возвращаются в начальное положение: первый - о градусов, второй - 60 градусов.
Текст программы:
#include <VarSpeedServo.h> VarSpeedServo myservo1; VarSpeedServo myservo2; const int servoPin1 = 30; // Серва с поворотом 0-50 const int servoPin2 = 31; // серва с поворотом 60-0 int lDSL1=25; // датчик линии void setup() { myservo1.attach(servoPin1); myservo1.write(0,0,true); myservo2.attach(servoPin2); myservo2.write(60,0,true); } void loop() { int val_lDSL1=digitalRead(lDSL1); if (val_lDSL1==HIGH) { myservo1.write(0,30); myservo2.write(60,40); delay(2000); myservo1.write(50,30); myservo2.write(0,40); delay(2000); } }
Поэтому тексту сервопривода работают постоянно, мне нужно что бы они запустились один раз из положения: первый - от 0 до 50 градусов, второй - от 60 до 0; и возвратились в начальное положение: первый - о градусов, второй - 60 градусов. Кто нибудь может помочь с решение проблемы, очень срочно нужно. Буду очень сильно благодарен.
То есть val_lDSL1==HIGH остается, и if (val_lDSL1==HIGH) срабатывает при каждом проходе loop() ?
Если так, то заведите переменную-флажок и пользуйтесь. Как-то так :
А если надо, добавте еще и
if (!val_lDSL1) do_it_once = true;
тогда сервы будут срабатывать на изменения val_lDSL1
Если нужно однократное исполнение кода , поместите его в секцию "setup" , секция "loop" при этом может оставаться пустой, или например в ожидании нажатия кнопки для программного ресета.