Помогите камрады.

Max_spacer
Offline
Зарегистрирован: 01.03.2017

Ребята,помогите пожалуйста новичку.есть уно и пять сервоприводов.Необходимо чтобы каждые 10 секунд срабатывало два серва,потом еще два через 20сек а последний серв каждые 15сек.Ну плюс желательно с разной скоростью каждая пара.

нагуглив я нашел вроде бы код,дополнил его,но понему все срабатывают одновременно.

#include <Servo.h>
 

class Sweeper
{
  Servo servo; // сервопривод
  int pos; // текущее положение сервы 
  int increment; // увеличиваем перемещение на каждом шаге
  int updateInterval; // промежуток времени между обновлениями
  unsigned long lastUpdate; // последнее обновление положения 
  int upwait;
  public: 
  Sweeper(int interval,int wait)
  {
    updateInterval = interval;
    increment = 1;
    upwait = wait;
  }
 
  void Attach(int pin)
  {
    servo.attach(pin);
  }
 
  void Detach()
  {
    servo.detach();
  }
 
  void Update()
  {
    if((millis() - lastUpdate) > updateInterval) // время обновлять
    {
      lastUpdate = millis();
      pos += increment;
      servo.write(pos);
      Serial.println(pos);
      if ((pos >= 100) || (pos <= 0)) // конец вращения
      {
        delay(upwait);
        // обратное направление
        increment = -increment;
      }
    }
  }
};


Sweeper sweeper1(20,5000);
Sweeper sweeper2(20,10000);
Sweeper sweeper3(20,10000);
Sweeper sweeper4(20,20000);
Sweeper sweeper5(20,20000);

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

 sweeper1.Attach(6);
sweeper2.Attach(10);
sweeper3.Attach(9);
sweeper4.Attach(8);
sweeper5.Attach(7);

}

void loop()
{

sweeper1.Update();
sweeper2.Update();
sweeper3.Update();
sweeper4.Update();
sweeper5.Update();

}

  Спасибо за любую помощь.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
#include <Servo.h>


class Cl_servo {
  public:
    Servo servo(byte _pin, int _time_run, int _time_stop); // сервопривод
    void setup();
    void loop();
  private:
    byte pin;
    bool run;// 1 движемся    /0 стоим
    int time_run; // в
    int time_stop;
    int pos; // текущее положение сервы
    int pos_step = 1; // увеличиваем перемещение на каждом шаге
    unsigned long past = 0; // последнее обновление положения
    unsigned long past_step = 0; // последнее обновление положения
    int time_step = 100; // промежуток времени между обновлениями
}

Cl_servo::Cl_servo(byte _pin, int _time_run, int _time_stop) {
  pin = _pin;
  time_run = _time_run;
  time_stop = _time_stop;
  pos_step = 1;
}

void Cl_servo::setup(int pin) {
  servo.attach(pin);
}

void Cl_servo::loop() {
  if (!run  && millis() - past >= time_stop) {
    run = 1;
    past = millis();
  }
  if (run) {
    if (millis() - past >= time_run) {
      run = 0;
      past = millis();
    }
    else if (millis() - past_step >= time_step) { // время обновлять
      past_step = millis();
      pos += pos_step;
      if (pos >= 100 || pos <= 0)) {
        pos_step = - pos_step;
        pos += pos_step;
      }
      servo.write(pos);
      Serial.println(pos);
    }
  }
};

// #1 сервы
const byte servo1_pin = 2;
const byte servo2_pin = 3;
const byte servo3_pin = 4;
const byte servo4_pin = 5;
const byte servo5_pin = 6;
Cl_servo Device1(servo1_pin, 5000, 20);
Cl_servo Device2(servo2_pin, 10000, 20);
Cl_servo Device3(servo3_pin, 10000, 20);
Cl_servo Device4(servo4_pin, 20000, 20);
Cl_servo Device5(servo5_pin, 20000, 20);

void setup() {
  Serial.begin(9600);
  // #1 сервы
  Device1.setup();
  Device2.setup();
  Device3.setup();
  Device4.setup();
  Device5.setup();
}

void loop() {
  // #1 сервы
  Device1.loop();
  Device2.loop();
  Device3.loop();
  Device4.loop();
  Device5.loop();
}

 

Max_spacer
Offline
Зарегистрирован: 01.03.2017

что то с переменной

Arduino\sketch_mar01a\sketch_mar01a.ino:4:7: note: candidate expects 1 argument, 3 provided

exit status 1
new types may not be defined in a return type

Max_spacer
Offline
Зарегистрирован: 01.03.2017
ошибка на 49 строке
exit status 1
'((Cl_servo*)this)->Cl_servo::servo' does not have class type

 

[code]
#include <Servo.h>


class Cl_servo {
  public:
    Servo servo(byte _pin, int _time_run, int _time_stop); // сервопривод
    void setup();
    void loop();
  private:
    byte pin;
    bool run;// 1 движемся    /0 стоим
    int time_run; // в
    int time_stop;
    int pos; // текущее положение сервы
    int pos_step = 1; // увеличиваем перемещение на каждом шаге
    unsigned long past = 0; // последнее обновление положения
    unsigned long past_step = 0; // последнее обновление положения
    int time_step = 100; // промежуток времени между обновлениями


Cl_servo::Cl_servo(byte _pin, int _time_run, int _time_stop) {
  pin = _pin;
  time_run = _time_run;
  time_stop = _time_stop;
  pos_step = 1;
}

void Cl_servo::setup(int pin) {
  servo.attach(pin);
}

void Cl_servo::Update() {
  if (!run  && millis() - past >= time_stop) {
    run = 1;
    past = millis();
  }
  if (run) {
    if (millis() - past >= time_run) {
      run = 0;
      past = millis();
    }
    else if (millis() - past_step >= time_step) { // время обновлять
      past_step = millis();
      pos += pos_step;
      if (pos >= 100 || pos <= 0) {
        pos_step = - pos_step;
        pos += pos_step;
      }
      servo.write(pos);
      Serial.println(pos);
    }
  }
}
};

// #1 сервы
const byte servo1_pin = 2;
const byte servo2_pin = 3;
const byte servo3_pin = 4;
const byte servo4_pin = 5;
const byte servo5_pin = 6;
Cl_servo Device1(servo1_pin, 5000, 20);
Cl_servo Device2(servo2_pin, 10000, 20);
Cl_servo Device3(servo3_pin, 10000, 20);
Cl_servo Device4(servo4_pin, 20000, 20);
Cl_servo Device5(servo5_pin, 20000, 20);

void setup() {
  Serial.begin(9600);
  // #1 сервы
  Device1.setup();
  Device2.setup();
  Device3.setup();
  Device4.setup();
  Device5.setup();
}

void loop() {
  // #1 сервы
  Device1.Update();
  Device2.Update();
  Device3.Updatep();
  Device4.Update();
  Device5.Updatep();
}
[/code]

 

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

Этот скетч почистил. Но все равно у вас там системная ошибка, я бы сказал на уровне ТЗ( условий описания задачи).

const uint32_t time_10sec=10000;
const uint32_t time_15sec=15000;
const uint32_t time_20sec=20000;

#include <Servo.h>
class Cl_servo {
  public:
    Cl_servo(byte _pin, uint32_t _time_run, uint32_t _time_stop); // сервопривод
    void setup();
    void loop();
    Servo servo;
  private:
    byte pin;
    bool run;// 1 движемся    /0 стоим
    uint32_t time_run; // в
    uint32_t time_stop;
    int pos; // текущее положение сервы
    int pos_step = 1; // увеличиваем перемещение на каждом шаге
    unsigned long past = 0; // последнее обновление положения
    unsigned long past_step = 0; // последнее обновление положения
    int time_step = 100; // промежуток времени между обновлениями
};

Cl_servo::Cl_servo(byte _pin, uint32_t _time_run, uint32_t _time_stop) {
  pin = _pin;
  time_run = _time_run;
  time_stop = _time_stop;
  pos_step = 1;
}

void Cl_servo::setup() {
  servo.attach(pin);
}

void Cl_servo::loop() {
  if (!run  && millis() - past >= time_stop) {
    run = 1;
    past = millis();
  }
  if (run) {
    if (millis() - past >= time_run) {
      run = 0;
      past = millis();
    }
    else if (millis() - past_step >= time_step) { // время обновлять
      past_step = millis();
      pos += pos_step;
      if (pos >= 100 || pos <= 0) {
        pos_step = - pos_step;
        pos += pos_step;
      }
      servo.write(pos);
      Serial.println(pos);
    }
  }
};

// #1 сервы
const byte servo1_pin = 2;
const byte servo2_pin = 3;
const byte servo3_pin = 4;
const byte servo4_pin = 5;
const byte servo5_pin = 6;
Cl_servo Device1(servo1_pin, time_10sec, 20);
Cl_servo Device2(servo2_pin, time_10sec, 20);
Cl_servo Device3(servo3_pin, time_15sec, 20);
Cl_servo Device4(servo4_pin, time_20sec, 20);
Cl_servo Device5(servo5_pin, time_20sec, 20);

void setup() {
  Serial.begin(9600);
  // #1 сервы
  Device1.setup();
  Device2.setup();
  Device3.setup();
  Device4.setup();
  Device5.setup();
}

void loop() {
  // #1 сервы
  Device1.loop();
  Device2.loop();
  Device3.loop();
  Device4.loop();
  Device5.loop();
}

 

Max_spacer
Offline
Зарегистрирован: 01.03.2017

Спасибо огромное..Ты очень меня выручил...Я могу отблагодарить тебя интересней чем спасибо..Напиши в вотсап мне 925семь182один14