En esta ocasión os quiero compartir el esquema de conexión de un display de 4 dígitos y 7 segmentos. Dicha conexión la realizamos con un registro de desplazamiento, el 74HC595, dicho módulo nos evite tener que conectar los 12 pines al Arduino y con solo tres de pines a la placa controlamos los 7 segmentos.
Por otro lado, conectamos directamente los cables de cada uno de los dígitos a la placa mediante una resistencia de 330ohm.
Al trabajar con dicho componente no podemos usar la instrucción usar la instrucción “delay()” ya que no nos funcionaria correctamente, con lo cual debemos hacer comprobaciones con la instrucción “millis()” o hacer otro método para provocar un retardo.
Dicha librería nos permite varias cosas que hacer con el display, como, por ejemplo: usar el mismo código para un módulo de da Ánodo o Cátodo, controlar la intensidad de los les, indicarle que punto es el decimal, etc.
Este componente va directamente encima de la placa:
Aplicación:
/* * Autor: Josep Martinez Tejedor * Fecha: 23 de febrero de 2022 */ // incluir el código de la biblioteca: #include <LiquidCrystal.h> int contador = 0; // inicialice la biblioteca con los números de los pines de la interfaz LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // Definición de caracteres especiales byte vocal1[8] = {B00010, B00100, B00000, B01110, B00001, B01111, B10001, B01111}; // letra á byte vocal11[8] = {B00100, B00010, B00000, B01110, B00001, B01111, B10001, B01111}; // letra à byte vocal2[8] = {B00010, B00100, B00000, B01110, B10001, B11111, B10000, B01110}; // letra é byte vocal21[8] = {B01000, B00100, B00000, B01110, B10001, B11111, B10000, B01110}; // letra è byte vocal3[8] = {B00010, B00100, B00000, B01100, B00100, B00100, B00100, B01110}; // letra í byte vocal4[8] = {B00010, B00100, B00000, B01110, B10001, B10001, B10001, B01110}; // letra ó byte vocal41[8] = {B01000, B00100, B00000, B01110, B10001, B10001, B10001, B01110}; // letra ò byte vocal5[8] = {B00010, B00100, B00000, B10001, B10001, B10001, B10011, B01101}; // letra ú byte ela[8] = {B00000, B11000, B01000, B01000, B01010, B01000, B01000, B11100}; // letra l· byte enya[8] = {B00000, B01110, B00000, B10110, B11001, B10001, B10001, B10001}; // letra ñ byte c[8] = {B00000, B00000, B01110, B10000, B10000, B10010, B01111, B00100}; // letra ç // FUNCIO DEL TECLAT A0 byte key(){ // 1 = 639; 2 = 409, 3 = 99, 4 = 256, 5 = 0 int val = analogRead(0); if (val < 50) return 5; else if (val < 125) return 3; else if (val < 300) return 4; else if (val < 450) return 2; else if (val < 700) return 1; else if (val < 1023) return 0; } void setup() { lcd.createChar(1, vocal1); lcd.createChar(2, vocal11); lcd.createChar(3, vocal2); lcd.createChar(4, vocal21); lcd.createChar(5, vocal3); lcd.createChar(6, vocal4); lcd.createChar(7, vocal41); lcd.createChar(8, vocal5); lcd.createChar(9, ela); lcd.createChar(10, enya); lcd.createChar(11, c); // configurar el número de columnas y filas de la pantalla LCD: lcd.begin(16, 2); lcd.clear(); analogWrite(10, 30); } void loop() { // Posicionamos el cursor en la columna 0, linea 1 // (nota: La linea 1 corresponde a la segunda fila, ya que el conteo comienza con 0): lcd.setCursor(0, 1); // imprimir el número de segundos desde el reinicio: lcd.print(millis() / 1000); lcd.clear(); lcd.setCursor(0, 0); lcd.print("analogRead "); lcd.print(analogRead(0)); lcd.setCursor(0, 1); switch (key()){ case 1: lcd.print("Selecci"); lcd.write(byte(6)); // Muestra la o acentuada lcd.print("n: "); break; case 2: lcd.print("Izquierda: "); break; case 3: lcd.print("Arriba:"); // Muestra un contador en la segunda fila y posición 13 contador = contador + 1; lcd.setCursor(13, 1); lcd.print(contador); break; case 4: lcd.print("Aba."); // Escribe los caracteres acentuados lcd.setCursor(5,1); lcd.write(byte(1)); lcd.write(byte(2)); lcd.write(byte(3)); lcd.write(byte(4)); lcd.write(byte(5)); lcd.write(byte(6)); lcd.write(byte(7)); lcd.write(byte(8)); lcd.write(byte(9)); lcd.write(byte(10)); lcd.write(byte(11)); break; case 5: lcd.print("Derecha:"); break; } delay(250); }