Pages: [1]   Go Down
Author Topic: lectura de pulsadores con la funcion millis  (Read 241 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

quiero hacer un programa que lea el estado de un switch para seleccionar dos tiempos para controlar una una luz uv y que independientemente si uno esta prendido pueda prender cualquier otro de los tres lamparas....lo hice con delay pero no se puede prender mas de un foco a la ves con la function delay, se que exista la function (millis), alguien me puede ayudar?
 este es el codigo que tengo actualmente:
nt ledPin1=13;
int ledPin2=12;
int ledPin3=11;
int ledPin4=9;

int inSelector1= 3;
int inSelector2= 4;
int inSelector3=5;
int inSelector4=2;

int inPedal1=10;
int inPedal2=8;
int inPedal3=7;
int inPedal4=6;

int timer1;
int timer2;


int val1=0;//selector de tiempo1
int val2=0;//estado del pedal1
int val3=0;//selector de tiempo2
int val4=0;//estado del pedal2
int val5=0;//selector de tiempo3
int val6=0;//estado pedal3
int val7=0;//selector de tiempo4
int val8=0;//estado pedal4

void setup() {
 
pinMode(ledPin1,OUTPUT);//relay1
pinMode(ledPin2, OUTPUT);//relay2
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
pinMode(inSelector1,INPUT);
pinMode(inSelector2, INPUT);
pinMode(inSelector3, INPUT);
pinMode(inSelector4, INPUT);
pinMode(inPedal1,INPUT);
pinMode(inPedal2, INPUT);
pinMode(inPedal3, INPUT);
pinMode(inPedal4, INPUT);

timer1=2000;
timer2=10000;

}

void loop() {
  val1= digitalRead(inSelector1);
  val2= digitalRead(inPedal1);
  val3= digitalRead(inSelector2);
  val4= digitalRead(inPedal2);
  val5= digitalRead(inSelector3);
  val6= digitalRead(inPedal3);
  val7= digitalRead(inSelector4);
  val8= digitalRead(inPedal4);

if(val1==LOW && val2==HIGH){
  digitalWrite(ledPin1, HIGH);
  delay(timer1);
  digitalWrite(ledPin1, LOW);
}
else if(val1==HIGH && val2==HIGH){
  digitalWrite(ledPin1, HIGH);
  delay(timer2);
  digitalWrite(ledPin1, LOW);
}
else{
 digitalWrite(ledPin1, LOW);
}

 if(val3==LOW&& val4==HIGH){
    digitalWrite(ledPin2,HIGH);
    delay(timer1);
    digitalWrite(ledPin2,LOW);
  }
    else if(val3==HIGH&&val4==HIGH){
    digitalWrite(ledPin2,HIGH);
    delay(timer2);
    digitalWrite(ledPin2,LOW);
   }

else{
     digitalWrite(ledPin2,LOW);
    }

if(val5==LOW&& val6==HIGH){
  digitalWrite(ledPin3,HIGH);
  delay(timer1);
  digitalWrite(ledPin3,LOW);
}
else if(val5==HIGH&&val6==HIGH){
digitalWrite(ledPin3,HIGH);
delay(timer2);
digitalWrite(ledPin3,LOW);
}
else{
digitalWrite(ledPin3,LOW);
}

if(val7==LOW&& val8==HIGH){
  digitalWrite(ledPin4,HIGH);
  delay(timer1);
  digitalWrite(ledPin4,LOW);
}
else if(val7==HIGH&&val8==HIGH){
digitalWrite(ledPin4,HIGH);
delay(timer2);
digitalWrite(ledPin4,LOW);
}
else{
digitalWrite(ledPin4,LOW);
}
}

Logged

Maracaibo
Offline Offline
Jr. Member
**
Karma: 2
Posts: 99
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Saludos
Te coloco un Sketch que realiza lo que deseas, solo tienes que copiar y cargarlo, pruebalo y me avisas que tal te resulta, ya que lo hago con la finalidad de aprender, por lo que quisiera los resultados para corregir cualquier falla y mejorar.

Hice una pequeña modificacion al sketch, cargalo ahora y dime como te funciona.

Code:
/* Encendido temporizado de leds, con selección de tiempos.
Newlin Nieves Agosto 15/2014
Los pines de entrada tienen activado el pull up, para conectar
lo pulsadores y switches entre el pin de entrada y tierra.
*/
/* Encendido temporizado de leds, con selección de tiempos.
Newlin Nieves Agosto 15/2014
Los pines de entrada tienen activado el pull up, para conectar
lo pulsadores y switches entre el pin de entrada y tierra.
*/
int ledPin[4]={
 13,12,11,9};
int inSelector[4]= {
  3,4,5,2};
int inPedal[4]={
  10,8,7,6};
int timer1;
int timer2;
unsigned long tiempo;
unsigned long tiempos[4];
int espera[4]= {
  10000,10000,10000,10000};
boolean ejecutando[4]= {
  false,false,false,false};

void setup() {
  for (int i = 0; i < 4; i++){
    pinMode(ledPin[i],OUTPUT);
    pinMode(inSelector[i],INPUT);
    pinMode(inPedal[i],INPUT);
    digitalWrite(inSelector[i],HIGH);
    digitalWrite(inPedal[i],HIGH);
  }  

  timer1=2000;
  timer2=10000;

}

void loop() {
  for (int i= 0; i < 4; i++){
    if(ejecutando[i]==false){    
      if (digitalRead(inPedal[i])==0){
        switch (digitalRead(inSelector[i])){
        case LOW:
          espera[i]=timer1;
          break;
        case HIGH:
          espera[i]=timer2;          
          break;
        }
       tiempos[i]=millis();
      }
      else if (digitalRead(inPedal[i])==1){
        espera[i]=0;
      }
    }

  }

  if ((millis()-tiempos[0]) < espera[0]){
    ejecutando[0]= true;
    digitalWrite(ledPin[0],HIGH);
  }
  else {
    ejecutando[0]=false;
    digitalWrite(ledPin[0],LOW);
  }

  if ((millis()-tiempos[1]) < espera[1]){
    ejecutando[1]= true;    
    digitalWrite(ledPin[1],HIGH);
  }
  else {  
    ejecutando[1]=false;
    digitalWrite(ledPin[1],LOW);
  }

  if ((millis()-tiempos[2]) < espera[2]){
    ejecutando[2]= true;    
    digitalWrite(ledPin[2],HIGH);
  }
  else {  
    ejecutando[2]=false;
    digitalWrite(ledPin[2],LOW);
  }

  if ((millis()-tiempos[3]) < espera[3]){
    ejecutando[3]= true;    
    digitalWrite(ledPin[3],HIGH);
  }  
  else {  
    ejecutando[3]=false;
    digitalWrite(ledPin[3],LOW);
  }  
}
« Last Edit: August 20, 2014, 09:26:47 pm by max_saeta » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola muchas gracias por responder,
 cargue el codigo y esta arrojando los siguientes errores:
1-De izq a der el tercer foco no prende empezando a presionar los pedales de izq a der, pero conforme se van terminamdo el tiempo programado de izq a der se apaga el primero, y cuando se apaga el Segundo, el tercer foco que no prendio inicialmente cuando presione el pedal, prende por un instante y se apaga y finalmente se apaga el cuanto foco cuando se termina el tiempo normal.
2.-Si solo presiono el tercer pedal y espero a que se termine el tiempo programado y al apagarse, automaticamente se enciende el cuarto foco por un periodo corto de tiempo "solo" y se apaga.



Este foco esta conectado al pin 11
Logged

Maracaibo
Offline Offline
Jr. Member
**
Karma: 2
Posts: 99
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Saludos
Hice una pequeña modificación al sketch, cárgalo ahora y dime como te funciona. Yo lo probé de distintas maneras  y me funciona perfectamente, cada salida es controlada por su pinpedal y toma el tiempo seleccionado por el pinselector
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Gracias Amigo, pero cargue el Nuevo codigo pero sigue haciendo lo mismo, no hubo cambios, lo estoy alientando directamente de la compu con el cable usb, es possible que necesite mas voltaje y por eso funciona incorrectamente, la falla es exactamente igual.que la anterior.

saludos
Logged

Maracaibo
Offline Offline
Jr. Member
**
Karma: 2
Posts: 99
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Saludos.
Ya creo que tienes problemas en las conexiones. Revisa el cableado y los pulsadores. Si los selectores y pedales son pullup o pulldown
Logged

Pages: [1]   Go Up
Jump to: