Descripción:
En este ejemplo, veremos una forma de básica encender LEDs RGB, no se utiliza PWM por el momento, así que solo puedes tener 8 combinaciones de colores, claro incluyendo cuando todos los LEDs están apagados, de cierta forma es un "hola mundo" con lectura y escritura de pines digitales, los colores cambian cada que se presiona el pulsador.
Circuito:
El circuito esta realizado con el MSP430G2231 y un par de LEDs RGB, este es el mismo que utilice para la calabaza con LEDs.
Código:
El código que hace posible esto no es nada complejo, tenemos una función que lee el estado del botón se le ha agregado algunas condicionales para evitar el rebote mecánico de estos, por otro lado tenemos la función para actualizar el color de los LEDs en el cual tenemos un simple switch para evaluar la variable manipulada por la rutina del pulsador, el código completo es el siguiente.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/******************************************************************************* | |
* | |
* Control basico de LEDs RGB | |
* | |
******************************************************************************* | |
* FileName: MSP-EXP430G2_E003 | |
* Processor: MSP430G2231 | |
* Complier: Energia 1.6.10E18 | |
* Author: Pedro Sánchez (MrChunckuee) | |
* Blog: http://mrchunckuee.blogspot.com/ | |
* Email: mrchunckuee.psr@gmail.com | |
* Description: Este ejemplo enciende los LEDs RGB por colores, haciendo un | |
* total de 8 combinaciones posibles. | |
******************************************************************************* | |
* Rev. Date Comment | |
* v1.0.0 07/12/2018 Creación del firmware | |
******************************************************************************/ | |
#define pinButton PUSH2 | |
#define pinRedLED P1_5 | |
#define pinGreenLED P1_4 | |
#define pinBlueLED P1_6 | |
//unsigned char count; | |
unsigned int buttonState, buttonTicks, currentButtonState, lastButtonState, buttonFlag; | |
void setup() { | |
pinMode(pinRedLED, OUTPUT); | |
pinMode(pinGreenLED, OUTPUT); | |
pinMode(pinBlueLED, OUTPUT); | |
digitalWrite(pinRedLED, LOW); | |
digitalWrite(pinGreenLED, LOW); | |
digitalWrite(pinBlueLED, LOW); | |
//Clear all variable | |
buttonState=0; | |
buttonTicks=0; | |
currentButtonState=0; | |
lastButtonState=0; | |
buttonFlag = 0; | |
} | |
void loop() { | |
GetInput(); | |
SetOption(buttonFlag); | |
} | |
void GetInput(void){ | |
// Push Button debounce | |
if (buttonState != digitalRead(pinButton)){ | |
if (buttonTicks > 20){ | |
buttonState = digitalRead(pinButton); | |
buttonTicks = 0; | |
} | |
else buttonTicks++; | |
} | |
else buttonTicks = 0; | |
// Process the push button | |
currentButtonState = buttonState; | |
if (currentButtonState == 0 && lastButtonState == 1){ | |
buttonFlag+=1; | |
if (buttonFlag > 8) buttonFlag = 1; | |
} | |
lastButtonState = currentButtonState; | |
} | |
void SetOption(unsigned int option){ | |
switch (option){ | |
case 1: //Red | |
digitalWrite(pinRedLED, HIGH); | |
digitalWrite(pinGreenLED, LOW); | |
digitalWrite(pinBlueLED, LOW); | |
break; | |
case 2: //Green | |
digitalWrite(pinRedLED, LOW); | |
digitalWrite(pinGreenLED, HIGH); | |
digitalWrite(pinBlueLED, LOW); | |
break; | |
case 3: //Yellow | |
digitalWrite(pinRedLED, HIGH); | |
digitalWrite(pinGreenLED, HIGH); | |
digitalWrite(pinBlueLED, LOW); | |
break; | |
case 4: //Blue | |
digitalWrite(pinRedLED, LOW); | |
digitalWrite(pinGreenLED, LOW); | |
digitalWrite(pinBlueLED, HIGH); | |
break; | |
case 5: //Purple | |
digitalWrite(pinRedLED, HIGH); | |
digitalWrite(pinGreenLED, LOW); | |
digitalWrite(pinBlueLED, HIGH); | |
break; | |
case 6: //Cyan | |
digitalWrite(pinRedLED, LOW); | |
digitalWrite(pinGreenLED, HIGH); | |
digitalWrite(pinBlueLED, HIGH); | |
break; | |
case 7: //White | |
digitalWrite(pinRedLED, HIGH); | |
digitalWrite(pinGreenLED, HIGH); | |
digitalWrite(pinBlueLED, HIGH); | |
break; | |
case 8: //All OFF | |
digitalWrite(pinRedLED, LOW); | |
digitalWrite(pinGreenLED, LOW); | |
digitalWrite(pinBlueLED, LOW); | |
break; | |
default: //All OFF | |
digitalWrite(pinRedLED, LOW); | |
digitalWrite(pinGreenLED, LOW); | |
digitalWrite(pinBlueLED, LOW); | |
break; | |
} | |
} |
Aquí un pequeño vídeo del circuito en funcionamiento:
Descargas:
Aquí el enlace directo para DESCARGAR los archivos disponibles, también puedes revisar o descargar la información desde mi repositorio en GitHub, si no sabes como descargarlo puedes checar aquí, bueno por el momento es todo si tienes dudas, comentarios, sugerencias, inquietudes, traumas, etc. dejarlas y tratare de responder lo mas pronto posible.
Donaciones:
Si te gusta el contenido o si los recursos te son de utilidad, comparte el enlace en tus redes sociales o sitios donde creas que puede ser de interés y la otra puedes ayudarme con una donación para seguir realizando publicaciones y mejorar el contenido del sitio. También puedes hacer donaciones en especie, ya sea con componentes, tarjetas de desarrollo o herramientas. Ponte en contacto para platicar, o puedes volverte uno de nuestros sponsors.
Pido una retroalimentación avisando cada que un enlace no sirva o tenga errores al momento de abrirlo, así también si una imagen no se ve o no carga, para corregirlo en el menor tiempo posible.
0 Comentarios