Помогите новичку!!!

vovancho0
Offline
Зарегистрирован: 12.03.2015

Доброго времени суток!

помогите разобратся новичку, идея очень простая, а вот с реализацией никак не выходит. суть идеи вот в чем : нужно запустить одновременно 3 двигателя сначало в одну сторону, затем задержка, потом в другую сторону и опять задержка. действие зациклено. но никак не получается настраивать действия двигателей независимо друг от друга, все получается последовательно. подскажите пожалуйста как создать  функцию для  второго и третьего двигателя  но чтобы она выполнялась одновременно с первым?  

вот пример того что я уже написал.



int IN3 = 5;
int IN4 = 4;
int IN1 = 2;
int IN2 = 3;
int IN5 = 6;
int IN6 = 7;

void setup()
{
  pinMode (IN4, OUTPUT);
  pinMode (IN3, OUTPUT);
  pinMode (IN2, OUTPUT);
  pinMode (IN1, OUTPUT);
  pinMode (IN5, OUTPUT);
  pinMode (IN6, OUTPUT);
}
void loop()
{
  {
  digitalWrite (IN1, HIGH);
  digitalWrite (IN2, LOW);
  delay(40000);
  digitalWrite (IN1, LOW);
  delay(5000);
  digitalWrite (IN2, HIGH);
  digitalWrite (IN1, LOW);
  delay(40000);
  digitalWrite (IN1, LOW);
  delay(5000);
  }
  {
  digitalWrite (IN3, HIGH);
  digitalWrite (IN4, LOW);
  delay(40000);
  digitalWrite (IN3, LOW);
  delay(5000);
  digitalWrite (IN4, HIGH);
  digitalWrite (IN3, LOW);
  delay(40000);
  digitalWrite (IN3, LOW);
  delay(5000);
  }
}

 

 

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015
digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW);
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);
digitalWrite (IN5, HIGH);
digitalWrite (IN6, LOW);
delay(40000);
digitalWrite (IN1, LOW);
digitalWrite (IN3, LOW);
digitalWrite (IN5, LOW);
delay(5000);
digitalWrite (IN1, LOW);
digitalWrite (IN2, HIGH);
digitalWrite (IN3, LOW);
digitalWrite (IN4, HIGH);
digitalWrite (IN5, LOW);
digitalWrite (IN6, HIGH);
delay(40000);
digitalWrite (IN2, LOW);
digitalWrite (IN4, LOW);
digitalWrite (IN6, LOW);
delay(5000);

А лучше от делаев уходить

vovancho0
Offline
Зарегистрирован: 12.03.2015

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

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

тогда избавляйтесь от delay иначе никак

vovancho0
Offline
Зарегистрирован: 12.03.2015

тогда подскажите пожалуйста как это можно осуществить.

 

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Начните с простого, вставьте вот эти дефайны в самое начало.
Это сильно добавит коду "читабельности" (нам и вам), сильно поможет логическому мышлению и в будущем сократит размер кода.
Как использовать- вроде должно быть понятно: M1_CV;   M1_CCV;  M1_STOP;

#define IN3  5
#define IN4  4
#define IN1  2
#define IN2  3
#define IN5  6
#define IN6  7

#define M1_CV   digitalWrite (IN1, HIGH);  digitalWrite (IN2, LOW)
#define M1_CCV  digitalWrite (IN1, LOW);   digitalWrite (IN2, HIGH)
#define M1_STOP digitalWrite (IN1, LOW);   digitalWrite (IN2, LOW)

#define M2_CV   digitalWrite (IN3, HIGH);  digitalWrite (IN4, LOW)
#define M2_CCV  digitalWrite (IN3, LOW);   digitalWrite (IN4, HIGH)
#define M2_STOP digitalWrite (IN3, LOW);   digitalWrite (IN4, LOW)

#define M3_CV   digitalWrite (IN5, HIGH);  digitalWrite (IN6, LOW)
#define M3_CCV  digitalWrite (IN5, LOW);   digitalWrite (IN6, HIGH)
#define M3_STOP digitalWrite (IN5, LOW);   digitalWrite (IN6, LOW)

 

Marlen S
Offline
Зарегистрирован: 13.01.2015

vovancho0 пишет:

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

Не думали ли Вы использовать такого рода управление-задержку?

//######
#define IN1  2
#define IN2  3
#define IN4  4
#define IN3  5
#define IN5  6
#define IN6  7


// unsigned long previousMillis(n++) = 0; 

// unsigned int interval(n) = N++;


void setup();
{
  pinMode (1, OUTPUT);
  pinMode (2, OUTPUT);
  pinMode (3, OUTPUT);
  pinMode (4, OUTPUT);
  pinMode (5, OUTPUT);
  pinMode (6, OUTPUT);
  digitalWrite(1, LOW);
  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
}

void loop();
{
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis > interval(n++)) { 
    previousMillis = currentMillis; 
    /// digitalWrite((n), LOW);
  }
}


vovancho0 пишет:

но задержку и работу для каждого двигателя можно было настраивать отдельно и независимо то других.  

Тогда наверное стоит их всех по отдельности занести в плавающею и дергать как вам угодно.

З.Ы. Я сам как бы не очень в программировании, но думаю раздать всем задержку и дергать нитки будет проще?