Проблема в скетче, один из моторов не крутится.

Letro
Offline
Зарегистрирован: 10.12.2015

Всем привет!

Всю голову сломал, но не крутится второй мотор ( analogWrite(EN1,250);) с данным скетчем. Со старыми простыми скетчами все крутится, а в  этом с сервой нет. 

Этот скетч не итоговый. Хочу добиться движения двух моторов если серва в центральном положении определила максимальное растояние до припятствия (по сравнению с сервой на 40 и 140 градусов). Сейчас при 40 градусах мигает диод два и при 140 три раза.

Буду признателен за любую помощь, пока что я новичек в данной теме. Спасибо.

 

PS: питание раздельное, моторы повесил на L293D и питаю от 7.2 аккумулятора li-po. Arduino от USB или 9 вольт. Земля общая. Серва от Ардуины запитана. С ней тоже есть проблема, если питание на двигатель и ардуино раздельное то при запуске моторов она сходит с ума иногда. При питании всего от одного источника 9вольт - серва в норме, но двигатели проседают когда она крутится.

#include <Ultrasonic.h>

#include <Servo.h>

 
Servo servo;
Ultrasonic ultrasonic(11,10);
int IN1 = 8; 
int IN2 = 7;
int IN1_1 = 2; 
int IN2_2 = 4;
int EN1 = 9;
int EN2 = 6;
int led = 5;
int x = 0; // данные с ультры
int a = 0; // значение с ультры на серве в 90
int b = 0; // значение с ультры на серве в 40
int c = 0; // значение с ультры на серве в 140
 
 
void setup() 
{
 
  Serial.begin(9600);
  pinMode (IN2, OUTPUT);
  pinMode (IN1, OUTPUT);
  pinMode (IN2_2, OUTPUT);
  pinMode (IN1_1, OUTPUT);
  servo.attach(12);
  pinMode(led, OUTPUT);
 
}
 
void loop()
{
  
  Serial.print(ultrasonic.Ranging(CM));
  Serial.println("cm");    
  delay(100);
 
  if (ultrasonic.Ranging(CM) < 30) {
  servo.write(90); //ставим вал под 0
  delay(400); //ждем 
  
  servo.write(40); //ставим вал право
  delay(200); //ждем 
  b = (ultrasonic.Ranging(CM));
  delay(200); //ждем 
 
  servo.write(90); //ставим вал под 0
  delay(200); //ждем 
  a = (ultrasonic.Ranging(CM));
  delay(200); //ждем 
  
  servo.write(140); //ставим вал лево
  delay(200); //ждем 
  c = (ultrasonic.Ranging(CM));
  delay(200); //ждем 
  
  servo.write(90); //ставим вал под 0
  
   
   
    if ((a > b) && (a > c))
   {
     
       digitalWrite (IN2_2, HIGH);
       digitalWrite (IN1_1, LOW);   
       analogWrite(EN2,250);
       digitalWrite (IN2, HIGH);
       digitalWrite (IN1, LOW);
       analogWrite(EN1,250);
  
  
     /* digitalWrite(led, HIGH);
      delay (200);
      digitalWrite(led, LOW);
     */ 
   }
  
    else if ((b > a) && (b > c))
    {  
      
      digitalWrite(led, HIGH);
      delay (200);
      digitalWrite(led, LOW);
      delay (200);
      digitalWrite(led, HIGH);
      delay (200);
      digitalWrite(led, LOW);
      
    } 
    else
    {
      digitalWrite(led, HIGH);
      delay (200);
      digitalWrite(led, LOW);
      delay (200);
      digitalWrite(led, HIGH);
      delay (200);
      digitalWrite(led, LOW);
      delay (200);
      digitalWrite(led, HIGH);
      delay (200);
      digitalWrite(led, LOW);
      
    } 
    
 
  }
 
 
 
  
  
  
 
}
 
 
 
 
Letro
Offline
Зарегистрирован: 10.12.2015

Коллеги, товарищи, друзья, всю ночь не спал, так и не победил. Помогите.