Как заставить два сервопривода работать один за другим? И перестать трястись? - PullRequest
0 голосов
/ 30 апреля 2019

Для моего проекта я пытаюсь сделать переворачиватель страниц, который управляется двумя сервоприводами - один для переворачивания (с гудком) и один для поднятия (с помощью колеса).Моя цель здесь - когда я нажимаю ПРАВУЮ кнопку, мое колесо должно сначала перевернуть страницу по часовой стрелке, тогда мой рог будет смахивать слева направо (то же самое, но противоположно моей левой кнопке), чтобы перевернуть страницу.

ПокаЯ пытаюсь отрегулировать углы, мой сервопривод с правой кнопкой работает так, как я хотел, но он трясется, с другой стороны, у меня серво с правой кнопкой работает плавно и непрерывно, но поворот и поворот были активными нав то же время.

#include <Servo.h>

const int swipservo = 8; //yellow
const int liftservo = 9; //green
Servo servo1;  // create servo object to control a servo
Servo servo2;
const int leftbutton = 11; //yellow = turn left
const int rightbutton = 12; //blue = turn right

int pos1 = 0;    // variable to store the servo position
int pos2 = 0;

void setup() {
  servo1.attach (swipservo);
  servo2.attach (liftservo);
  pinMode(leftbutton , INPUT);
  pinMode(rightbutton , INPUT);
}
void loop() {
  test();
}

void test() {
  if (digitalRead(rightbutton) == HIGH) {
    for (pos2 = 0; pos2 < 350; pos2++) {
      if (pos2 < 180) {
        servo2.write (pos2);
        delay(15);
      }
      if (pos1 > 180) {
        servo1.write(0);
        delay(15);
        servo2.write(0);
        delay(15);
      }
      else if (pos2 >= 180) {
        servo1.write(pos1);
        delay(15);
        pos1 ++;
      }
      //go back to 0 for POS 2
    }
  }

  if (digitalRead(leftbutton) == HIGH) {
    for (pos2 = 160; pos2 > 0; pos2++) {
      if (pos2 < 0) {
        servo2.write (pos2);
        delay(5);
      }
      if (pos1 >= 180) {
        servo1.write(0);
        delay(15);
        servo2.write(0);
        delay(15);
      }
      else if (pos2 > 0) {
        servo2.write(pos2);
        delay(15);
      }
      if (pos2 <= 0) {
        servo1.write(pos1);
        delay(15);
        pos1 ++;
      }
    }
  }
}
...