Hola bien:
Aún así, este código no está completo para Arduino ya que lo estoy adaptando de C#. Creé un archivo de texto tipo .txt donde almacene los nombres de los relés que puede ingresar con los botones.
En Arduino quiero usar la EEPROM interna donde guarda y lee datos, en este caso los nombres de los relés. Cuando tengo los nombres en memoria los guardo en la EEPROM, cuando arranco el Arduino, los lee automáticamente.
Aquí hay un ejemplo de una pieza de código.
Code Arduino.
// Variables.
int coordenadaX = 0; // Coordenada X del textBox del nombre del Relé.
int index = 0; // Índice de ATRAS y GUARDAR.
int textBox = 0; // 0 para el número de Relé (de 1 al 8) y 1 para el texto del Relé (16 char).
String nombresDeLosReles[8]; // Líneas que al final se van a guardar en Archivo.txt.
bool cargado = false; // Vale false si todavía no se cargaron los nombres del Archivo, si no true, para no repetir.
// Caracteres alfanuméricos en el array.
char roALFANUMERICO[] =
{
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'Ñ', 'O', 'P',
'Q', 'R', 'S', 'T', 'U', 'V', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
'i', 'j', 'k', 'l', 'm', 'n', 'ñ', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'x', 'y',
'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', ',', '-', '_', ':', ';',
'¿', '?', '(', ')', '[', ']', '{', '}', '<', '>', '=', '$', '&', '@', '\\', '/', '\"',
' '
};
// Índices de los caracteres de los 8 Relés para el array alfanumérico.
// Hay un total de 86 caracteres. Se cuenta desde el 0 al 85.
int roINDICE_ARRAY[][16] =
{
{ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85 },
{ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85 },
{ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85 },
{ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85 },
{ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85 },
{ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85 },
{ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85 },
{ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85 }
};
char roNUMERICO[] = { '1', '2', '3', '4', '5', '6', '7', '8' };
int roINDICE_NUMERICO = 0;
void MostrarLineaNombre()
{
lcd.setCursor(4, 1);
for (int a = 0; a < 16; a++)
{
lcd.print(roALFANUMERICO[roINDICE_ARRAY[roINDICE_NUMERICO][a]]);
}
}
void Inicio()
{
//Console.SetWindowSize(20, 5); // Establece el ancho y alto de la ventana.
lcd.clear(); // Limpiar ventana.
lcd.setCursor(2, 0); // Posición del cursor.
lcd.print("Nombre de Reles: ");
lcd.setCursor(0, 3);
lcd.print(" ATRAS GUARDAR ");
//#########################################################################################
// Este código es de C#, ya lo pasaré a Arduino con su EEPROM interna o una tarjeta SD
// que también se puede leer archivo de texto tipo *.txt.
/*
if (cargado == false)
{
// ¿Existe el archivo de texto?
if (File.Exists("NombresReles.txt"))
{
// Supone un archivo con 8 lineas de 16 char completas aunque sea con espacios.
nombresDeLosReles = File.ReadAllLines("NombresReles.txt");
int a, b, c;
for (a = 0; a < 8; a++)
{
for (b = 0; b < 16; b++)
{
for (c = 0; nombresDeLosReles[a][b] != roALFANUMERICO[c]; c++)
{
;
}
roINDICE_ARRAY[a][b] = c;
}
}
}
cargado = true;
}
*/
//#########################################################################################
MostrarLineaNombre();
lcd.setCursor(2, 1);
lcd.print(roNUMERICO[roINDICE_NUMERICO]);
if (textBox == 0)
{
lcd.setCursor(2, 1);
}
else
{
lcd.setCursor(4 + coordenadaX, 1);
}
}
void NombreReles_Principal()
{
// ConsoleKey tecla, tecla2;
int indice = 0;
Inicio();
while (true)
{
lcd.cursor(); // Mostrar cursor.
lcd.blink(); // Cursosr parpadeando.
//tecla = Console.ReadKey(true).Key;
// ¿Has pulsado tecla flecha arriba?
if (HIGH == digitalRead(A1)) // Sí.
{
if (textBox == 0)
{
lcd.setCursor(4, 1);
textBox = 1;
}
else // textBox == 1
{
if (coordenadaX < 15)
{
coordenadaX++;
lcd.setCursor(4 + coordenadaX, 1);
}
}
}
// Entonces. ¿Haz pulsado flecha izquierda?
else if (HIGH == digitalRead(A3)) // Sí.
{
if (textBox == 1)
{
if (coordenadaX > 0)
{
coordenadaX--;
lcd.setCursor(4 + coordenadaX, 1);
}
else
{
lcd.setCursor(2, 1);
textBox = 0;
}
}
}
// Entonces. ¿Haz pulsado flecha abajo?
else if (HIGH == digitalRead(A2)) // Sí.
{
if (textBox == 0)
{
roINDICE_NUMERICO--;
if (roINDICE_NUMERICO < 0)
{
roINDICE_NUMERICO = 7;
}
lcd.setCursor(2, 1);
lcd.print(roNUMERICO[roINDICE_NUMERICO]);
MostrarLineaNombre();
lcd.setCursor(2, 1);
}
else // textBox == 1
{
roINDICE_ARRAY[roINDICE_NUMERICO][coordenadaX]--;
if (roINDICE_ARRAY[roINDICE_NUMERICO][coordenadaX] < 0)
{
roINDICE_ARRAY[roINDICE_NUMERICO][coordenadaX] = 85;
}
lcd.print(roALFANUMERICO[roINDICE_ARRAY[roINDICE_NUMERICO][coordenadaX]]);
lcd.setCursor(4 + coordenadaX, 1);
}
}
// Entonces. ¿Haz pulsado flecha arriba?
else if (HIGH == digitalRead(A1)) // Sí.
{
if (textBox == 0)
{
roINDICE_NUMERICO++;
if (roINDICE_NUMERICO >= 8)
{
roINDICE_NUMERICO = 0;
}
lcd.setCursor(2, 1);
lcd.print(roNUMERICO[roINDICE_NUMERICO]);
MostrarLineaNombre();
lcd.setCursor(2, 1);
}
else // textBox == 1
{
roINDICE_ARRAY[roINDICE_NUMERICO][coordenadaX]++;
if (roINDICE_ARRAY[roINDICE_NUMERICO][coordenadaX] > 85) // Aquí es > 85 (o >= 86) porque 86 es la cantidad
{ // total y al alcanzarla ahí paso al comienzo (0).
roINDICE_ARRAY[roINDICE_NUMERICO][coordenadaX] = 0;
}
lcd.print(roALFANUMERICO[roINDICE_ARRAY[roINDICE_NUMERICO][coordenadaX]]);
lcd.setCursor(4 + coordenadaX, 1);
}
}
// Entonces. ¿Haz pulsado la tecla Enter?
else if (HIGH == digitalRead(A5)) // Sí.
{
lcd.cursor(); // Ocultar cursor.
lcd.noBlink(); // Sin parpadeos el cursor.
lcd.setCursor(0, 3);
lcd.print("> ATRAS GUARDAR ");
index = 0;
while (digitalRead(A5))
{
if ((HIGH == digitalRead(A4)) || (HIGH == digitalRead(A3)))
{
index = 1 - index; // Si vale 0 valdrá 1, si vale 1 valdrá 0.
lcd.setCursor(0, 3);
if (index == 0)
{
lcd.print("> ATRAS GUARDAR ");
}
else
{
lcd.print(" ATRAS > GUARDAR ");
}
}
}
if (index == 1) // Se pulsó Enter en Guardar.
{
nombresDeLosReles[8];
for (int a = 0; a < 8; a++)
{
for (int b = 0; b < 16; b++)
{
// nombresDeLosReles[a] += roALFANUMERICO[roINDICE_ARRAY[a][b]];
}
}
// Guardar archivo de texto con los nombres de los relés.
//File.WriteAllLines("NombresReles.txt", nombresDeLosReles);
// En esta parte, justo arriba se hace con el lenguaje de C#, aquí hay que usar la
// EEPROM interna de Arduino que haré más adelante.
// Puede que los nombres contengan espacios al final, que no se verán pero no
// hay que borrarlos porque al principio leerá 16 char y si faltan, fallará.
lcd.clear();
lcd.setCursor(2, 1);
lcd.print("Haz guardado:");
lcd.setCursor(2, 3);
lcd.print((indice + 1));
lcd.setCursor(4, 3);
//lcd.print(nombresDeLosReles[indice]);
// Mientras no pulses la tecla Enter, sigue las demás intrucciones.
while (HIGH == digitalRead(A5))
{
// ¿Haz pulsado flecha arriba?
if (HIGH == digitalRead(A1)) // Sí. Ejecuta código dentro de ella.
{
indice--; // Decrementa la variable indice.
// ¿indice es menor que 0?
if (indice < 0) // Sí.
{
indice = 7;
}
}
// Entonces. ¿Haz pulsado flecha abajo?
else if (HIGH == digitalRead(A2)) // Sí.
{
indice++; // Incrementa la variable indice.
// ¿indice es mayor o igual que 8?
if (indice >= 8) // Sí.
{
indice = 0;
}
}
lcd.setCursor(2, 3);
lcd.print((indice + 1));
lcd.setCursor(4, 3);
lcd.print(nombresDeLosReles[indice]);
}
Inicio();
}
else if (index == 0)
{
break;
}
}
}
}