Un led ,dos frecuencias diferentes con millis

buenas tardes, desde ya agradezco su atención y tiempo. Necesito pasar la siguiente secuencia para ser controlada por millis.



int led=2;

void setup() {

 pinMode(led, OUTPUT);
}

void loop() {

digitalWrite(led,HIGH); //primera frecuencia
delay(40);
digitalWrite(led,LOW);
delay(40);
digitalWrite(led,HIGH);
delay(40);
digitalWrite(led,LOW);
delay(40);
digitalWrite(led,HIGH);
delay(40);
digitalWrite(led,LOW);
delay(1000);
digitalWrite(led,HIGH);  //segunda frecuencia
delay(100);
digitalWrite(led,LOW);
delay(100);
digitalWrite(led,HIGH);
delay(100);
digitalWrite(led,LOW);
delay(500);
}

He buscado material y visto tutoriales del uso de la función millis con leds, sin embargo no he encontrado una forma ,que me permita controlar mas de una frecuencia en un mismo led. Por lo general la fórmula es la misma, y solo permite controlar el tiempo en que el led esta apagado o encendido, y eso se repetirá continuamente ,ejemplo:


unsigned long tiempo = 0;
unsigned long transcurrido = 0;
unsigned long transcurrido1 = 0;
int estado_led = LOW;
int ver1 = 2;


void setup() {

  pinMode(ver1, OUTPUT);



}
void loop() {
  tiempo = millis();

  if (tiempo - transcurrido >= 500 && estado_led == LOW) {
    estado_led = HIGH;
    digitalWrite(ver1, estado_led);
     transcurrido = tiempo;
  }
  else if (tiempo - transcurrido >= 50 && estado_led == HIGH) {
    estado_led = LOW;
    digitalWrite(ver1, estado_led);
  transcurrido = tiempo;
  }
}

y no he podido encontrar la manera de añadir una ,o mas frecuencias .
quedo atento a sus comentarios .desde ya muchas gracias.

Una forma podría ser

unsigned long intervalo[12] = {40, 40, 40, 40, 40, 1000, 100, 100, 100, 100, 100, 500};

const int LED = 2;
int contador = 0;
unsigned long transcurrido;
bool estadoLed = true;

void setup() {
  pinMode(LED, OUTPUT);
  digitalWrite(LED, HIGH);
  transcurrido = millis();
}

void loop() {
  if(millis() - transcurrido >= intervalo[contador]) {
    estadoLed = !estadoLed;
    digitalWrite(LED, estadoLed ? HIGH : LOW);
    transcurrido += intervalo[contador];
    contador++;
    if(contador == 12) { 
      contador = 0;
    }
  }
}

La línea

digitalWrite(LED, estadoLed ? HIGH : LOW);

equivale a

if(estadoLed) {    // estadoLed == true
  digitalWrite(LED, HIGH);
} else {
  digitalWrite(LED, LOW);
}

Saludos

1 Like

buen dia ,le agradezco su ayuda ,y claro que funciona perfecto . muchas gracias . Saludos.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.