Всем привет!
Всю голову сломал, но не крутится второй мотор ( 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);
}
}
}
Коллеги, товарищи, друзья, всю ночь не спал, так и не победил. Помогите.