Paso 7: Software - oh... ouch!
Un código que comprueba que cada botón del teclado se lee con precisión.
Un segundo código que prueba cada uno de los botones de 10 función.
Un Enigma_POST (Power en Self Test) esboza los exámenes que cada lámpara de teclado se puede encender precisamente y mover cada LED a través de cada modo, con algunas modificaciones en el código de tablero original para cada segmento de los 4 LED de 16 segmentos está funcionando perfectamente.
Pero, incluso con todas estas muestra códigos en mano que prueba cada pieza de hardware en la máquina, la tarea de reproducir la funcionalidad de cifrado/descifrado de un verdadero Enigma M4 fue un tour-de-force de matemáticas!
Todos los bocetos de Arduino estarán disponibles en nuestro Github que actualmente estamos configurando.
Aquí está el bosquejo de Enigma_POST:
/ * Código del enigma desarrollo a prueba de los 4 Nixies, 5 LED,
Encienda cada lámpara en secuencia.
Escrito por Marc Tessier y James Sanderson 08/09/13
*/
Definir los pines de 16 segmentos
segmento de int [17] = {24,22,25,31,38,36,32,30,28,26,23,27,33,35,34,29,37};
ánodo de int [4] = {39,41,43,45};
Definir las lámparas de 9 Pins
Lámpara de int [9] = {10,9,8,7,6,5,4,3,2};
int lanode [3] = {11,12,13};
LTP587P segmentos: A, B, C, D, E, F, G, H, K, M, N, P, R, S, T, U, dp
Boolean segmentvals [39] [17] = {{0,0,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1}, / / = A
{0,0,0,0,0,0,1,1,1,0,1,0,1,0,1,1,1}, / / = B
{0,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1}, / / = C
{0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,1}, / / = D
{0,0,1,1,0,0,0,0,1,1,1,0,1,1,1,0,1}, / / = E
{0,0,1,1,1,1,0,0,1,1,1,0,1,1,1,0,1}, / / = F
{0,0,1,0,0,0,0,0,1,1,1,0,1,1,1,1,1}, / / = G
{1,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1}, / / = H
{0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,1,1}, / / = I
{1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1}, / / = J
{1,1,1,1,1,1,0,0,1,1,0,1,0,1,1,0,1}, / / = K
{1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1}, / / = L
{1,1,0,0,1,1,0,0,0,1,0,1,1,1,1,1,1}, / / = M
{1,1,0,0,1,1,0,0,0,1,1,1,0,1,1,1,1}, / / = N
{0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1}, / / = O
{0,0,0,1,1,1,0,0,1,1,1,0,1,1,1,0,1}, / / = P
{0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1}, / / = Q
{0,0,0,1,1,1,0,0,1,1,1,0,0,1,1,0,1}, / / = R
{0,0,1,0,0,0,1,0,1,1,1,0,1,1,1,0,1}, / / = S
{0,0,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1}, / / = T
{1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1}, / / = U
{1,1,1,1,1,1,0,0,1,1,0,1,1,1,0,1,1}, / / = V
{1,1,0,0,1,1,0,0,1,1,1,1,0,1,0,1,1}, / / = W
{1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1}, / / = X
{1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1}, / / = Y
{0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,1}, / / = Z
{0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1}, / / = 0
{1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,1,1}, / / = 1
{0,0,0,1,0,0,0,1,1,1,1,0,1,1,1,0,1}, / / = 2
{0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,1,1}, / / = 3
{1,1,0,0,1,1,1,0,1,1,1,0,1,1,1,0,1}, / / = 4
{0,0,1,0,0,0,1,0,1,1,1,0,1,1,1,0,1}, / / = 5
{0,0,1,0,0,0,0,0,1,1,1,0,1,1,1,0,1}, / / = 6
{0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1}, / / = 7
{0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1}, / / = 8
{0,0,0,0,0,0,1,0,1,1,1,0,1,1,1,0,1}, / / = 9
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, / / = espacio
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, / / = completo iluminado
{1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1} / / = SS
};
LTP587P segmentos: A, B, C, D, E, F, G, H, K, M, N, P, R, S, T, U, dp
Boolean lampvals [9] [9] = {{0,1,1,1,1,1,1,1,1}, / / = Q o A o P
{1,0,1,1,1,1,1,1,1}, / / = W o S o Y
{1,1,0,1,1,1,1,1,1}, / / = E o D o X
{1,1,1,0,1,1,1,1,1}, / / = R o F o C
{1,1,1,1,0,1,1,1,1}, / / = T o G o V
{1,1,1,1,1,0,1,1,1}, / / = Z o H o B
{1,1,1,1,1,1,0,1,1}, / / = U o J o N
{1,1,1,1,1,1,1,0,1}, / / = I o K o M
{1,1,1,1,1,1,1,1,0} / / = O o L
};
int value_row1 = 0;
int value_row2 = 0;
int value_row3 = 0;
clave char = 91;
int led1 = 40;
int led2 = 42;
led3 int = 44;
led4 int = 46;
led5 int = 48;
int espera = 100;
void setup() {}
para (int index = 0; índice < = 3; Índice ++) {}
pinMode (ánodo [índice], salida);
digitalWrite (ánodo [índice], 1);
}
para (int index = 0; índice < = 16; índice ++) {}
pinMode (segmento [índice], salida);
digitalWrite (segmento [índice], 1);
}
Inicializa los pines digitales como salida.
pinMode (led1, salida);
pinMode (led2, salida);
pinMode (led3, salida);
pinMode (led4, salida);
pinMode (led5, salida);
para (int index = 0; índice < = 2; índice ++) {}
pinMode (lanode [index], salida);
digitalWrite (lanode [index], 1);
}
para (int index = 0; índice < = 8; índice ++) {}
pinMode (lámpara [índice], salida);
digitalWrite (lámpara [índice], 1);
}
}
void loop() {}
sixteenSegWrite (0, 38);
sixteenSegWrite (1, 38);
sixteenSegWrite (2, 38);
sixteenSegWrite (3, 38);
digitalWrite (LED 1, HIGH); Encienda el LED (alto es el nivel de voltaje)
Delay(200); Espere un segundo
digitalWrite (LED 1, bajo); Apagar el LED por lo que la tensión baja
Delay(Wait); Espere un segundo
digitalWrite (led2, HIGH); Encienda el LED (alto es el nivel de voltaje)
Delay(200); Espere un segundo
digitalWrite (led2, LOW); Apagar el LED por lo que la tensión baja
Delay(Wait); Espere un segundo
digitalWrite (LED 3, alto); Encienda el LED (alto es el nivel de voltaje)
Delay(200); Espere un segundo
digitalWrite (LED 3, bajo); Apagar el LED por lo que la tensión baja
Delay(Wait); Espere un segundo
digitalWrite (led4, HIGH); Encienda el LED (alto es el nivel de voltaje)
Delay(200); Espere un segundo
digitalWrite (led4, LOW); Apagar el LED por lo que la tensión baja
Delay(Wait); Espere un segundo
digitalWrite (led5, HIGH); Encienda el LED (alto es el nivel de voltaje)
Delay(200); Espere un segundo
digitalWrite (led5, LOW); Apagar el LED por lo que la tensión baja
Delay(Wait); Espere un segundo
para (int index = 0; índice < = 2; índice ++) {}
digitalWrite (lanode [index], 0);
para (int mychar = 0; mychar < 9; mychar ++) {}
para (sindex int = 0; sindex < 9; sindex ++) {}
digitalWrite (lámpara [sindex], lampvals[mychar][sindex]);
retardo (30);
}
}
digitalWrite (lanode [index], 1);
}
}
{} void sixteenSegWrite (int dígitos, int carácter)
digitalWrite(anode[digit],0);
para (int index = 0; índice < 17; Índice ++) {}
digitalWrite (segmento [índice], segmentvals[character][index]);
}
}