Top.Mail.Ru
Ответы

Управление 2 моторчика l298n

есть два моторчика с джостиком я в коде пошаманил которого часть с инета слизал
нужно чтобы было вот так:
вперед= два моторчика вперед
назад = два моторчика назад
влево= мотор 1 влево другой вправо
вправо= мотор 1 влево другйо в право
а получается вот так:
вперед=нечего
назад=нечего
влево=мотор влево другой впрпаво
вправо=мотор вправо другой влево
вот код:

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
 int xValue, yValue;  
int ENA = 8;  
int in1 = 9;  
int in2 = 10;  
int ENB = 13;  
int in3 = 11;  
int in4 = 12;  
int xPin = A1;  
int yPin = A0;   // Ось Y подключена к Analog 0  
void setup()  
{  
  pinMode(ENA, OUTPUT);  
  pinMode(ENB, OUTPUT);  
  pinMode(in1, OUTPUT);  
  pinMode(in2, OUTPUT);  
  pinMode(in3, OUTPUT);  
  pinMode(in4, OUTPUT);  
  pinMode(xPin, INPUT);  
  pinMode(yPin, INPUT);  
  Serial.begin(9600);  
}  
void loop()  
{  
//читаем значения с джойстика и ремапим их от 0 до 252  
xValue = map(analogRead(xPin), 0, 1024, 0, 252);  
yValue = map(analogRead(yPin), 0, 1024, 0, 252);  
Serial.print(xValue); //выводим значение x  
Serial.print("\t"); //отступ  
Serial.print(yValue); //выводим значение y  
Serial.print("\t"); //отступ  
if (xValue <= 100)  
{  
digitalWrite(ENA, HIGH); // выключаем канал A  
digitalWrite(in1, HIGH);  
digitalWrite(in2, LOW); 
digitalWrite(ENB, HIGH); // выключаем канал A  
digitalWrite(in3, HIGH);  
digitalWrite(in4, LOW);  
}  
else if (xValue > 101 && xValue <149)  
{  
digitalWrite(in1, LOW);  
digitalWrite(in2, LOW); 
digitalWrite(in3, LOW);  
digitalWrite(in4, LOW);  
}  
if (xValue >= 150)  
{  
digitalWrite(ENA, HIGH); // выключаем канал A  
digitalWrite(in1, LOW);  
digitalWrite(in2, HIGH); 
digitalWrite(ENB, HIGH); // выключаем канал A  
digitalWrite(in3, LOW);  
digitalWrite(in4, HIGH);  
}  
else if (xValue > 101 && xValue <149)  
{  
digitalWrite(in1, LOW);  
digitalWrite(in2, LOW); 
digitalWrite(in3, LOW);  
digitalWrite(in4, LOW);  
}  
///////////////////////////////////////////////////////////////////////////////////////////////  
if (yValue <= 100)  
{ 
  digitalWrite(ENA, HIGH); // выключаем канал A  
digitalWrite(in1, LOW);  
digitalWrite(in2, HIGH);  
digitalWrite(ENB, HIGH); // выключаем канал A  
digitalWrite(in3, HIGH);  
digitalWrite(in4, LOW);  
}  
else if (yValue > 101 && yValue <149)  
{ 
digitalWrite(in1, LOW);  
digitalWrite(in2, LOW);  
digitalWrite(in3, LOW);  
digitalWrite(in4, LOW);  
}  
if (yValue >= 150)  
{  
digitalWrite(ENA, HIGH);  // включаем канал B  
digitalWrite(in1, HIGH);  
digitalWrite(in2, LOW);  
digitalWrite(ENB, HIGH);  // включаем канал B  
digitalWrite(in3, LOW);  
digitalWrite(in4, HIGH);  
}  
else if (yValue > 101 && yValue <149)  
{ 
digitalWrite(in1, LOW);  
digitalWrite(in2, LOW);  
digitalWrite(in3, LOW);  
digitalWrite(in4, LOW);  
}  
} 
По дате
По рейтингу
Аватар пользователя
Просветленный

Бубен сначала купи чтобы шаманить. А вперед ничего и назад ничего, потому что ты, де6ил, вот этим блоком

1234567
 else if (yValue > 101 && yValue <149)   
{  
digitalWrite(in1, LOW);   
digitalWrite(in2, LOW);   
digitalWrite(in3, LOW);   
digitalWrite(in4, LOW);   
}    

обнуляешь первую часть, которая у тебя отвечает за вперед назад. А еще собрался программировать радиомодули, шаман-копипастер недоделанный.

Да, и если тебе даже хватит своей извилины чтобы его исправить, то все равно все будет работать через ж0пy, потому что нужно обрабатывать 9 положений джойстика а не 5.

Аватар пользователя
Ученик

ок спс

Аватар пользователя
Гуру

Добавь к типам переменных unsigned.

Аватар пользователя
Мастер

как работает этот код?

Аватар пользователя
Ученик

короче если работает 2 часть то не работает 1 я хз почему

Аватар пользователя
Ученик

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

Аватар пользователя
Ученик

короч то что с инета делает так:
джостик вперед=мотор1 вперед
назад=мотор1назад
влево=мотор2 вперед
вправо=мотор2 назад
надо вот так:
вперед=два моторчика вперед
назад=оба назад
влево=один влево другой вправо
вправо=один вправо другой влево
а получилось вот так:
вперед=нет реакции
назад=нет реакции
влево=один влево другой вправо
вправо=один вправо другой влево

Аватар пользователя
Ученик

там черточка 1 и 2 часть разделяет работает 2 часть

Аватар пользователя
Ученик

if (yValue <= 100)
{
digitalWrite(ENA, HIGH); // выключаем канал A
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(ENB, HIGH); // выключаем канал A
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
}
else if (yValue > 101 && yValue <149)
{
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
if (yValue >= 150)
{
digitalWrite(ENA, HIGH); // включаем канал B
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(ENB, HIGH); // включаем канал B
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
}
else if (yValue > 101 && yValue <149)
{
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}

Аватар пользователя
Ученик

ееееееесть я смог код скинуть?

Аватар пользователя
Ученик

сюда

Аватар пользователя
Просветленный

ветер с моря дул, деревья в дубовой роще шумели...

Аватар пользователя
Ученик

чего?



Видео по теме