Управление 2 моторчика l298n
есть два моторчика с джостиком я в коде пошаманил которого часть с инета слизал
нужно чтобы было вот так:
вперед= два моторчика вперед
назад = два моторчика назад
влево= мотор 1 влево другой вправо
вправо= мотор 1 влево другйо в право
а получается вот так:
вперед=нечего
назад=нечего
влево=мотор влево другой впрпаво
вправо=мотор вправо другой влево
вот код:
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ил, вот этим блоком
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);
}
ееееееесть я смог код скинуть?
сюда
ветер с моря дул, деревья в дубовой роще шумели...
чего?