UTF-8 es una codificación de texto muy versátil y difundida. En particular para casos donde se necesita soportar cualquier caracter Unicode pero no se quiere pagar un costo alto de almacenamiento. Ya que Unicode es enorme no hay manera de codificar todas las posibilidades en un sólo byte. Al mismo tiempo, utilizar dos o cuatro bytes para cada caracter puede ser un desperdicio si la mayoría de los caracteres que usamos entrarán en uno o dos bytes.
En este artículo presentamos una extensión al programa de Control remoto Arduino + LCD aprovechando el uso de punteros a función. Es recomendable darle una mirada al programa de ese artículo para comparar con este, y entender cómo evolucionó. De todas formas se puede leer este artículo en forma independiente para tener un ejemplo de uso de punteros a función. Pero el circuito está explicado en ese artículo y no se repetirá aquí.
Si bien ya hay un artículo Control remoto infrarrojo con Arduino donde abordé el tema, quería escribir una variante que sirviera para dar paso a un artículo más avanzado de programación.
En este artículo emplearemos un LCD y un decodificador infrarrojo VS1838 para recibir pulsaciones de teclas de un control remoto, decodificarlas y generar una salida en la pantalla LCD de acuerdo al mando recibido.
El circuito a utilizar tiene muchas conexiones pero es simple ya que en su mayoría se trata de conexiones directas al Arduino.
Una buena noticia de C++11 es que se incorporó la biblioteca pthreads al nuevo estándar. Esto quiere decir que ya no es necesario implementar un encapsulamiento propio como hacíamos algunos años atrás. Este artículo (breve) ilustra el uso de la nueva clase threads y permite jugar un poco con el comportamiento del multitasking para comprender algunas particularidades que debemos tener en cuenta a la hora de crear aplicaciones concurrentes.
Si te interesa este artículo te recomiendo leer también esta nota sobre problemas con float en Golang.
C++ es un lenguaje que no tiene manejo automático de memoria incorporado en su versión más pura. Es decir, en los compiladores o IDEs más populares entre quienes se dedican a este lenguaje. Existen algunas implementaciones de garbage collectors para C++ y las versiones más nuevas del estándar incluyen una implementación de puntero automático en la biblioteca de plantillas STL. Pero consideraría correcta la afirmación general de que el manejo de memoria en el lenguaje es manual.