Buenas, estoy haciendo una placa para mi lavadora y el problema que tengo es que el programa que le he hecho, hace el giro hacía un lado y para el otro lado no y luego cuando le toca otra vez al otro, sí lo hace.
Sin embargo, si repito el programa, si funciona para los dos lados y es una cosa que no le veo el fallo y llevo ya unos días que no se que hacer.
#include <LiquidCrystal.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 16, 2);
#define val1 12
#define val2 11
#define rele2 7
#define rele1 6
#define bomba 9
#define bloqueo 12
#define taco 1
int pul = 0;
long int pul2 = 0;
int sen = 0;
int tiem = 0;
unsigned long start = 0;
unsigned long resta = 0;
int regulacion = 200;
unsigned tiempo2 = 0;
unsigned int inicio, inicio2 = 0;
unsigned int tiempo, tiempo3 = 0;
long int rpm1 = 0;
long int rpm2 = 0;
int valor;
byte a, c = 0;
byte b = 0;
byte d = 0;
int EstadoActual = 0;
int EstadoAnterior = 0;
int x=0;
void setup() {
lcd.init();
lcd.backlight();
lcd.clear();
pinMode(rele1, OUTPUT);
digitalWrite(rele1, 0);
pinMode(rele2, OUTPUT);
digitalWrite(rele2, 0);
pinMode(5, OUTPUT);
pinMode(4, INPUT_PULLUP);
pinMode(val1, OUTPUT);
digitalWrite(val1, LOW);
pinMode(val2, OUTPUT);
digitalWrite(val2, LOW);
pinMode(bomba, OUTPUT);
digitalWrite(bomba, 0);
pinMode(bloqueo, OUTPUT);
digitalWrite(bloqueo, 1);
attachInterrupt(taco, senal, FALLING);
//pinMode(3, INPUT);
// Serial.begin(250000);
lcd.setCursor(4, 0);
lcd.print("INICIO");
a = 1;
}
void loop() {
int n = (45 * regulacion);
if (b == 2) {
b = 0;
}
if (a == 1 && b == 0) {
lcd.setCursor(0, 0);
lcd.print(a);
lcd.print(b);
digitalWrite(rele1, LOW);
digitalWrite(rele2, HIGH);
delay(4000);
start = millis();
tiem = millis();
inicio = millis();
inicio2 = millis();
a = 2;
}
while (a == 1 && b == 1) {
lcd.setCursor(0, 0);
lcd.print(a);
lcd.print(b);
digitalWrite(rele2, LOW);
digitalWrite(rele1, HIGH);
delay(4000);
start = millis();
tiem = millis();
inicio = millis();
inicio2 = millis();
a = 2;
}
while (a == 2) {
tiempo = millis() - inicio;
tiempo2 = millis() - tiem;
tiempo3 = millis() - inicio2;
EstadoActual = digitalRead(4);
if (EstadoActual == 0 & EstadoAnterior == 1) {
c = 1;
}
EstadoAnterior = EstadoActual;
if (c == 1) {
delayMicroseconds(n);
digitalWrite(5, HIGH);
delayMicroseconds(10);
digitalWrite(5, LOW);
c = 0;
}
if (tiempo >= 1000) {
rpm1 = (pul * 60) / 600;
pul = 0;
pul2 = 0;
inicio = millis();
}
if (tiempo2 >= 1000) {
lcd.clear();
lcd.setCursor(0, 1);
lcd.print(rpm1);
tiem = millis();
}
resta = millis() - start;
if (resta >= 20 && regulacion >= 113 && b == 0) {
regulacion--;
n = (45 * regulacion);
start = millis();
}
if (tiempo3 >= 13000) {
regulacion = 200;
delay(100);
lcd.setCursor(0, 0);
lcd.print("FIN");
digitalWrite(rele2, LOW);
digitalWrite(rele1, LOW);
b++;
delay(5500);
a=1;
}
}}
La cosa es que la inversión de giro lo hace pero no me manda los impulsos al triac para que el motor marche.
Saludos y gracias de antemano.