Управление ИК мотор шилдом L293D на 4 двигателя
- Войдите на сайт для отправки комментариев
Мужики, выручайте! Имеется моторшилд на 4 двигателя на L293D. Есть скетч для управления всем этим делом, но с ним что-то не так. При заливке скетча работает корректно только одна кнопка, остальные только выводятся в монитор порта. Если вместо операторов else вставляю delay, то все работает. Помогите, пожалуйста, разобраться. (требуется, чтобы при нажатии кнопки двигатель крутился, при повторном нажатии останавливался).
#include <AFMotor.h>
#include <IRremote.h>
int RECV_PIN = 14;
AF_DCMotor motor_a(1, MOTOR12_64KHZ);
AF_DCMotor motor_b(2, MOTOR12_64KHZ);
AF_DCMotor motor_c(3, MOTOR12_64KHZ);
AF_DCMotor motor_d(4, MOTOR12_64KHZ);
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn();
motor_a.setSpeed(255);
motor_b.setSpeed(255);
motor_c.setSpeed(255);
motor_d.setSpeed(255);
// motor_a.run(RELEASE);
// motor_b.run(RELEASE);
// motor_c.run(RELEASE);
// motor_d.run(RELEASE);
}
void loop()
{
if (irrecv.decode(&results))
{
Serial.println(results.value);
Serial.println(results.value,HEX);
Serial.println("====");
if (results.value == 16771605) //мотор(а) вперед
{
Serial.println("vverhlev");
motor_a.run(FORWARD);
}
else
{
motor_a.run(RELEASE);
}
if (results.value == 16755285) //мотор(б) вперед
{
Serial.println("sgiblev");
motor_b.run(FORWARD);
}
else
{
motor_b.run(RELEASE);
}
if (results.value == 16767525)//мотор(с) вперед
{
Serial.println("vverhprav");
motor_c.run(FORWARD);
}
else
{
motor_c.run(RELEASE);
}
if (results.value == 16751205)//мотор(д) вперед
{
Serial.println("sgibprav");
motor_d.run(FORWARD);
}
else
{
motor_d.run(RELEASE);
}
if (results.value == 16738965) //мотор(а) назад
{
Serial.println("vnizlev");
motor_a.run(BACKWARD);
}
else
{
motor_a.run(RELEASE);
}
if (results.value == 16722645) //мотор(б) назад
{
Serial.println("razgiblev");
motor_b.run(BACKWARD);
}
else
{
motor_b.run(RELEASE);
}
if (results.value == 16734885) //мотор(с) назад
{
Serial.println("vnizprav");
motor_c.run(BACKWARD);
}
else
{
motor_c.run(RELEASE);
}
if (results.value == 16718565)
{
Serial.println("razgibprav");//мотор(д) назад
motor_d.run(BACKWARD);
}
else
{
motor_d.run(RELEASE);
}
irrecv.resume();
}
}
Код в комментарий нужно вставлять с помощью кнопки "Вставка-редактирование кода", а так он совсем нечитаем. :(
Есть похожий вариант: http://blockduino.blogspot.ca/2014/08/ir-rider-w-any-irremote.html
Опять не очень...
Может лучше отформатировать примерно так?
Так становится видно, что 112я строка
выполняется только если выполняется условие
Вынеси эту функцию за скобки условия, по-моему она должна выполняться всегда, это функция считывания IR. Т.е. поменяй местами 112ю и 113ю строки.