Saludos a la comunidad:
Estoy construyendo un cochecito con dos motores dc una placa arduino leonardo y controlado por un sensor ir y un mando a distancia. El hardware esta comprobado que funciona y que las conexiones están bien hechas. El problema viene a la hora de ejecutar el código que tengo para el coche. Es un código básico de prueba . un boton mueve adelante los dos motores, otro hacia atras. Solo se mueve un motor. El código es muy simple, y prácticamente es un calco de uno de los ejemplos. Por mas que lo reviso no encuentro el motivo por el que no funciona. Si alguien puede aportar algo, se agradecedira
#include <IRremote.h>
int IN3 = 7; // Input3 conectada al pin 7
int IN4 = 4; // Input4 conectada al pin 4
int ENB = 6; // ENB conectada al pin 6 de Arduino
int IN1= 8; // Input 1 conectada al pin 8
int IN2 = 9; // Input2 conectada al pin 9
int ENA = 10; // ENB conectada al pin 10 de Arduino
int RECEIVE_PIN= 2;
IRrecv irreceiver(RECEIVE_PIN);
decode_results results;
//Se declara una variable volátil que cambiará de estado en el
//módulo de la interrupción y se utilizará fuera.
//Si la variable no se utilizase fuera del módulo de la interrupción
//no sería necesario crearla de tipo volátil.
volatile int estado_actual = 0;
//Se crea la función que se ejecutará cada vez que se active la
//interrupción. Esta función es de tipo void (por lo que no devuelve
//ningún valor) y no tiene parámetros de entrada.
void fun_cambio_estado()
{
//Se cambia al estado contrario al actual, es decir, de LOW se pasa
//a HIGH y de HIGH a LOW.
if (irreceiver.decode(&results)) {
estado_actual=(results.value);
Serial.println(estado_actual, HEX);
irreceiver.resume(); // Recibe el siguiente valor
}
}
void setup()
{
//Se declara el pin digital correspondiente al LED como salida.
pinMode (ENB, OUTPUT);
pinMode (IN3, OUTPUT);
pinMode (IN4, OUTPUT);
pinMode (ENA, OUTPUT);
pinMode (IN1, OUTPUT);
pinMode (IN2, OUTPUT);
pinMode (2, INPUT);
Serial.begin(9600);
irreceiver.enableIRIn(); // Start the receiver
//Se determina la interrupción 0 (por lo que el pin asociado al receptor Ir
//será el 3 en caso de tratarse de un Arduino LEONARDO) a la que se
//le asocia la función fun_cambio_estado que se activará al presionar el
//pulsador (por tratarse del modo change).
attachInterrupt(1, fun_cambio_estado, FALLING);
}
void loop()
{
//Se comprueba la tecla del mando
switch (estado_actual)
{
case 0x61D6D827: //codigo boton adelante
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);
digitalWrite (IN2, HIGH);
digitalWrite (IN1, LOW);
// Aplicamos PWM al pin ENB, haciendo girar el motor, cada 2 seg aumenta la velocidad
analogWrite(ENB,105);
analogWrite(ENA,105);
Serial.println(estado_actual, HEX);
break;
case 0x61D620DF: //codigo boton izquierda
analogWrite(ENB,0);
analogWrite(ENA,0);
break;
case 0x61D6609F: //codigo boton derecha
digitalWrite (IN3, LOW);
digitalWrite (IN4, HIGH);
digitalWrite (IN2, LOW);
digitalWrite (IN1, HIGH);
analogWrite(ENB,125);
analogWrite(ENA,125);
break;
case 0x61D658A7: //codigo boton atras
digitalWrite (IN3, LOW);
digitalWrite (IN4, HIGH);
analogWrite(ENB,125);
break;
break;
}
}