Hola, estoy tratando de hacer funcionar un motor a pasos con un módulo ULN2003 conectado al esclavo. El maestro recibe una señal de un pulsador y envía la señal de activación al esclavo. Cuando se envía esta señal, a pesar de que los LEDs del módulo encienden, el motor no gira. El esclavo y el maestro se alimentan cada uno mediante puerto USB y el módulo tiene su propia alimentación a 5V. Todo esta conectado a tierra común. Si pruebo la programación del motor a pasos en un Arduino aparte, el motor gira como debería hacerlo. Agradeceré si alguien puede ayudarme. El código es el siguiente:
//esclavo
#include <Wire.h>
#define LED1 13
#define LED2 12
#define LED3 11
#define LED4 10
#define LED5 9
//pines del motor a pasos
#define IN1 6
#define IN2 5
#define IN3 4
#define IN4 3
int retardo=5; // Tiempo de retardo en milisegundos (Velocidad del Motor)
void setup() {
pinMode(LED1,OUTPUT);
pinMode(LED2,OUTPUT);
pinMode(LED3,OUTPUT);
pinMode(LED4,OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN1, OUTPUT);
Wire.begin(8); // join i2c bus with address #8
Wire.onReceive(receiveEvent); // register event
Serial.begin(9600); // start serial for output
}
void loop() {
delay(100);
}
// function that executes whenever data is received from master
// this function is registered as an event, see setup()
void receiveEvent(int howMany) {
char x = Wire.read(); //
Serial.println(x); // print the CHAR
if (x=='A'){ // A es la señal del botón pulsador que recibe el maestro, la cond esta en el maestro, aqui solo pulsos
paso_izq();
apagado_principal();
Serial.println("abriendo");
digitalWrite(LED1,LOW);
digitalWrite(LED2,LOW);
digitalWrite(LED3,HIGH);
digitalWrite(LED4,LOW);
digitalWrite(LED5,LOW);
}
if (x=='C'){
paso_der();
Serial.println("cerrando");
digitalWrite(LED1,LOW);
digitalWrite(LED2,LOW);
digitalWrite(LED3,LOW);
digitalWrite(LED4,HIGH);
digitalWrite(LED5,LOW);
}
if (x=='X'){
apagado_puerta();
apagado_principal();
Serial.println("esperando");
digitalWrite(LED1,LOW);
digitalWrite(LED2,LOW);
digitalWrite(LED3,LOW);
digitalWrite(LED4,LOW);
digitalWrite(LED5,HIGH);
}
}
void paso_izq() { // Pasos a la izquierda
digitalWrite(IN4, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN1, LOW);
delay(retardo);
digitalWrite(IN4, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN2, HIGH);
digitalWrite(IN1, LOW);
delay(retardo);
digitalWrite(IN4, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN1, HIGH);
delay(retardo);
digitalWrite(IN4, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN1, HIGH);
delay(retardo);
}
void paso_der(){ // Pasos a la derecha
digitalWrite(IN4, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN1, HIGH);
delay(retardo);
digitalWrite(IN4, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN2, HIGH);
digitalWrite(IN1, LOW);
delay(retardo);
digitalWrite(IN4, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN1, LOW);
delay(retardo);
digitalWrite(IN4, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN1, HIGH);
delay(retardo);
}
void apagado_puerta() { // Apagado del Motor
digitalWrite(IN4, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN1, LOW);
}