Hola gente, soy nuevo en el foro y nuevo en Arduino.
Estoy tratando de programar un Arduino UNO, para controlar 2 persianas diferentes, con 2 pulsadores cada uno. si presiono un pulsador Sube, y si presiono el contrario Baja, anulando al anterior. Lo que no logro es que presionando el mismo pulsador este detenga la acción de Sube o Baja.
Cada persiana tiene distintos tiempos de subida y bajada, a modo de prueba he puesto 4seg y 5 seg, en realidad tardan 2min y 2,5min, la idea es que el retardo sea de 3min y utiliza el mismo fin de carrera del motor, una vez que resuelva el primer tema, acomodaré los tiempos. Estoy usando un modulo RF con 4 botones, como si fueran simples pulsadores y funciona perfecto.
El código base lo saqué de aquí mismo: Control Persianas ***** SOLUCIONADO ***** - Proyectos - Arduino Forum
Este es el codigo adaptado a mis necesidades...
const byte ReleSubir1 = 2; // Relay In1
const byte ReleBajar1 = 3; // Relay In2
const byte ReleSubir2 = 4; // Relay In3
const byte ReleBajar2 = 5; // Relay In4
const byte inputPin1 = 8; // pulsador A
const byte inputPin2 = 9; // pulsador B
const byte inputPin3 = 10; // pulsador C
const byte inputPin4 = 11; // pulsador D
int p1, p1Ant;
int p2, p2Ant;
int p3, p3Ant;
int p4, p4Ant;
int sube = 0;
int baja = 0;
int sube2 = 0;
int baja2 = 0;
unsigned long stime = 0;
unsigned long stime2 = 0;
void setup() {
pinMode(ReleSubir1, OUTPUT);
pinMode(ReleBajar1, OUTPUT);
pinMode(ReleSubir2, OUTPUT);
pinMode(ReleBajar2, OUTPUT);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
pinMode(inputPin1, INPUT_PULLUP);
pinMode(inputPin2, INPUT_PULLUP);
pinMode(inputPin3, INPUT_PULLUP);
pinMode(inputPin4, INPUT_PULLUP);
}
void loop(){
p1=digitalRead(inputPin1);
p2=digitalRead(inputPin2);
p3=digitalRead(inputPin3);
p4=digitalRead(inputPin4);
///////////////////////////////////
//Programa
if (p1 == HIGH && p1Ant == LOW) {
digitalWrite(ReleBajar1, HIGH);
delay(2000);
digitalWrite(ReleSubir1, LOW);
sube = true;
baja = false;
stime = millis();
}
if (p2 == HIGH && p2Ant == LOW) {
digitalWrite(ReleSubir1, HIGH);
delay(2000);
digitalWrite(ReleBajar1, LOW);
sube = false;
baja = true;
stime = millis();
}
if (p3 == HIGH && p3Ant == LOW) {
digitalWrite(ReleBajar2, HIGH);
delay (2000);
digitalWrite(ReleSubir2, LOW);
sube2 = true;
baja2 = false;
stime2 = millis();
}
if (p4 == HIGH && p4Ant == LOW) {
digitalWrite(ReleSubir2, HIGH);
delay (2000);
digitalWrite(ReleBajar2, LOW);
sube2 = false;
baja2 = true;
stime2 = millis();
}
p1 = p1Ant;
p2 = p2Ant;
p3 = p3Ant;
p4 = p4Ant;
if (sube) {
if (millis() - stime > 4000UL) {
digitalWrite(ReleSubir1, HIGH);
sube = false;
}
}
if (baja) {
if (millis() - stime > 4000UL) {
digitalWrite(ReleBajar1, HIGH);
baja = false;
}
}
if (sube2) {
if (millis() - stime2 > 5000UL) {
digitalWrite(ReleSubir2, HIGH);
sube2 = false;
}
}
if (baja2) {
if (millis() - stime2 > 5000UL) {
digitalWrite(ReleBajar2, HIGH);
baja2 = false;
}
}
}
Agradeceré de antemano cualquier ayuda, saludos!