Go Down

Topic: Proyecto que involucra el control de dos tiempos diferentes. (Read 61 times) previous topic - next topic

CharlieTango04

Ayuda con un proyecto que involucra el control de dos tiempos diferentes.

Buen día, no tengo mucho programando en arduino, quisiera saber si me pueden orientar.

Tengo un proyecto en el cual necesito controlar dos relevadores en secuencia, primero se activa A, al detectar el sensorA espera 5segundos y se desactiva A y despues se activa B, al detectar el SensorB se desactiva B 5segundos despues, después vuelve a funcionar A y despues B, así hasta el infinito.

Los relevadores se activan al recibir una señal de un botón (BotónA y BotónB).
Y se desactivan al detectar la señal de los sensores (SensorA y SensorB).


Code: [Select]
//Ya tenia ésta parte usando (está resumido)
if (EstadoBotonA==HIGH&&z==0){
digitalWrite(A,HIGH);
        if(SensorA==HIGH){
        digitalWrite(A,HIGH);
        delay(5000);
        digitalWrite(A,LOW);
        delay(5000);
        z++;
        }
}
else {digitalWrite(A,HIGH);}

else if(z==1&&BotonB==HIGH){
digitalWrite(B,HIGH);
        if(SensorB==HIGH){
        digitalWrite(B,HIGH);
        delay(5000);
        digitalWrite(B,LOW);
        delay(5000);
        z++;
        }
}
else {digitalWrite(B,HIGH);}

else if (z==2){z==0;}




Sin embargo no puedo usar delay, ya que dentro de los 5 segundos que pasan para desactivar A puedo presionar el BotónB para activar a B.

También lo intenté con millis, pero no le entiendo del todo.
Hice éste pequeño código para probar, pero no me funciona.

Code: [Select]
const int ledPin =7;
int b1=5;
int b2=4;
int Estb1=0;
int Estb2=0;
int led2=6;
int ledState = LOW;
int led2State = LOW;
int b1EST=0;
int b2EST=0;    
int x=0;
int y=0;
int z=0;    
unsigned long previousMillis = 0;
const long interval = 2000;    
unsigned long prevMillis = 0;
const long inter = 2000;        
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(b1, INPUT);
pinMode(b2, INPUT);
}

void loop() {

b1EST=digitalRead(b1);
b2EST=digitalRead(b2);
if (b1EST==HIGH&&z==0){
unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {
  previousMillis = currentMillis;
       if (ledState == LOW) {
       ledState = HIGH;
       }
  else {ledState = LOW;z++;}
  digitalWrite(ledPin, ledState);
  }
}
else if (b2EST==HIGH&&z==1){

unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {
  previousMillis = currentMillis;
       if (led2State == LOW) {
       led2State = HIGH;
       }
  else {led2State = LOW;z++;}
  digitalWrite(led2, led2State);
  }

}
else if(z==2){z=y;}
else{digitalWrite(led2, LOW);digitalWrite(ledPin, LOW);}
}


Espero puedan darme algunas ideas.

Saludos y de antemano les agradezco.

Go Up