Muy buenas gente del foro! El año pasado estuve preguntando y recolectando info la cual me sirvió de mucho! Ahora tengo una duda con un programa que tengo el cual funciona y quiero agregarle algo.
Acá les pongo mi programa para controlar con motores PAP lo que sería las secuencias para las barreras de entrada y salida de un estacionamiento automatizado en el cual por medio de 4 pulsadores, dos de entrada y dos de salida, se realizan dichas secuencias:
int reedswitch = 0;
int entrada = 2; //pin
int reedswitch1 = 0;
int entrada1 = 3; //pin
int reedswitch2 = 0;
int salida = A4; //pin
int reedswitch3 = 0;
int salida1 = A5; //pin
int motorPin1 = 4;
int motorPin2 = 5;
int motorPin3 = 6;
int motorPin4 = 7;
int motorPinA = A0;
int motorPinB = A1;
int motorPinC = A2;
int motorPinD = A3;
int delayTime = 100; //delay que determina la espera entre pasos
int delayTime1 = 60; //delay que determina la velocidad de giro entro pasos
int count = 0;
void setup()
{
pinMode (2, INPUT); //entrada
pinMode (3, INPUT); //entrada
pinMode (A4, INPUT); //salida
pinMode (A5, INPUT); //salida
pinMode (motorPin1, OUTPUT);
pinMode (motorPin2, OUTPUT);
pinMode (motorPin3, OUTPUT);
pinMode (motorPin4, OUTPUT);
pinMode (motorPinA, OUTPUT);
pinMode (motorPinB, OUTPUT);
pinMode (motorPinC, OUTPUT);
pinMode (motorPinD, OUTPUT);
}
void loop()
{
reedswitch = digitalRead(entrada);
if (reedswitch == HIGH)
for (count = 0; count < 3; count++) //aca uso el for para determinar los grados de giro
{
//Punto A (primer paso)
digitalWrite (motorPin1, HIGH);
digitalWrite (motorPin2, LOW);
digitalWrite (motorPin3, LOW);
digitalWrite (motorPin4, HIGH);
delay (delayTime1);
//Punto B (segundo paso)
digitalWrite (motorPin1, HIGH);
digitalWrite (motorPin2, HIGH);
digitalWrite (motorPin3, LOW);
digitalWrite (motorPin4, LOW);
delay (delayTime1);
//Punto C (tercer paso)
digitalWrite (motorPin1, LOW);
digitalWrite (motorPin2, HIGH);
digitalWrite (motorPin3, HIGH);
digitalWrite (motorPin4, LOW);
delay (delayTime1);
//Punto D (cuarto paso)
digitalWrite (motorPin1, LOW);
digitalWrite (motorPin2, LOW);
digitalWrite (motorPin3, HIGH);
digitalWrite (motorPin4, HIGH);
delay (delayTime1);
}
delay (delayTime);
reedswitch1 = digitalRead(entrada1);
if (reedswitch1 == HIGH)
for (count = 0; count < 3; count++) //aca uso el for para determinar los grados de giro
{
digitalWrite (motorPin1, LOW);
digitalWrite (motorPin2, LOW);
digitalWrite (motorPin3, HIGH);
digitalWrite (motorPin4, HIGH);
delay (delayTime1);
digitalWrite (motorPin1, LOW);
digitalWrite (motorPin2, HIGH);
digitalWrite (motorPin3, HIGH);
digitalWrite (motorPin4, LOW);
delay (delayTime1);
digitalWrite (motorPin1, HIGH);
digitalWrite (motorPin2, HIGH);
digitalWrite (motorPin3, LOW);
digitalWrite (motorPin4, LOW);
delay (delayTime1);
digitalWrite (motorPin1, HIGH);
digitalWrite (motorPin2, LOW);
digitalWrite (motorPin3, LOW);
digitalWrite (motorPin4, HIGH);
delay (delayTime1);
delay (delayTime);
}
// Ahora para la salida
reedswitch2 = digitalRead(salida);
if (reedswitch2 == HIGH)
for (count = 0; count < 3; count++) //aca uso el for para determinar los grados de giro
{
//Punto A (primer paso)
digitalWrite (motorPinA, HIGH);
digitalWrite (motorPinB, LOW);
digitalWrite (motorPinC, LOW);
digitalWrite (motorPinD, HIGH);
delay (delayTime1);
//Punto B (segundo paso)
digitalWrite (motorPinA, HIGH);
digitalWrite (motorPinB, HIGH);
digitalWrite (motorPinC, LOW);
digitalWrite (motorPinD, LOW);
delay (delayTime1);
//Punto C (tercer paso)
digitalWrite (motorPinA, LOW);
digitalWrite (motorPinB, HIGH);
digitalWrite (motorPinC, HIGH);
digitalWrite (motorPinD, LOW);
delay (delayTime1);
//Punto D (cuarto paso)
digitalWrite (motorPinA, LOW);
digitalWrite (motorPinB, LOW);
digitalWrite (motorPinC, HIGH);
digitalWrite (motorPinD, HIGH);
delay (delayTime1);
}
delay (delayTime);
reedswitch3 = digitalRead(salida1);
if (reedswitch3 == HIGH)
for (count = 0; count < 3; count++) //aca uso el for para determinar los grados de giro
{
digitalWrite (motorPinA, LOW);
digitalWrite (motorPinB, LOW);
digitalWrite (motorPinC, HIGH);
digitalWrite (motorPinD, HIGH);
delay (delayTime1);
digitalWrite (motorPinA, LOW);
digitalWrite (motorPinB, HIGH);
digitalWrite (motorPinC, HIGH);
digitalWrite (motorPinD, LOW);
delay (delayTime1);
digitalWrite (motorPinA, HIGH);
digitalWrite (motorPinB, HIGH);
digitalWrite (motorPinC, LOW);
digitalWrite (motorPinD, LOW);
delay (delayTime1);
digitalWrite (motorPinA, HIGH);
digitalWrite (motorPinB, LOW);
digitalWrite (motorPinC, LOW);
digitalWrite (motorPinD, HIGH);
delay (delayTime1);
delay (delayTime);
}
}Bueno, esto funciona, pero lo que tengo ganas de hacer es que como en el estacionamiento sólo hay cuatro lugares disponibles, implementar un contador que cuente las veces que la barrera de entrada deja pasar los coches, al momento que quiera entrar otro y esta lleno, osea que se pulse el pulsador, no se abra hasta que salga uno por la salida. Alguna ayudita? (En el código dice reedswitch pero son pulsadores)
Gracias.