Control secuencia Led con parpadeo

Una vez controlados estos 6 Led, mediante el potenciometro, estoy intentando que uno de los tres primeros Led, parpadee cuando los 6 Led estén al máximo.

// El LED estará conectado al pin 3, 5, 6, 9, 10, 11  que admite control analógico PWM
// El potenciómetro está conectado a 5V y GND, y al puerto analógico Nº 0.

void setup()
{
   pinMode(3, OUTPUT) ; 	// El pin Analógico 3 será el pin de salida.
   pinMode(5, OUTPUT) ; 	// El pin Analógico 5 será el pin de salida.
   pinMode(6, OUTPUT) ; 	// El pin Analógico 6 será el pin de salida.
   pinMode(9, OUTPUT) ; 	// El pin Analógico 9 será el pin de salida.
   pinMode(10, OUTPUT) ; 	// El pin Analógico 10 será el pin de salida.
   pinMode(11, OUTPUT) ; 	// El pin Analógico 11 será el pin de salida.
   pinMode(A0, INPUT) ; 	// El pin Analógico A0 será el pin de entrada.
   const int ledPIN1 =5 ;
}
  
void loop()
{
  int adc = analogRead(A0);
  if ( adc <= 170 ) {
    analogWrite (3, map(adc, 0, 170, 0, 255));
  }
  if ( adc > 170 && adc <= 340) {
    analogWrite (5, map(adc, 171, 340, 0, 255));
  }
  if ( adc > 340 && adc <= 510) {
    analogWrite (6, map(adc, 341, 510, 0, 255));
  }
  if ( adc > 510 && adc <= 680) {
    analogWrite (9, map(adc, 511, 680, 0, 255));
  }
  if ( adc > 680 && adc <= 850) {
  analogWrite (10, map(adc, 681, 850, 0, 255));
  }
  if ( adc > 851 && adc <= 1000 ) {
  analogWrite (11, map(adc, 851, 1000, 0, 255));
  }
  if ( adc > 1001 && adc <= 1023 ) {
  analogWrite(ledPIN1 , HIGH);
  delay(100);
  analogWrite(ledPIN1 , LOW);
  delay(100);
} 
}

He intentado hacerlo mediante otro if al final, pero aún así me da error, como podría cambiarlo para que funcionara. Se podría hacer el parpadeo mediante la función Millis?

Ve a documentación y lee los tutoriales existentes sobre millis().
He cerrado tus otros hilos en los que no has continuado ni informado nada. Pero viendo que sigues abriendo otros no relacionados aparentemente aunque tienen la misma idea, y antes que cometas una falta los he cerrado.
Deberías leer las normas.
Ya te lo dije oportunamente y lo reitero.

de tu programa diré esto.

const int ledPIN1 =5 ;

Esto solo sirve en el setup. Si lo has escrito pensando en ser usado en el loop te informo que no tendrá el efecto deseado.
O lo pones como global o no tiene influencia en setup y loop.

Y respondiendo tu pregunta parcialmente.
Si como parte de tu código usas delay()

  if ( adc > 1001 && adc <= 1023 ) {
  analogWrite(ledPIN1 , HIGH);
  delay(100);
  analogWrite(ledPIN1 , LOW);
  delay(100);
}

No se para que quieres usar millis().
Usa todo millis() porque sino tendras pausas de 200 mseg cuando se den las condiciones de que el adc > 1001
Por cierto no hay nada mayor que 1023 asi que la parte de la condición menor igual que 1023 sobra.

Ok, ya he arreglado la última condición, pero como podría implementar la función millis en el último if, para poder evitar las pausas.

Yo te marco el problema y espero que tu aprendas a buscar la solución.
La parte de 1023 esta de mas. Porque un ADC de 10 bits solo lee de 0 a 1023
Por lo tanto si tu tienes una condición que dice todo lo que esta entre 1001 y 1023 (incluido), no es lo mismo que todo lo que esta desde 1001 en adelante?
La respuesta es SI.
Ahora como lo implementas en un solo if?


const int ledpPin =  5;
int ledState = LOW; 
unsigned long previousMillis = 0;
const long interval = 1000; 
void setup()
{
   pinMode(3, OUTPUT) ;
   pinMode(5, OUTPUT) ;
   pinMode(6, OUTPUT) ;
   pinMode(9, OUTPUT) ; 
   pinMode(10, OUTPUT) ; 
   pinMode(11, OUTPUT) ;
   pinMode(A0, INPUT) ;
   Serial.begin(9600);
}
  
void loop()
{
  int adc = analogRead(A0);
  if ( adc <= 170 ) {
    analogWrite (3, map(adc, 0, 170, 0, 255));
  }
  if ( adc > 170 && adc <= 340) {
    analogWrite (5, map(adc, 171, 340, 0, 255));
  }
  if ( adc > 340 && adc <= 510) {
    analogWrite (6, map(adc, 341, 510, 0, 255));
  }
  if ( adc > 510 && adc <= 680) {
    analogWrite (9, map(adc, 511, 680, 0, 255));
  }
  if ( adc > 680 && adc <= 850) {
  analogWrite (10, map(adc, 681, 850, 0, 255));
  }
  if ( adc > 851 && adc <=1000) {
  analogWrite (11, map(adc, 851, 1023, 0, 255));
  }
  if ( adc > 1001) {
  unsigned long currentMillis = millis();
  previousMillis = currentMillis;
  if (ledState == LOW) {
                ledState = HIGH;
          } else {
                ledState = LOW;
          }
          digitalWrite(5, ledState);
  }
}

Esto ha sido lo que he intentado, implementando millis() en el último if

Lo único que has hecho es asginar a dos variables el valor de millis(). Nada mas.

Lee este tutorial.

Lo que no se, es como aplicar la función millis(), al if con todo lo anterior.

Leiste el tutorial ?

Si, pero no me quedo claro como implementarlo

Mira el ejemplo de tu IDE BlinkWithoutDelay.ino

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