Помогите камрады.
- Войдите на сайт для отправки комментариев
Ср, 01/03/2017 - 07:24
Ребята,помогите пожалуйста новичку.есть уно и пять сервоприводов.Необходимо чтобы каждые 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();
}
Спасибо за любую помощь.
#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(); }что то с переменной
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
[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]Этот скетч почистил. Но все равно у вас там системная ошибка, я бы сказал на уровне ТЗ( условий описания задачи).
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(); }Спасибо огромное..Ты очень меня выручил...Я могу отблагодарить тебя интересней чем спасибо..Напиши в вотсап мне 925семь182один14