Два сервы не хотят одновременно крутиться (VarSpeedServo)

rafchibus
Offline
Зарегистрирован: 23.01.2020

Всем привет, делаю проект школьный. Тема: "Автоматическое открытие ворот при приближении автомобиля". Делаю на микроконтроллере Arduino UNO , сам в этой теме пару месяц(учитывая школьные курсы - всё печально, всё дома, по интернету искал). Скоро пора защищать проект :C 

У меня такая проблема, подключил библиотеку <VarSpeedServo.h>. Всё настроил, всё работает, но сервы упираются и не хотят одновременно крутиться. По коду , по идее всё должно работать, но чёт не особо. Почитал англоязычные форумы, говорят , что у Arduino свои задержки и это можно исправить, путём добавления микро-тиков (но для моего проекта это будет очень сложно). В общем-то даже второй сервопривод не хочет крутится, тот, который выше по коду работает, а тот , что ниже игнорируется. Кто работал с этой библиотекой, кто может хотя бы на мысль подтолкнуть ?

 

#include <VarSpeedServo.h>
#include <IRremote.h>

IRrecv irrecv (A1);
decode_results results;
VarSpeedServo myservo;
VarSpeedServo myservo2;

#define LazerPin 2
#define PhotoPin A0
#define LedPin 7

int angle;
int val;

void setup() {
  Serial.begin (9600);

  pinMode (LazerPin, OUTPUT);
  pinMode (A1, INPUT);
  pinMode (7, OUTPUT);

  irrecv.enableIRIn();
  myservo.attach(9);
  myservo2.attach(10);
}

void loop() {
  val = analogRead (PhotoPin);
  Serial.println (val);

  {
    digitalWrite (LazerPin, HIGH);
    digitalWrite (LazerPin, LOW);
  }

  if (irrecv.decode (&results)) {
    Serial.println(results.value);
    if (val < 800 && results.value == 16769565) {
      myservo.write(90, 10, true);
      delay(20);
      myservo2.write(90, 10, true);
      delay(20);
    }
    if (val < 800 && results.value == 16753245) {
      myservo.write(0, 10, true);
      delay(20);
      myservo2.write(90, 10, true);
      delay(20);
    }
    irrecv.resume ();
  }

  if (val > 800) {
    digitalWrite (7, HIGH);
    delay(100);
    digitalWrite (7, LOW);
    delay (100);
  }
}

 

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Библиотеки VarSpeedServo и Rremote используют один и тот же аппаратный 16 разрядный таймер и каждая по своему.

В общем, вместе они, без танецев с бубном, работать не будет. А на шамана ты еще не тянешь. Так что выбирай или IRremote или серва.

rafchibus
Offline
Зарегистрирован: 23.01.2020

Решил попробовать сделать на Arduino MEGA , там же вроде параллельные пины , может одновременно будут работать. Результат сообщу ))

Logik
Offline
Зарегистрирован: 05.08.2014

rafchibus пишет:

Решил попробовать сделать на Arduino MEGA , там же вроде параллельные пины

Не то что перпендикулярные на уно.

rafchibus
Offline
Зарегистрирован: 23.01.2020

Сделал на MEGA 2560 ) Всё работает супер))