Paso 8: menú
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);
}
}