|   FOROS      |         |     KIO4 |      
   Inicio B4A (Basic4Android) App inventor 2 WAMP - PHP - MySQL
   Elastix - VoIP Cosas de Windows Webs interesantes Arduino
  Estación meteorológica Visual Basic Script (VBS) Translate:
Búsqueda en este sitio:


Nuevo concurso para España, Argentina, Brasil, Chile, Colombia, Ecuador, México, Perú y Portugal.

Arduino en español
Circuitos con Arduino - Juan Antonio Villalpando

-- Tutorial de iniciación a Arduino --

Volver al índice del tutorial

____________________________

11B.- Luminosidad de un LED mediante PWM.

- Aprovechamos el circuito anterior 10.- Cuenta arriba abajo, para regular la luminosidad de un LED.

- Cuando pulsamos el Botón del pin8 el LED6 iluminará cada vez más.
  Cuando pulsamos el Botón del pin9 el LED6 iluminará cada vez menos.

- Los botones deben mantenerse pulsados (uno u otro, los dos no) para que funcione.

- La iluminación se realizará enviando al LED un pulso más o menos ancho mediante PWM.

- Consulta el Serial Monitor para ver cómo va evolucionando el contador y el Duty Cycle.

 

 

Código
/*
  Juan A. Villalpando
  kio4.com
  diciembre 2015
 */

/* Al pulsar el pulsador8 se incrementa el contador.
   Al pulsar el pulsador9 se decrementa el contador. 
   En la subrutina encendido, consulta el contador...
   según su valor se encenderá el LED6 con más o menos luz.
   El contador tiene limitada su cuenta entre 0 y 255.
*/

#define pin8 8   // Al terminal  8 lo llamamos pin8. Aquí irá un pulsador.
#define pin9 9   // Al terminal  9 lo llamamos pin9. Aquí irá otro pulsador.

#define LED6 6 // Al terminal  6 lo llamamos LED6. Aquí irá el LED6.

int arriba, abajo;
int contador=125;     // Variable contador, inicialmente en 125
int DutyCycle;

// En el setup establecemos los parámetros iniciales.
void setup() {
  pinMode(pin8, INPUT);     // El pin8 será entrada. Pulsador.
  pinMode(pin9, INPUT);     // El pin9 será entrada. Pulsador.
  pinMode(LED6, OUTPUT);    // El pin6 será salida. LED.
  Serial.begin(9600);       // Para ver información en el Serial Monitor.
}


void loop() {
  arriba = digitalRead(pin8); // Lee el contador del pin8 y se lo asigna a arriba. (Puede ser 0 o 1)
  abajo  = digitalRead(pin9); // Lee el contador del pin9 y se lo asigna a abajo. (Puede ser 0 o 1)
if (arriba == HIGH) { 
  contador = contador + 1;  
  if (contador > 255) {
  contador=255;
  }
  enciende();  
} 
if (abajo == HIGH) { 
  contador = contador - 1;
  if (contador < 0) {
  contador=0;
  }
 enciende();                              
} 
}

void enciende(){
   DutyCycle =  map(contador, 0, 255, 0, 100); // Cambiamos los 255 valores a 100.
   analogWrite(LED6, contador); // Enviamos a LED6 el PWM
   Serial.print("Contador: "); Serial.print(contador); Serial.print(" Duty Cycle: "); Serial.print(DutyCycle); 
   Serial.println(); 
   delay(20);
}
   

- En el lazo (loop) leemos contínuamente el pin8 y el pin9.

- Según esté en estado alto el pin8 o el pin9, la variable contador se incrementará o decrementará.

- Si limita al contador entre 0 y 255.

- Se llama a la rutina enciende.

- La rutina encenderá el LED6 mediante PWM.

- El Duty cycle, puede tener un valor entre 0 y 100, para que obtener esos valores debemos aplicar en la D6 valores entre 0 y 255.

- Es decir, la analogWrite entre 0 y 255 provoca un Duty Cycle de entre 0 y 100%.

_________________

- Los dos botones pulsados. Parada. Goto.

- Voy a modificar el código, quiero que cuando pulse los dos botones a la vez (los dos en HIGH), se salte los dos if siguientes y vaya al final del loop para que modifique la luminosidad del LED.

- Utilizo la instrucción goto, mediante ella el código saltará a una etiqueta que pondremos al final del bucle loop, la etiqueta se llamará "final".

- La instrucción goto, no le gusta a muchos programadores ya que la acusan de crean un código muy liado, un spaguety code, sin embargo en muchos problemas facilita enormemente su sencillez.

Código
/*
  Juan A. Villalpando
  kio4.com
  diciembre 2015
 */

/* Al pulsar el pulsador8 se incrementa el contador.
   Al pulsar el pulsador9 se decrementa el contador. 
   En la subrutina encendido, consulta el contador...
   según su valor se encenderá el LED6 con más o menos luz.
   El contador tiene limitada su cuenta entre 0 y 255.
*/

#define pin8 8   // Al terminal  8 lo llamamos pin8. Aquí irá un pulsador.
#define pin9 9   // Al terminal  9 lo llamamos pin9. Aquí irá otro pulsador.

#define LED6 6 // Al terminal  6 lo llamamos LED6. Aquí irá el LED.

int arriba, abajo;
int contador=125;     // Variable contador inicialmente en 125
int DutyCycle;

// En el setup establecemos los parámetros iniciales.
void setup() {
  pinMode(pin8, INPUT);     // El pin8 será entrada. Pulsador.
  pinMode(pin9, INPUT);     // El pin9 será entrada. Pulsador.
  pinMode(LED6, OUTPUT);    // El pin6 será salida. LED.
  Serial.begin(9600);       // Para ver información en el Serial Monitor.
}


void loop() {
  arriba = digitalRead(pin8); // Lee el contador del pin8 y se lo asigna a arriba. (Puede ser 0 o 1)
  abajo  = digitalRead(pin9); // Lee el contador del pin9 y se lo asigna a abajo. (Puede ser 0 o 1)
  if (abajo == HIGH && arriba == HIGH) { 
                goto final; 
              } 
                            
                          
if (arriba == HIGH) { 
  contador = contador + 1;  
  if (contador > 255) {
  contador=255;
  }
  enciende();  
} 
if (abajo == HIGH) { 
  contador = contador - 1;
  if (contador < 0) {
  contador=0;
  }
 enciende();                              
} 

final: ;
}

void enciende(){
   DutyCycle =  map(contador, 0, 255, 0, 100); // Cambiamos los 255 valores a 100.
   analogWrite(LED6, contador); // Enviamos a LED6 el PWM
   Serial.print("Contador: "); Serial.print(contador); Serial.print(" Duty Cycle: "); Serial.print(DutyCycle); 
   Serial.println(); 
   delay(20);
}
   

_________________

- Propuestas.

- Utiliza varios LED.

________________________________

 

- Mi correo:
juana1991@yahoo.com
- KIO4.COM - Política de cookies. Textos e imágenes propiedad del autor:
© Juan A. Villalpando
No se permite la copia de información ni imágenes.
Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación y realizan análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. Acepto    Más información