En este tutorial os enseñamos cómo controlar un un LED mediante el puerto Serial de Arduino.
Si no sabes qué es un LED, te recomendamos que visites el artículo donde te explicamos todo sobre este componente electrónico.
ℹ ¿Qué es el puerto Serial de Arduino?
Entendemos como puerto a la interfaz, ya sea física o virtual, con la que se puede realizar una comunicación entre dos dispositivos. La información es transmitida en forma de secuencia de bits mediante dos conectores, uno de recepción de datos (Rx) y uno de transmisión de datos (Tx).
A diferencia de este tipo de puertos, están los puertos paralelos donde la información es enviada a través de varios canales de manera simultánea. Este último método de transmisión necesita una mayor cantidad de conductores.
La mayoría de las placas de Arduino disponen de un conector USB o Micro USB que actúan como puerto serie. Esta situación permite que podamos controlar un Arduino en tiempo real. Para comunicarnos con la placa desde el ordenador, el propio interfaz de Arduino IDE dispone de una herramienta llamada «Monitor Serie».
Una vez hayamos configurado correctamente el código estaremos listos para comunicarnos con nuestra placa mediante puerto Serie y así poder controlar un LED, por ejemplo, como en este tutorial.
🎯 Objetivo del tutorial
Controlar el funcionamiento de un LED mediante el uso del terminal Serial de Arduino.
📹 (Vídeo) ¿Cómo controlar un LED mediante puerto Serial en Arduino?
En este caso se hará uso de la versión Nano de Arduino. Realmente este cambio no tiene mayor importancia ya que se puede usar cualquier placa Arduino para realizarlo.
Esperamos que os esté gustando esta serie de vídeos, si tienen cualquier duda no se olviden de dejar un comentario en el apartado de comentarios al final de esta página.
Si te ha gustado este tutorial en Arduino y quieres ver más:
Suscríbete a nuestro canal de Youtube
⚡ Materiales necesarios
Vista previa | Producto | Valoración | Precio | |
---|---|---|---|---|
![]() | Arduino Uno Rev3 Original | 27 Opiniones | 29,08 € | Ver Oferta 🤑 |
![]() | SODIAL (R) de 3 mm y 5 mm ronda super brillante LED de diodos emisores de luz LED luz- 120 PC. | 7 Opiniones | Ver Oferta 🤑 | |
![]() | 40 cables de puente macho a macho para Arduino (20 cm, 2,54 mm) | 132 Opiniones | 3,81 € | Ver Oferta 🤑 |
![]() | ELEGOO 3 Piezas Breadboard Placa Prototipo Sin Soldaduras con 400 Puntos Realizado en PCB Junta... | 354 Opiniones | 7,99 € | Ver Oferta 🤑 |
⚙️ Esquema
El esquema para el tutorial es el siguiente:
👨💻 Código para controlar un LED por Serial en Arduino
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 | /*Copyright (C) 2017 Iván Rodríguez Méndez*/ // Tutorial 8: Controlar LED RGB por SERIAL char buffer[18]; //Aqui guardaremos todos los caracteres necesarios int red, green, blue; int RedPin = 11; int GreenPin = 10; int BluePin = 9; void setup() { Serial.begin(9600); while(Serial.available()){ Serial.read(); } pinMode(RedPin, OUTPUT); pinMode(GreenPin, OUTPUT); pinMode(BluePin, OUTPUT); Serial.println("Preparado para recibir datos!"); } void loop() { if (Serial.available() > 0) { int i = 0; //indice para movernos por el array delay(100); // Esperamos para asegurarnos de recibir los datos int numChar = Serial.available(); //Guardamos el numero de caracteres disponibles if (numChar>15) { //Comprobamos que el numero de caracteres es mayor al menos que 15, lo que significar que esta bien introducido numChar=15; } while (numChar--) { //Siempre que sea mayor que cero buffer[i++] = Serial.read(); //Vamos guardando los caracteres que hemos recibido } dividirString(buffer); //Hacemos la llamada a la funcion que hemos creado, pasando el parametro por referencia } } void dividirString(char* datos) { //La funcion trabaja con un puntero a nuestro array de datos, por lo cual pasamos el parametro por referencia Serial.println(" "); Serial.print("Color de entrada: "); Serial.println(datos); char* parameter; //Creamos un nuevo puntero para acceder a los datos almacenados parameter = strtok (datos, " ,"); //Quitamos lo que hay despues de encontrar la primera coma while (parameter != NULL) { setLED(parameter); //Encendemos la componente de color tal y como queremos parameter = strtok (NULL, " ,"); // Al poner NULL seguimos donde nos habiamos quedado y seguimos recortando } // Re-inicializamos todo for (int x=0; x<16; x++) { buffer[x]='\0'; } while(Serial.available()) Serial.read(); Serial.println(" "); Serial.println("Preparado para recibir nuevos datos!"); } void setLED(char* datos) { //Funcion para encender la componente de color del LED que queremos if ((datos[0] == 'r') || (datos[0] == 'R')) { int Ans = strtol(datos+1, NULL, 10); Ans = constrain(Ans,0,255); //Nos aseguramos de que el resultado este entre 0 y 255 analogWrite(RedPin, Ans); Serial.print("Componente de rojo en: "); Serial.println(Ans); } if ((datos[0] == 'g') || (datos[0] == 'G')) { int Ans = strtol(datos+1, NULL, 10); Ans = constrain(Ans,0,255); analogWrite(GreenPin, Ans); Serial.print("Componente de verde en: "); Serial.println(Ans); } if ((datos[0] == 'b') || (datos[0] == 'B')) { int Ans = strtol(datos+1, NULL, 10); Ans = constrain(Ans,0,255); analogWrite(BluePin, Ans); Serial.print("Componente de azul en: "); Serial.println(Ans); } } |
Artículos Relacionados:

Ingeniero Técnico Industrial en Electrónica y Automática e Ingeniero Industrial. Actualmente estoy realizando un doctorado en Ingeniería en la Universidad de la Laguna. Soy un amante del mundo de la programación, la informática, la robótica y la electrónica en general. Estoy muy relacionado con el movimiento maker y los conocidos como «hackerspace». Cada día me levanto intentando enseñar algo nuevo mientras aprendo algo nuevo.
Hola buenos días, tengo un problemita: cuando abro el monitor serial y digito los datos por ejemplo R0,G0,B255 en ves de encenderse el led de color azul se enciende verde, cuando digito R0,G255,B0 el led en ves de verde se pone azul y cuando digito R255,G0,B0 el led se pone celeste. Quisiera saber porque sucede esto, yo ademas de seguir tu tutorial por youtube que lo segui entendiendo y copiandolo tambien llegue a esta pagina por el link que dejaste en la descripcion del video y copie todo el programa y sin embargo me sigue pasando lo mismo. Me podrías ayudar?
Buenas Marco,
¿Has comprobado si las patas del LED están conectadas correctamente a los mismos pines del código? Puede que hayas conectado las patas en un orden que no es el correcto.
Un saludo 🙂
Hola Víctor buenas tardes o buenas noches allí en tu país jeje, si he conectado correctamente tal y como dice el código y sin embargo hay algo que falla que no se que es; ya probe cambiar de lugar los pines tanto en el código como en la placa de arduino, también cabie de lugar el GND ya sea Analógico o Digital, negativo o positivo y naranja fanta( en mi país nada). Que podrá ser Víctor? Espero su respuesta desde ya muchas gracias. Saludos.
Otra cosa que quería agregar es que cuando abro el monitor serial arranca encendido el led RGB de color turquesa, que en teoría debería estar apagado, eso es lo que mas me llama la atención.
Hola nuevamente, he buscado en otros tutoriales y probar con un código distinto pero sigo en la misma y hago exactamente lo que se ve en el esquema de conexiones y nada sigo en la misma.
Buenas Marco,
¿Qué Arduino estás usando? Si estás trabajando con un Arduino Nano como en el tutorial es muy raro. Sino primero prueba a encender el LED con salidas digitales a ver si así te funciona. Te dejo este código.
int RedPin = 11;
int GreenPin = 10;
int BluePin = 9;
void setup() {
pinMode (RedPin, OUTPUT);
pinMode (GreenPin, OUTPUT);
pinMode (BluePin, OUTPUT);
}
void loop() {
//Rojo
digitalWrite(RedPin, HIGH);
digitalWrite(BluePin, LOW);
digitalWrite(GreenPin, LOW);
delay (1000);
//Azul
digitalWrite(RedPin, LOW);
digitalWrite(BluePin, HIGH);
digitalWrite(GreenPin, LOW);
delay (1000);
//Verde
digitalWrite(RedPin, LOW);
digitalWrite(BluePin, LOW);
digitalWrite(GreenPin, HIGH);
delay (1000);
}
Hola Víctor buenas noches, mira el problema es el siguiente, los valores están al revés, 255 es cero y 0 es 255 y no se cómo revertir esto. Imagino es algo simple. Si me puedes decir como solucionarlo muchas gracias. Saludos.
Estoy usando Arduino UNO