
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);