Descrición:
Imos facer que un LED conectado no pin 9 (pin PWM) se acenda cunha determinada intensidade utilizando a funcion analogWrite(). Tamén veremos como visualizar datos na consola serie.
Montaxe:
Necesitamos un LED conectado no pin 9 e dous pulsadores conectados nos pins 2 e 3.
Programas:
1. Distinta intensidade
1. Distinta intensidade: Imos facer que cando premamos un pulsador o LED se acenda cunha intensidade baixa (50), cando prememos noutro pulsador, a intensidade será máxima (255), e cando non pulsamos ningún o LED estará apagado (0).
Para iso xa non utilizamos a función digitalWrite(led,LOW ou HIGH), senón a función analogWrite(led, valor de 0 a 255);
Ademais mostraremos eses valores a través da consola serie.
// Declaración de variables: int led = 9; int pulsador1 = 2; int pulsador2 = 3; // Configuración: void setup(){ pinMode(led, OUTPUT); Serial.begin(9600); // Inicia a comunicación serie } // Programa: void loop(){ int estado1 = digitalRead(pulsador1); int estado2 = digitalRead(pulsador2); if (estado1 == 1){ analogWrite(led, 255); Serial.println("255"); //Imprime 255 no monitor serie } else if(estado2 == 1){ analogWrite(led,50); Serial.println("50"); //Imprime 50 no monitor serie } else{ analogWrite(led,0); Serial.println("0"); //Imprime 0 no monitor serie } }
2. Luz gradual
2. Luz gradual: Imos facer que a luminosidade dun LED vaia aumentando progresivamente enviando un valor de 0 a 255 a través da variable brillo mediante a función analogWrite(led, brillo);
Cando a variable brillo chega ao valor de 255, poñemos o brillo a 0, apagamos o LED, agardamos uns segundos e volta e empezar.
// Declaración de variables: int led = 9; // LED conectado no pin 9 int brillo = 0; // Indica a luminosidade do LED. Inicialmente poñemos un valor 0. int variacion = 5; // Indica cantos puntos varia a luminosidade // Configuración: void setup(){ pinMode(led, OUTPUT); // Declaramos o pin 9 como de saída } // Programa: void loop(){ analogWrite(led, brillo); // Enviamos ao LED o valor do brillo brillo = brillo + variacion; // Sumamos a variación ao valor do brillo if (brillo == 255){ // Cando o brillo vale 255 brillo = 0 ; // poñemos o brillo a 0 analogWrite(led, brillo); // apagamos o LED delay(3000); // e agardamos 3 segundos } delay(200); //Retardo de 200ms para a visualización }
3. Aumenta e diminúe
3. Aumenta e diminúe unha e outra vez. Agora facemos que a variación cambie de signo cada vez que a variable brillo chegue a 255 ou a 0, conseguindo que primeiro aumente progresivamente a luminosidade do LED e despois vaia esvaecendo, repetíndose indefinidamente o proceso.
// Declaración de variables: int led = 9; // LED conectado no pin 9 int brillo = 0; // Indica a luminosidade do LED. Inicialmente poñemos un valor 0. int variacion = 5; // Indica cantos puntos varia a luminosidade // Configuración: void setup(){ pinMode(led, OUTPUT); // Declaramos o pin 9 como de saída } // Programa: void loop(){ analogWrite(led, brillo); // Enviamos ao LED o valor do brillo brillo = brillo + variacion; // Sumamos a variación ao valor do brillo if (brillo == 0 || brillo == 255){ // Cando o brillo vale 0 ou 255... variacion = -variacion ; // ... cambiamos o sentido } delay(100); // Agardamos 100ms }
Propostas:
- Outros valores PWM: Modifica os valores do programa “1. Distinta intensidade” e observa o resultado
- Consola serie: Engade aos programas 2 e 3 o necesario para visualizar o valor da variable brillo no monitor serie, e observa o resultado.
- Lume: Imos simular cun LED o efecto do lume. Xera un brillo aleatorio e un tempo de espera aleatorio para cada escintileo do LED. Podes utilizar a función random. Por exemplo:
tempo=random(10,500); // dá un valor ao aleatorio entre 10 e 500. delay(tempo);