управление сервоприводом с кнопки

EnDeR
Offline
Зарегистрирован: 04.02.2017

можно ли зделать так чтобы при нажатии кнопки серва поворачиволась на 15 градусов

а когда отпускаешь возврошалась назад 

подскажите пожалуйста

nik182
Offline
Зарегистрирован: 04.05.2015

Да. Можно. В цикле loop проверяйте состояние кнопки.  http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-novichku Во втором скече есть включение - отключение светодиода. Вместо него вставте команды управлением положением сервы отсюда http://arduino.ru/forum/obshchii/prezhde-chem-sprosit-pro-servomashinku-...

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

можно 6 пин - кнопка на GND , 7 пин - управление сервой.

#define POS_0 0
#define POS_1 20

uint8_t pos;

void setup(){
  pinMode(7, OUTPUT);
  pinMode(6, INPUT);
  digitalWrite(6, HIGH);
  pos = POS_0;
}

void loop(){
  if(digitalRead(6) == LOW && pos != POS_1){
    analogWrite(7, POS_1);
    pos = POS_1;
  }
  if(digitalRead(6) == HIGH && pos !=POS_0){
     analogWrite(7,POS_0);
     pos = POS_0;
  }
}

 

nik182
Offline
Зарегистрирован: 04.05.2015

analogWrite(7, POS_1);

Этой командой нельзя управлять сервой. Нет, конечно при определённых условиях даже как то сработает, но будут не контролируемые проблемы. Это PWM. Серво управляется другой алгоритм формирования импульсов. В первoм приближении можно вот такой процедурой

void writeToServo(uint8_t pin, uint16_t pos){
      digitalWrite(pin, HIGH);
      delayMicroseconds(pos); // Выжидаем длину импульса
      digitalWrite(pin, LOW);
      delay(20);
 }

 

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Ну сервы разные бывают.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

EnDeR пишет:

можно ли зделать так чтобы при нажатии кнопки серва поворачиволась на 15 градусов

Можно, только делайте быстрее, а то придёт Клапауций и запретит.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Скетч здесь https://yadi.sk/d/UfwvGmLp3CsezS

Главный файл выкладываю 

/* Class_do_btn_dn_up_Servo.ino https://yadi.sk/d/UfwvGmLp3CsezS
  #1 серво 1->9
  #2 кнопка ->2
  Принцип кода:нажал на кнопку , серва повернулась на 15 градусов
               отпустил  кнопку , серва вернулась обратно
*/
//#1 серво 1
#include <Servo.h>
Servo servo;
const int servo_pin = 9;// нога сервы
void func_down() {// когда кнопка нажата
  servo.write(15);
}
void func_up() {// когда кнопка отпущена
  servo.write(0);
}
//#2 кнопка 1
#include "Cl_do_btn_dn_up.h"
const byte btn1_pin = 2;
Cl_do_btn_dn_up Do_btm1; // создать

void setup() {
  //#1 серво 1
  servo.attach(servo_pin);
  servo.write(0);
  //#2 кнопка 1
  Do_btm1.logic = 0; // когда 0 это нажатая кнопка
  Do_btm1.setup(btn1_pin);
}
void loop() {
  //#1 серво 1
  //#2 кнопка 1
  Do_btm1.loop(& func_down , & func_up );
}

 

EnDeR
Offline
Зарегистрирован: 04.02.2017

спасибо большое 

вы очень помогли