Hacer tu propia réplica de Enigma (7 / 11 paso)

Paso 7: Software - oh... ouch!

Durante cada fase de ensamblaje de hardware, habíamos creado pequeños bocetos de Arduino que pondría a prueba la sección individual específica estuvimos trabajando en:

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]);
}
}

Artículos Relacionados

Hacer su propia regla de diapositiva

Hacer su propia regla de diapositiva

ha pensado en hacer mi propia regla de diapositiva y finalmente lo hizo.  Este Instructable es parcialmente una descripción de cómo lo hice y parcialmente una evaluación del esfuerzo.Paso 1: En 2008 legionlabs miembro de Instructables publicó "Cómo u
Hacer tu propia moneda personalizado

Hacer tu propia moneda personalizado

Enlace para el vídeo en caso de no aparece: http://www.youtube.com/watch?v=jhASjoxSpkE¿Te has preguntado si ves bien en una moneda? Esta es tu oportunidad para descubrir!En el pasado que hace su propia moneda era un calvario y una mitad, tener que ha
Hacer tu propia mesa de comedor

Hacer tu propia mesa de comedor

Después de ver el R6000 (400 dólares) precio para una mesa de comedor madera de mango, decidí hacer mi propia a una fracción de lo costo para comprar uno. El proyecto fue realmente muy fácil y sólo tuvo un fin de semana.En este proyecto encontrará la
Hacer tu propia paleta de la canoa

Hacer tu propia paleta de la canoa

Recientemente he terminado de construir una canoa de tiras de cedro y tenía barriles lleno de finas, pequeños pedazos de cedro y Fresno izquierda sobre. Los pedazos de madera eran tan pequeños y delgado había sido quemarlos en nuestro fogón del patio
Cómo hacer tus propias velas

Cómo hacer tus propias velas

Hacer sus propias velas es simple, barato y divertido. También hacen grandes regalos, especialmente para Navidad. Los te color de y también puede crear sus propios aromas. En este instructable mostraré lo fácil que es hacerlo.Paso 1: Lo que se necesi
Cómo hacer su propia pirámide malabares bolas

Cómo hacer su propia pirámide malabares bolas

aprender a hacer su propia pirámide de malabares pelotas de trapo y arroz!Es mejor utilizar material de cortina o algo de fuerza similar que no debilite fácilmente. Usted puede conseguir creativo en los colores como éstos son malabares bolas que está
Hacer tus propias uñas

Hacer tus propias uñas

diversión fácil manera de hacer tus propias uñas!Paso 1: Se necesita Necesita moldeo por cera, una brocha y colores que se corresponderá con lo que las uñas le pueden hacer. Estoy haciendo a hombre lobo garras decidí que mi tierra de zombies (polvo m
Hacer su propia maquinilla de afeitar y afeitar cepillo soporte

Hacer su propia maquinilla de afeitar y afeitar cepillo soporte

este instructable le mostrará cómo puede hacer su propia maquinilla de afeitar y afeitar soporte cepillo usando elementos que probablemente ya están en su casa.Herramientas necesarias:Par de pinzas (preferentemente algo abultadas, como alicates del j
Hacer su propia versión de revisión de herramientas lazo esculpido de arcilla (actualizado 7 09 de Sept)

Hacer su propia versión de revisión de herramientas lazo esculpido de arcilla (actualizado 7 09 de Sept)

herramientas de modelación son kit esencial para la escultura en barro o arcillas con base de aceite como plasteline (una plastilina de alto grado), cera o chavant.Generalmente, hay dos tipos principales de escultura variedad palo-como las herramient
Hacer tu propia pintura de tela

Hacer tu propia pintura de tela

Pintura de tela es una útil herramienta para personalizar la ropa, sábanas, bolsos y mucho más. Si eres como yo, no quiero ser limitada por sólo los colores en la tienda, desea mucho más! Mayoría de la tela que solo funcione en un solo tipo de tela,
Tejer de la tarjeta - cómo hacer tus propias tarjetas de materiales reciclados

Tejer de la tarjeta - cómo hacer tus propias tarjetas de materiales reciclados

soy hilandera y tejedora. Sobre todo me encanta tejer con mis hilos de hilada a mano. Un querido amigo mío, Sue Woods, me cotizan un montón de libros para mi pila de vitrales y fuentes de tejer hace unos años. Empecé a leer a través de ellos todos en
Cómo hacer tu propia mesa de madera

Cómo hacer tu propia mesa de madera

Cómo construir una mesa de madera personalizados.Una bastante sencilla paso a paso sobre cómo construir tu mesa de centro de madera propio. Esta cosa es una bestia* cuidado de trabajar con herramientas de mano y poder ser. No soy responsable por lesi
Diseño en 3D y hacer su propia construcción set

Diseño en 3D y hacer su propia construcción set

Este instructable le mostrará cómo diseñar y hacer su propia construcción utilizando software libre opensource como Google Sketchup o Tinkercad para diseñar tus modelos 3D.Este proyecto es ideal para los niños que quieren hacer y de aprender sobre di
¿DIY: Hacer su propia ropa etiquetas

¿DIY: Hacer su propia ropa etiquetas

si vas a iniciar un negocio de venta de sus artículos hechos a mano (o si sólo quieren hacer sus manualidades buscar lujo), tiene sentido tener etiquetas, derecho? Derecho!  Aquí hay un tutorial en hacer sus propias etiquetas en casa, no sólo para la