2 ДПТ + 2 Дачика + MShield

p1ngw1nk0
Offline
Зарегистрирован: 31.05.2012

Помогите разобраться, есть 2 двигателя, и есть 2 датчика, как сделать так чтобы при срабатывании датчика №1 останавливался первый двигатель на 1с, и включался на реверс, опять же до срабатывания датчика №1, но на другое значение.

Так же со вторым, но последовательно. Начала двигатель №1, затем Двигатель№2.

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

maksim
Offline
Зарегистрирован: 12.02.2012

К сожалению на этом форуме нет экстрасенсов что бы вам помоч...

maksim
Offline
Зарегистрирован: 12.02.2012

НО если бы вы написали какие датчики, двигатели, шилды используете, как и куда их подключаете и показали код, который пытаетесь написать, то кто нибудь вам бы помог. 

p1ngw1nk0
Offline
Зарегистрирован: 31.05.2012

Датчики SS495A - холла.

Двигатели обычное китайское.

датчик к 1 аналогову пину.

 

#include <AFMotor.h>
AF_DCMotor MotorThree (3);

  void loop ()
  {MotorThree.setSpeed(100);
    MotorThree.run(BACKWARD);
       if (analogRead(1)<=490)
    MotorThree.run(RELEASE);
    delay(2000);

    //MotorThree.run(FORWARD);
     // if (analogRead(1)>=530)
     // {MotorThree.run(RELEASE);
     // }
   }  

 

maksim
Offline
Зарегистрирован: 12.02.2012

Вы весь код выложили? А второй двигатель куда подключен?

maksim
Offline
Зарегистрирован: 12.02.2012

И если не секрет почему датчики холла? куда вы их устанавливаете?

p1ngw1nk0
Offline
Зарегистрирован: 31.05.2012

Нет код не весь, мне бы хотя бы с одним разобраться.

Двигатели подключены,  соответсвенно по разъемам, 2, и 3.

Тоже с датчиками, в 1 и 2.

Плата у меня Ромео.

Еще 1 двигатель пока не подключен. Вот как-то так. Не понимаю я чего-то.

Сигнал с датчика, через serialprintln идет, значения вижу, а двигатель иногда проскакивает, иногда останавливается, а как его в реверс запустить?

maksim
Offline
Зарегистрирован: 12.02.2012

Скажите конкретно, что вы хотите добиться... Пример: "Я хочу сделать так: изначально двигатель крутится в одну сторону как только значение на аналоговом входе становится меньше 400 - двигатель должен остановиться на одну сеунду и начать вращаться в другую сторону до тех пор пока на аналоговом входе не станет больше 800, как только значение стало больше 800 - двигатель должен остановиться на одну секунду и начать в ращаться в первоначальную сторону ".....

p1ngw1nk0
Offline
Зарегистрирован: 31.05.2012

Ну извините, просто я уже порядком утомился,

Изначально, двигатель №1 куртится в одну сторону, как только на аналогов входе значение становиться меньше 490, двигатель останавливается, секундная задерка, затем двигатель крутится в обратную сторону пока значение на аналогово входе не будет боьлше 530 - двигатель должен остановиться, и затем начать вращаться другой двигатель.

maksim
Offline
Зарегистрирован: 12.02.2012

А дальше что? 

maksim
Offline
Зарегистрирован: 12.02.2012

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

maksim
Offline
Зарегистрирован: 12.02.2012
#include <AFMotor.h>

AF_DCMotor motor_1(2);
AF_DCMotor motor_2(3);

boolean state_1, state_2 = 0;

void setup() {
  motor_1.setSpeed(200);
  motor_2.setSpeed(200);
  motor_1.run(FORWARD);
  motor_2.run(RELEASE);
}

void loop() {
  if(analogRead(1) <= 490 && !state_1){
    motor_1.run(RELEASE);
    delay(1000);
    motor_1.run(BACKWARD);
    state_1 = 1;
  }
  if(analogRead(1) >= 530 && !state_2){
    motor_1.run(RELEASE);
    motor_2.run(FORWARD);
    state_2 = 1;
  }
  //.....................
  // дальше второй двигатель крутится бесконечно........
}

 

bogena
Offline
Зарегистрирован: 31.05.2012

Максим, а можете дать свою асю или скайп или телефон, есть срочный вопрос, отблагодарю.

Сори за оффтоп

maksim
Offline
Зарегистрирован: 12.02.2012
maksimkstovo19восемь5

 

p1ngw1nk0
Offline
Зарегистрирован: 31.05.2012

Спасибо Вам огромное за помощь.