Как избавиться от установки сервопривода в нулевое положение при включении
- Войдите на сайт для отправки комментариев
Пнд, 07/01/2019 - 14:49
Проблема такова: При включении дуни серво устанавливается в ноль, затем идёт движение. Я попробовал при инициализации в сетапе считывать текущее и сравнивать с надлежащим, так что теперь серво ставится в 90, потом доходит до нуля, уже потом заходит в loop(). Каким образом можно провести инициализацию, чтобы серва начинала с той же позиции, либо при выключении обращалась в ноль? Про eeprom знаю, но перезаписей планируется очень много, я так всю память убью
#include <Servo.h>
Servo serv1;
int pos = 0;
int oldpos;
void setup() {
serv1.attach(36);
oldpos = serv1.read();
while (oldpos > pos){
oldpos -=1;
serv1.write(oldpos);
delay(10);
}
}
void loop() {
for (pos = 0; pos <= 170; pos += 1){
serv1.write(pos);
delay(5);
}
for (pos = 170; pos >= 0; pos -= 1) {
serv1.write(pos);
delay(5);
}
}
странные вопросы задаете. Вы сами ставите серву в положение 0 в строке 21
Попытайтесь четче сформулировать (в первую очередь для себя самого) - что именно вы хотите.
И перепишите программу под свою задачу.
ну так я и сказал, что этот код пытается считывать текущее положение и выводить его в ноль. Только вместо текущего ставит 90 (как я понял, в строке 11)
Ладно, другой пример, раз меня в неточности уличают
#include <Servo.h> Servo finger1; int servoPin1 = 35; int lightPin1 = 30; int flexPin1 = A1; void setup() { finger1.attach(servoPin1) pinMode(lightPin1, OUTPUT); pinMode(flexPin1, INPUT); } void loop() { int flex1 = analogRead(flexPin1); int pos1 = map(flex1, 100, 800, 0, 180); pos1 = constrain(pos1, 0, 180); finger1.write(pos1); }Здесь нет ни одного программного выставления в ноль, но при включении это всё равно происходит
Серву нельзя оставить в том же положении как при включении. Залезте в библиотеку и посмотрите как инициализируется серва при подключении. Если не хотите сохранять значение при выключении, то нужен датчик положения. При включении считывать и сразу серву инициализировать этим значением. Для особо рукастых - можно вытянуть сигнал с резистора обратной связи сервы как датчик положения. Для метода поворота по градусу для подсчёта положения - нужно иметь концевик, что бы получить сигнал что серва в нулевом пололжении.
...серво... Про eeprom знаю, но перезаписей планируется очень много, я так всю память убью
Ресурс серво - нет конечно, но проект долгоиграющий, года на два со всеми тестами, так что включений-выключений будет нное количество тысяч
По даташиту ресурс EEPROM 100000 (сто тысяч), по факту говорят ещё больше.