Pages: [1]   Go Down
Author Topic: Ayuda para un novato  (Read 959 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 3
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola quiero encender 3 o mas led de manera alternada sin usar el delay(). Estoy usando la función millis(), y con dos Led me funciona pero cuando quiero encender el tercero lo hace en distinto tiempo que los dos anteriores. acá va el código.

int ledT1 = 13;   // Led testigo (led Rojo)
int ledT2 = 12;   // Led testigo (led verde)
int ledOpc1 = 8; // led amarillo
int ledOpc2 = 9; // led rojo bis
int boton = 2;  // pin donde se encuentra el pulsador
int LedT1State = LOW; 
int LedT2State = LOW;
int LedT3State = LOW;
boolean estadoP1;

long previousMillis = 0;   
long verdetime = 0;
long amatime = 0;

long intRojo = 4000;   // intervalo del parpadeo (en milisegundos)
long intVerde = 4000;  //segundo intervalo
long intAma = 4000;
void setup()
{

pinMode(ledT1, OUTPUT);
pinMode(ledT2, OUTPUT);
pinMode(ledOpc1, OUTPUT);
pinMode(ledOpc2, OUTPUT);
pinMode(boton, INPUT);
previousMillis = millis();
verdetime = (millis()+1000);
amatime = (millis()+1000);
}

void loop()
{
unsigned long currentMillis = millis();    // Se toma el tiempo actual


estadoP1 = digitalRead(boton);
  if ((estadoP1 == true) & (LedT1State==HIGH))
             {
               digitalWrite( ledOpc1, LOW);
             }

if (millis() - previousMillis > intRojo){
    previousMillis = currentMillis;

    if (LedT1State == LOW)
    {
        LedT1State = HIGH;
     }
     else
    {
        LedT1State = LOW;
    }

    digitalWrite(ledT1, LedT1State);

}
//------------------------------fin Led Testigo rojo -----------------------------------

//------------------------------Comienzo luz verd ------------------------------
  estadoP1 = digitalRead(boton);
  if ((estadoP1 == true) & (LedT2State==HIGH))
             {
                  digitalWrite( ledOpc1, HIGH);             
             }
             
  if (millis() - verdetime > intVerde){

verdetime = currentMillis;

    if (LedT2State == LOW)
    {     
       LedT2State = HIGH;
    }
    else
    {
       LedT2State = LOW;
    }

    digitalWrite(ledT2, LedT2State);

}
////---------------------- Fin Led Testigo verde ----------------------------

 if (millis() - amatime >= intAma){
    amatime = currentMillis;

    if (LedT3State == LOW)
    {     
       LedT3State = HIGH;
    }
    else
    {
       LedT3State = LOW;
    }

digitalWrite(ledOpc1, LedT3State);

 
}

La idea es que vayan encendiéndose de manera alternada y que al presionar un pulsador haga algo x.
por ejemplo enciende led1 espera 3 seg se apaga y se enciende el led2 se apaga y se enciende el led3 y se apaga.

Si me pueden ayudar les agradezco (porque me bloquee smiley-grin)
Logged

COM22
Offline Offline
God Member
*****
Karma: 6
Posts: 702
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Intenta simplificar, veo mucho código para hacer algo muy simple, contra más código más posibilidades de error tienes.

Este código es una secuencia de 4 LED utilizando la funcion millis()

Quote
int ledT1 = 13;   // Led testigo (led Rojo)
int ledT2 = 12;   // Led testigo (led verde)
int ledOpc1 = 11; // led amarillo
int ledOpc2 = 10; // led azul


unsigned long time = 0;
unsigned long tRojo = 4000;
unsigned long tVerde = 4000;
unsigned long tAmar = 4000;
unsigned long tAzul = 4000;


void setup() {                
  pinMode(ledT1, OUTPUT);
  pinMode(ledT2, OUTPUT);  
  pinMode(ledOpc1, OUTPUT);  
  pinMode(ledOpc2, OUTPUT);  
}

void loop() {
  
  if ( time + tRojo > millis() ) {
    digitalWrite(ledOpc2, LOW);
    digitalWrite(ledT1, HIGH);  
  } else if ( time + tRojo + tVerde > millis() ) {
    digitalWrite(ledT1, LOW);
    digitalWrite(ledT2, HIGH);
  } else if ( time + tRojo + tVerde + tAmar > millis() ) {
    digitalWrite(ledT2, LOW);
    digitalWrite(ledOpc1, HIGH);
  } else if ( time + tRojo + tVerde + tAmar + tAzul > millis() ) {
    digitalWrite(ledOpc1, LOW);
    digitalWrite(ledOpc2, HIGH);
  } else {
    time = millis();    
  }
  
}

PD: Revisa esto http://arduino.cc/playground/Es/Consejos para un futuro  smiley

Un saludo!
« Last Edit: July 19, 2012, 05:18:15 pm by JRodrigo » Logged


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

Muchas gracias !!!! ahora otra pregunta si yo quiero detectar un pulsador por ejemplo cuando esta encendida el led amarillo como tendría que hacer ?. Muchas gracias de nuevo.
Logged

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

Gracias JRodrigo por tu respuesta, me aclaraste el panorama  smiley-grin y con respecto a detectar el boton lo solucione con un switch() así que cierro el post.



Saludos....
Logged

Pages: [1]   Go Up
Jump to: