Помогите оптимизировать!
- Войдите на сайт для отправки комментариев
Сб, 20/02/2016 - 14:38
Делаю схему
Нажал кнопку серва привоы заработали. Отпустил остановились. Но проблема в том что пока они не выполнят полностью весь цикл движения они не останавливаются. Как можно сделать тк чтоб при отпускании кнопки работа серваприводов останавливалась на любом месте выполнения? Плюс если есть советы по оптимизации кода прощу написать их.
Так же хотелось бы уточнить. при подаче питаия серво приводы сразу же поворачиваютя на 90 граусов не зависемо от того нажата кнопка или нет. Я подозреваю это из за того что питане приводит серво приводы в тонус. или я ошибюсь?
Код
// библиотека с коммандами для сервоприводов #include <Servo.h> //описание библиотеки по ссылке - arduino.cc/en/Reference/Servo int knopka = 8; //Объявляем переменую кнопки и цепляем на пин 8 Servo servo1; // объект сервопривод №1 Servo servo2; // серво привод №2 void setup() { pinMode(knopka, INPUT); //указываем пин на вход servo2.attach(11); // Серво привод подключен к пину 11 servo1.attach(9); // Сервопривод подключен к цифровому выходу 9 //servo1.detach() для расслабления мотора сервопривода } void loop() { if(digitalRead(knopka) == HIGH) //проверяем нажата кнопка или нет. если да выполняем код ниже { //Код движения сервоприводов servo1.write(90); // повернись на 90 град. delay(1000); // пауза чтобы он успел повернуться servo2.write(90); //второй серво привод поворот 90 град delay(1000); //пуза второго servo1.write(180); // повернись на 180 град. delay(1000); // пауза servo2.write(180); //поворот второго привода на 180 град delay(1000); //пауза второго servo1.write(0); // повернись до уровня 0 град. delay(1000); // пауза servo2.write(0); //поворот второго на 0 град delay(1000); //пауза второго } }
Как-то так:
Если можно коментарий бы еще. Для большей понятности.
Надо объявить пару переменных:
Что еще комментировать не знаю... millis() что ли?
Не могу понять зачем нужны 6.7.8 строки? Зачем вычисять милисикунды? Логику объясните пожалуйста!
Нажал кнопку серва привоы заработали. Отпустил остановились. Но проблема в том что пока они не выполнят полностью весь цикл движения они не останавливаются. Как можно сделать тк чтоб при отпускании кнопки работа серваприводов останавливалась на любом месте выполнения? Плюс если есть советы по оптимизации кода прощу написать их.
Так же хотелось бы уточнить. при подаче питаия серво приводы сразу же поворачиваютя на 90 граусов не зависемо от того нажата кнопка или нет. Я подозреваю это из за того что питане приводит серво приводы в тонус. или я ошибюсь?
Код
вы бы начали с более точного определения алгоритма работы кнопки и серв
потом запустили кнопку правильно (с антидребезгом)
ну и полностью уйти от делеев чтобы всю вашу прграмму не тормозило
Что бы раз в секунду, что нибудь делать с сервами, собственно, как и в твоем коде... жду когда разница между счетчиком millis и переменной time будет равна 1000 (т.е. 1 сек), а все остальное время опрашиваю кнопку, как ты и хотел.
Приведённый код работает как конечный автомат, меняя состояния - шаги (STep). Автомат состояний работает только когда нажата кнопка, при этом состояния перебираются раз в секунду. В остальное время ничего не происходит.
вы бы начали с более точного определения алгоритма работы кнопки и серв
потом запустили кнопку правильно (с антидребезгом)
ну и полностью уйти от делеев чтобы всю вашу прграмму не тормозило
Тоесть более точно?
А как избавится от делай если нужно немного замедлить ход Сервомотора?
Andy Спасибо!
Недавно ковырялся искал опрос кнопок в фоне, нашол http://robotosha.ru/arduino/multi-tasking-arduino.html
100% ответ на ваш вопрос :)