Estoy probando controlar un coche con dos motores controlados por un puente H a través de un mando de infrarrojos.
El coche con el puente por separado funciona.
El decodificador de infrarrojos por separado funciona.
Al juntar todo solo se acciona un motor del coche (el otro es como si no estuviera).
He averiguado que quitando ir.begin() si que funcionan los dos motores.
Pongo el códiigo que estoy usando a ver si alguien me puede ayudar:
#include <Arduino.h>
#include <NECIRrcv.h>
#define IRPIN 5 // pin that IR detector is connected to
#define MOTOR1_CTL1 8 // I1
#define MOTOR1_CTL2 9 // I2
#define MOTOR1_PWM 11 // EA
#define MOTOR2_CTL1 6 // I3
#define MOTOR2_CTL2 7 // I4
#define MOTOR2_PWM 10 // EB
#define MOTOR_DIR_FORWARD 0
#define MOTOR_DIR_BACKWARD 1
//int led = 4;
//static int aux = 1;
NECIRrcv ir(IRPIN) ;
void setup()
{
// pinMode(led, OUTPUT);
ir.begin();
// Setup pins for motor 1
pinMode(MOTOR1_CTL1,OUTPUT);
pinMode(MOTOR1_CTL2,OUTPUT);
pinMode(MOTOR1_PWM,OUTPUT);
// Setup pins for motor 2
pinMode(MOTOR2_CTL1,OUTPUT);
pinMode(MOTOR2_CTL2,OUTPUT);
pinMode(MOTOR2_PWM,OUTPUT);
}
void setSpeed(char motor_num, char motor_speed)
{
if (motor_num == 1)
{
analogWrite(MOTOR1_PWM, motor_speed);
}
else
{
analogWrite(MOTOR2_PWM, motor_speed);
}
}
void motorStart(char motor_num, byte direction)
{
char pin_ctl1;
char pin_ctl2;
if (motor_num == 1)
{
pin_ctl1 = MOTOR1_CTL1;
pin_ctl2 = MOTOR1_CTL2;
}
else
{
pin_ctl1 = MOTOR2_CTL1;
pin_ctl2 = MOTOR2_CTL2;
}
switch (direction)
{
case MOTOR_DIR_FORWARD:
{
digitalWrite(pin_ctl1,LOW);
digitalWrite(pin_ctl2,HIGH);
}
break;
case MOTOR_DIR_BACKWARD:
{
digitalWrite(pin_ctl1,HIGH);
digitalWrite(pin_ctl2,LOW);
}
break;
}
}
void motorStop(char motor_num)
{
setSpeed(motor_num, 0);
if (motor_num == 1)
{
digitalWrite(MOTOR1_CTL1,HIGH);
digitalWrite(MOTOR1_CTL2,HIGH);
}
else
{
digitalWrite(MOTOR2_CTL1,HIGH);
digitalWrite(MOTOR2_CTL2,HIGH);
}
}
void loop()
{
unsigned long ircode ;
while (ir.available())
{
ircode = ir.read() ;
switch (ircode)
{
case 3810328320: //tecla 5 parada
motorStop(1);
motorStop(2);
delay(5);
break;
case 3877175040: // tecla 2 avanza
motorStart(1, MOTOR_DIR_FORWARD);
setSpeed(1, 200);
//motorStart(2, MOTOR_DIR_FORWARD);
//setSpeed(2, 200);
delay(5);
break;
case 2907897600: // tecla 8 retrocede
motorStart(1, MOTOR_DIR_BACKWARD);
setSpeed(1, 200);
motorStart(2, MOTOR_DIR_BACKWARD);
setSpeed(2, 200);
delay(5);
break;
case 2774204160: // tecla 6 giro derecha
motorStart(1, MOTOR_DIR_FORWARD);
setSpeed(1, 200);
motorStart(2, MOTOR_DIR_BACKWARD);
setSpeed(2, 200);
delay(5);
break;
case 4144561920: // tecla 4 giro izquierda
motorStart(1, MOTOR_DIR_BACKWARD);
setSpeed(1, 200);
motorStart(2, MOTOR_DIR_FORWARD);
setSpeed(2, 200);
delay(5);
break;
}
}
}