Arduino y el módulo de VFD Noritake 24 x 6 (pantalla fluorescente de vacío) (8 / 9 paso)

Paso 8: menú

Intentar el esbozo de menú haciendo los mismos cambios que hizo el dibujo de Hello. Este módulo no permite aumento de brillo por lo que sólo puede dejar estas líneas de código tal como está o eliminarlos.

Descomentar si el módulo de destino admite aumento de brillo
vfd.brightnessBoost(); módulo tiene impulso de brillo

Menú

#include < CUY_Interface.h >
#include < CUY_Serial_Async.h >
#include < Noritake_VFD_CUY.h >
#include < avr/io.h >
#include < util/delay.h >
#include < string.h >

#define SCREEN_BRIGHTNESS 200 / / máximo brillo del carácter
#define LOW_BRIGHTNESS 14 / / Normal personaje brillo (entre 0% y SCREEN_BRIGHTNESS %)
#define HIGH_BRIGHTNESS 200 / / destacado brillo de carácter (entre 0% y SCREEN_BRIGHTNESS %)
#define MENU_CATEGORIES 5 / / número de categorías en un menú
#define MENU_SPLIT (vfd.cols > = 24? 12:10) / / ancho de la primera columna

Interfaz de CUY_Serial_Async (38400,2, 3, 4); PECADO, OCUPADO, RESTABLECER

Noritake_VFD_CUY vfd;

Estos detalles se mostrarán cuando se selecciona una categoría
clase DetailMenuCategory {}
público:

const char * nombre;          Nombre de la categoría
const char * título [2];    Pie de foto
int16_t valor [2];       Valor de la muestra
relleno de carbón de leña [2];        Pastillas de números a la izquierda: ' 'o ' 0'
const char * unidad [2];       Unidades de medida

{DetailMenuCategory()}
nombre = 0;
Caption [0] = caption [1] = 0;
valor [0] = valor [1] = 0;
relleno [0] = relleno [1] = ' ';
unidad [0] = unidad [1] = "";
}

DetailMenuCategory (const char * nombre,
const char * SUBTIT1, const char * unit1,
const char * SUBTIT2, const char * unit2) {}
Esto -> nombre = nombre;
este rubro de-> [0] = SUBTIT1;
este rubro de-> [1] = SUBTIT2;
Este valor de-> [0] = este valor de-> [1] = 0;
Esto -> unidad [0] = unit1;
Esto -> unidad [1] = unit2;
relleno [0] = relleno [1] = ' ';
}

};

Clase de menú
clase DetailMenu {}
leftAlign vacío (const char * txt, int anchura, uint8_t styleAfter) {}
int len = strlen(txt);
VFD.Print (txt, anchura < = len? ancho: len);
VFD. CUY_setCharStyle(styleAfter);
mientras que (ancho--> len)
VFD.Print(' ');
}

rightAlign vacío (const char * txt, int ancho) {}
int len = strlen(txt);
int i = ancho-len;
mientras (--> 0)
VFD.Print(' ');
VFD.Print (txt, anchura < = len? ancho: len);
}

Imprimir un número de 4 dígitos y un dígito fraccionario.
{} void cantidad (int16_t n, char cojín)
bool ceros = true;
bool neg = n < 0;

Si (neg)
n = - n;
otra cosa
VFD.Print(' ');

para (int16_t i = 10000; 10 < = i; i = 10) {}
uint8_t d = n/i%10;
Si (! d & & ceros) {}
Si (i == 10 & & neg) vfd.print('-');
¿VFD.Print (i == 10? '0': pad);
}
Else {}
Si (ceros) {}
Si vfd.print('-') (neg);
ceros = false;
}
VFD.Print("0123456789"[d]);
}
}
VFD.Print('.');
VFD.Print ("0123456789" [n % 10]);
}

público:
Categoría de DetailMenuCategory [MENU_CATEGORIES];   Categorías
Noritake_VFD_CUY y vfd;                   El VFD para mostrar a
uint8_t seleccionado;               Qué categoría se selecciona

DetailMenu (Noritake_VFD_CUY & vfd):
VFD(VFD), selected(0) {}
}

void draw();
};

void DetailMenu::draw() {}
DetailMenuCategory * cat;

VFD. CUY_setCharStyle(NoStyle);
VFD. CUY_setFontStyle(NoFontStyle);
VFD. CUY_setCharBrightness(LOW_BRIGHTNESS*100/SCREEN_BRIGHTNESS);

VFD. CUY_home();
leftAlign ("menú principal:", MENU_SPLIT, NoEstilo);

Imprimir cada categoría
para (int i = 0; i < MENU_CATEGORIES & & me < vfd.lines 1; i ++) {}
VFD.Print("\r\n"); Pasar a la siguiente línea

Línea de centro seleccionado
Si (este-> seleccionado < (vfd.lines-1) / 2).
gato = este -> categoría + i;
Else {}
int j = i + esta-> seleccionado - (vfd.lines-1) / 2;
Si (este-> seleccionado > MENU_CATEGORIES - (vfd.lines-1))
j = i + MENU_CATEGORIES - vfd.lines-1;
Si (MENU_CATEGORIES < = j) {}
leftAlign ("", MENU_SPLIT, NoEstilo);
continuar;
}
gato = este -> categoría + j;
}

uint8_t charset = vfd.charset;
VFD. CUY_setCharBrightness(HIGH_BRIGHTNESS*100/SCREEN_BRIGHTNESS); Resaltar el brillo
VFD. CUY_setCharset(1);          Seleccione la tabla de Katakana
VFD.Print("\xe8");              Imprimir la flecha
VFD. CUY_setCharset(charset);    Restaurar el conjunto de caracteres del usuario

Set estilo basado en si se selecciona la categoría
e imprima el nombre de categoría.
Si (cat == esto -> categoría + esta-> seleccionado)
VFD. CUY_setCharStyle (vfd.charStyle + UnderlineStyle);
otra cosa
VFD. CUY_setCharBrightness(LOW_BRIGHTNESS*100/SCREEN_BRIGHTNESS);
leftAlign (cat -> nombre, MENU_SPLIT-1, NoEstilo);
}

gato = este -> categoría + esta-> seleccionado;

Leyendas de
VFD. CUY_setCharBrightness(LOW_BRIGHTNESS*100/SCREEN_BRIGHTNESS);
VFD. CUY_setCursor(MENU_SPLIT,0);
leftAlign (cat -> caption [0], MENU_SPLIT, NoEstilo);
Si {} (vfd.lines > 2)
VFD. CUY_setCursor (MENU_SPLIT, (vfd.lines > = 6)? 3: 2);
leftAlign (cat -> caption [1], MENU_SPLIT, NoEstilo);
}

Valores
Si (vfd.lines > = 6)
VFD. CUY_setFontStyle (vfd.fontStyle + TallFont);

VFD. CUY_setCharBrightness(HIGH_BRIGHTNESS*100/SCREEN_BRIGHTNESS);

VFD. CUY_setCursor(MENU_SPLIT,1);
número (cat -> valor [0], cat > fill[0]);
VFD.Print(' ');
rightAlign (cat -> unidad [0], 4);

Si {} (vfd.lines > 2)
VFD. CUY_setCursor (MENU_SPLIT, (vfd.lines > = 6)? 4: 3);
número (cat -> valor [1], cat > fill[1]);
VFD.Print(' ');
rightAlign (cat -> unidad [1], 4);
}
}

void setup() {}
Delay(500);          esperar para el dispositivo de poder
VFD.Begin (24, 6);    módulo de 24 x 6 caracteres
VFD.interface(interface); seleccionar qué interfaz de uso
vfd.isModelClass(Y100);
VFD. CUY_init();      inicializar el módulo de
Descomentar si el módulo de destino admite aumento de brillo
vfd.brightnessBoost(); módulo tiene impulso de brillo
}

void loop() {}

VFD. CUY_setScreenBrightness(SCREEN_BRIGHTNESS);
VFD. CUY_setCursorStyle(NoCursor);
VFD. CUY_setCharset(2);

Menu(vfd) de DetailMenu;

MENU.Category[0] = DetailMenuCategory ()
"PRESIÓN",
«cámara: 01","PSI",
«cámara: 02","PSI");
MENU.Category[0].Value[0] = 5000;
MENU.Category[0].Value[1] = 4560;

#if MENU_CATEGORIES > 1
MENU.Category[1] = DetailMenuCategory ()
"RPM",
¿Menu_split < 12? "gen: 01": "generador de: 01", "RPM",
¿Menu_split < 12? "gen: 02": "generador de: 02", "RPM");
MENU.Category[1].Value[0] = 20000;
MENU.Category[1].Value[1] = 19800;
#endif

#if MENU_CATEGORIES > 2
MENU.Category[2] = DetailMenuCategory ()
"FLUJO MÁXIMO",
"pipa: 01", "m\xfc s",
"pipa: 02", "s m\xfc");
MENU.Category[2].Value[0] = 4030;
MENU.Category[2].Value[1] = 7200;
#endif

#if MENU_CATEGORIES > 3
MENU.Category[3] = DetailMenuCategory ()
¿Menu_split < 12? "TTL TIEMPO": "TIEMPO TOTAL",
«cámara: 01","h",
«cámara: 02","hr");
MENU.Category[3].Value[0] = 120;
MENU.Category[3].Value[1] = 220;
#endif

#if MENU_CATEGORIES > 4
MENU.Category[4] = DetailMenuCategory ()
"ACTUAL",
"AMP total", "mA",
"voltaje", "V");
MENU.Category[4].Value[0] = 503;
MENU.Category[4].Value[1] = 56;
#endif

Ciclo a través de cada categoría
para (int i = 0; i ++) {}
MENU.Selected = i % MENU_CATEGORIES;
MENU.draw();
_delay_ms(2000);
}
}

Artículos Relacionados

LinkIt uno y un módulo de VFD

LinkIt uno y un módulo de VFD

Mi primer paso a un sistema de seguridad móvil personal utilizando una de LinkIt es la interfaz humana. Con toda la electrónica necesita una interfaz humana, una pantalla LCD o algún otro dispositivo para decirle de qué modo el aparato y lo que el di
Coche sencillo arduino usando el módulo Bluetooth HC-06

Coche sencillo arduino usando el módulo Bluetooth HC-06

La forma más sencilla de construir un coche de Arduino y controlarlo con tu dispositivo android.Paso 1: Cosas necesarias: Ordenador portátil con el software de Arduino.Cualquier Arduino. (Estoy usando a Leonardo).Dos motores de CC con llantas conecta
Cómo controlar la placa arduino con un módulo bluetooth y un teléfono con android

Cómo controlar la placa arduino con un módulo bluetooth y un teléfono con android

en este tutorial usted aprenderá cómo utilizar un módulo de bluetooth e inventor de la aplicación del MIT para crear un enlace inalámbrico de la serie entre un teléfono con android y una placa arduino.Aquí está un breve vídeo que muestra una aplicaci
Arduino + JY-MCU módulo Bluetooth Android aplicación

Arduino + JY-MCU módulo Bluetooth Android aplicación

Este es un simple instructivo de cómo crear un vínculo de trabajo entre Android y Arduino a través del módulo MCU JY. Al final de este instructable podrás controlar LED con aplicación para Android.Paso 1: materialesSe necesita:Arduino (cualquier vers
Arduino Nano: BMP180 la presión barométrica y temperatura I2C pantalla LCD 2 X 16 Visuino

Arduino Nano: BMP180 la presión barométrica y temperatura I2C pantalla LCD 2 X 16 Visuino

El BMP180 es un muy popular sensor combinado de temperatura y Arduino de presión barométrica. Ya hice Instuctable con BMP180. Un número de personas sin embargo preguntó cómo puede conectar otro dispositivo I2C en el mismo bus I2C como el BMP180. Fina
Arduino odómetro para bicicleta (1,1 mA corriente total, sin pantalla)

Arduino odómetro para bicicleta (1,1 mA corriente total, sin pantalla)

Aquí es un odómetro simple, compacto (algo) y baja energía (sólo unos 1,1 mA de corriente) que puede ser instalado en una bicicleta. Rotaciones de la rueda son detectadas por picos de voltaje generados a partir de un movimiento de imán (zip-atado a u
Cómo controlar un tubo Nixie con un Arduino

Cómo controlar un tubo Nixie con un Arduino

Un tubo Nixie es un tubo lleno de gas de neón, que tiene un ánodo de wiremesh con cátodos diferentes en forma de números o símbolos. En la década de 1950 se usaron en computadoras, calculadoras y equipo de laboratorio. Tubos Nixie fueron reemplazados
Cómo agregar una pantalla VFD de MatrixOrbital a su caja de Linux

Cómo agregar una pantalla VFD de MatrixOrbital a su caja de Linux

cubre este instructable añadiendo un VFD de MatrixOrbital a su caja de linux. Como todos frikis buenos tengo una caja linux en mi red de casa. Añadiendo una pantalla fluorescente de vacío y corriente LCDProc puede visualizar las estadísticas de salud
Cómo arreglar una pantalla VFD perdida (o cualquier otra cosa con los pernos rechazados)

Cómo arreglar una pantalla VFD perdida (o cualquier otra cosa con los pernos rechazados)

cuando era un muchacho joven-despertador de mis padres (ya viejo en aquel momento) dejó de funcionar. Una vez que abrirlo descubrí una hermosa pantalla enorme, pero desde que era un poco tonto no desoldered, ni he dejado largos pins, pero para "afina
Un reproductor de DVD Hack

Un reproductor de DVD Hack

esta es una descripción de un proyecto de hardware de fuente abierta de un Arduino controlado remotamente (Freeduino) basado en Reloj/termómetro utilizando alimentación y panel VFD desde un lector de DVD roto en una caja de acrílico por encargo. El o
Marketing con dispositivos simples de IoT

Marketing con dispositivos simples de IoT

Este instructable cubrirá la creación de Inno, un madera robot ídolo, que sirve como un medio de marketing de IoT, de una nueva iniciativa educativa en el programa de ingeniería de Software y gestión, en la Universidad de Gotemburgo. Que se basa este
Arduino pantalla VFD reloj Tutorial - guía de VFD muestra

Arduino pantalla VFD reloj Tutorial - guía de VFD muestra

... + Un poco de VFDs¿Recuerdas (aún) la pantalla de su viejo reproductor de CD, radio coche o sistema HiFi? ¿Has notado la muestra utilizada en el supermercado que te muestra el elemento analizado y el precio de la misma?Estas pantallas tienen un ca
Control de luz usando Arduino con módulo de relé AC

Control de luz usando Arduino con módulo de relé AC

¡ Hola amigos! Soy Ostin, I ll muestran cómo controlar un CA luz con Arduino usando el módulo de relés. Es un proyecto simple y también muy peligroso ya que vamos a tratar con alto voltaje 220v. No trate de si eres un aficionado en el trato con alto
Cómo utilizar el módulo de Driver Motor L298 - Arduino Tutorial

Cómo utilizar el módulo de Driver Motor L298 - Arduino Tutorial

Este controlador de motor dual bidireccional se basa en el muy popular L298 doble puente H Motor controlador IC. Este módulo le permitirá fácilmente y de manera independiente de controlar dos motores de hasta 2A en ambas direcciones.Es ideal para apl