Перевод сервы в разные положения

vvadim
Offline
Зарегистрирован: 23.05.2012

Есть три положения сервы - начальное и два положения, в которые серва переводится нажатием двух кнопок(считывая данные из памяти).  Для перевода в начальное сейчас использую две отдельные кнопки. Хочу использовать одну, чтобы перевод в начальное происходил вне зависимости от того в каком положении находится серва. Надо как то определять в какое положение серва переводилась последней? Если я правильно думаю, то как это можно сделать. 

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

>>Есть три положения сервы - начальное и два положения, в которые серва переводится нажатием двух кнопок(считывая данные из памяти). <<

Из какой памяти ? EEPROM ?

>>Для перевода в начальное сейчас использую две отдельные кнопки.<<

Зачем две ? Сколько кнопок используете в данный момент ? Четыре ?

Подробней опишите свое устройство. Программку покажите.

vvadim
Offline
Зарегистрирован: 23.05.2012

Есть три положения сервы - начальное и два положения, в которые серва переводится нажатием двух кнопок (считывая данные из EEPROM).  Для перевода в начальное сейчас использую две ДРУГИЕ отдельные кнопки. Хочу использовать одну, чтобы перевод в начальное происходил вне зависимости от того в каком положении находится серва.







СЕЙЧАС ТАК

if(button1State == HIGH) {   
val1 = EEPROM.read(addr1); 
 ..........................
}  
if(button2State == HIGH) {
val2 = EEPROM.read(addr2); 
.............................
}
ВОЗВРАТ
if(button11State == HIGH) {   
 for(pos = val1; pos < val; pos += 1) 
  { myservo.writeMicroseconds(pos);              
    delay(50);}
 for(pos = val1; pos > val; pos-=1)    
  { myservo.writeMicroseconds(pos);             
    delay(50); }   
}  
if(button22State == HIGH) {   
for(pos = val2; pos < val; pos += 1) 
  { myservo.writeMicroseconds(pos);              
    delay(50);}
 for(pos = val2; pos > val; pos-=1)    
  { myservo.writeMicroseconds(pos);             
    delay(50); }   
} 

НУЖНО 
if(button3State == HIGH)
серва возвращается в начальное положение вне зависимости от того
в каком положении (val1 или val2) находится в данный момент

Пробовал ввести дополнительную переменную value и сравнивать её с val1 и val2





if(button3State == HIGH) {

if(value = val1) {   
 for(pos = val1; pos < val; pos += 1) 
  { myservo.writeMicroseconds(pos);              
    delay(50);}
 for(pos = val1; pos > val; pos-=1)    
  { myservo.writeMicroseconds(pos);             
    delay(50); }   
}  
else if(value = val2) {   
for(pos = val2; pos < val; pos += 1) 
  { myservo.writeMicroseconds(pos);              
    delay(50);}
 for(pos = val2; pos > val; pos-=1)    
  { myservo.writeMicroseconds(pos);             
    delay(50); }   
} 
}

В  случае  если val1 < val2 из положения 1(соответствует val1 ) в начальное переводится нормально. Из положения 2 (.....val2 ) серва сначало бежит в положение 1, а потом в начальное

 

vvadim
Offline
Зарегистрирован: 23.05.2012

Попробовал через считывание времени изменения состояния кнопок - получилось.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

vvadim пишет:

Надо как то определять в какое положение серва переводилась последней? Если я правильно думаю, то как это можно сделать. 

Ну посмотрите-же , в описании библиотеки,  на две строчки ниже..........

http://arduino.ru/Reference/Library/Servo/read

vvadim
Offline
Зарегистрирован: 23.05.2012

Разобрался.  Спасибо.