Faire votre propre réplique Enigma (8 / 11 étapes)

Étape 8: Plus de logiciels !

Nous avons donc tout d’abord créé une fonction pour chaque mode de l’énigme opère dans :
En Mode 0, Mode par défaut, l’énigme n’est rien d’autre qu’une simple machine à écrire avec un chapiteau qui affiche son numéro de modèle.
Mode 1 permet à l’utilisateur de sélectionner les 3 (sur 8) Rotors il utilisera ainsi que celui qui (des 2) réflecteur qu’il souhaite utiliser.
En Mode 2, l’utilisateur peut sélectionner la position interne de chaque Rotor.
Mode 3 est utilisé pour spécifier la position de départ (externe) de chaque Rotor.
En Mode 4, un utilisateur peut entrer jusqu'à 10 paires de swaps de lettres.
Mode le mode 5 est exécuté et à ce moment-là, l’énigme se chiffrer ou déchiffrer des toute lettre tapée sur le clavier.

Voici l’esquisse complète qui gère l’énigme entière :

/ * S & T GeoTronics Enigma Code. Ce blason personnalisé Arduino Mega est programmé pour reproduire
exactement le comportement d’une vraie machine allemande Enigma de M4.
Il utilise 4 unités de 16 segments, 5 LED, 26 installation de lampes comme clavier, 26 touches du clavier
& 10 touches de fonction. Le 115 diodes électroluminescentes sont charlie-plexed pour minimiser la
montant de pins nécessaires jusqu'à 38 et tous les boutons de 36 touches partagent un total de 4 points.
Conçu et programmé par Marc Tessier & James Sanderson, assemblés 20/09/13
*/
Définir les variables
unsigned long temps = millis() ;
unsigned long lors = temps ;
int inpin [4] = {A0, A1, A2, A3} ;
int inval [4] = {0, 0, 0, 0} ;
keyval int = 100 ;
windex booléen = 0 ;
Boolean windex1 = 0 ;
Boolean windex2 = 0 ;
int lampval = 100 ;
int procesval = 0 ;
int procesvala = 0 ;
mode d’int = 0 ;
mtime long non signé ;
mdex int = 0 ;

Décrivez chaque caractère de Nixie
dig1 int = 37 ;
int dig2 = 37 ;
int dig3 = 37 ;
int dig4 = 37 ;

données int [36] = {36,36,36,36,18,39,19,36,6,4,14,19,17,14,13,8,2,18,36,4,13,8,6,12,0,36,12,0,17,10,36,30,36,36,36,36} ;

Définir les broches 16 Segments sous forme de 2 tableaux
int segment [17] = {24,22,25,31,38,36,32,30,28,26,23,27,33,35,34,29,37} ; Tableau de cathode
anode int [4] = {39,41,43,45} ; annode tableau commin annode

Définir les 26 lampes sous forme d’un tableau 2D
int lamparray [26] [2] = {{12,10}, 13,5 {}, {13,7}, 12,8 {}, {11,8}, {12,7,}, 12,6 {}, {12,5}, 11,3 {}, {12,4},
{12,3}, 13,2 {}, {13,3}, 13,4 {}, {11,2}, 13,10 {}, {11,10}, 11,7 {}, 12,9 {}, {11,6},
11,4 {} {13,6}, {11,9}, {13,8}, {13,9}, {11,5}} ;

Définir les 12 broches lampe pour l’initialisation
int lamppin [12] = {2,3,4,5,6,7,8,9,10,11,12,13} ; cathode de 2 à 10, 11 et 13 annode commune

Décrivez chaque Segments LTP587P: A, B, C, D, E, F, G, H, K, M, N, P, R, S, T, U, dp
segmentvals booléen [40] [17] = {{0,0,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1}, / / = 0
{0,0,0,0,0,0,1,1,1,0,1,0,1,0,1,1,1}, / / = B 1
{0,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1}, / / = C 2
{0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,1}, / / = D 3
{0,0,1,1,0,0,0,0,1,1,1,0,1,1,1,0,1}, / / = E 4
{0,0,1,1,1,1,0,0,1,1,1,0,1,1,1,0,1}, / / = F 5
{0,0,1,0,0,0,0,0,1,1,1,0,1,1,1,1,1}, / / = G 6
{1,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1}, / / = H 7
{0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,1,1}, / / = I, 8
{1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1}, / / = J 9
{1,1,1,1,1,1,0,0,1,1,0,1,0,1,1,0,1}, / / = K 10
{1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1}, / / = L 11
{1,1,0,0,1,1,0,0,0,1,0,1,1,1,1,1,1}, / / = M 12
{1,1,0,0,1,1,0,0,0,1,1,1,0,1,1,1,1}, / / = N 13
{0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1}, / / = O 14
{0,0,0,1,1,1,0,0,1,1,1,0,1,1,1,0,1}, / / = P 15
{0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1}, / / = Q 16
{0,0,0,1,1,1,0,0,1,1,1,0,0,1,1,0,1}, / / = R 17
{0,0,1,0,0,0,1,0,1,1,1,0,1,1,1,0,1}, / / = S 18
{0,0,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1}, / / = T 19
{1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1}, / / = U 20
{1,1,1,1,1,1,0,0,1,1,0,1,1,1,0,1,1}, / / = V 21
{1,1,0,0,1,1,0,0,1,1,1,1,0,1,0,1,1}, / / = W 22
{1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1}, / / = X 23
{1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1}, / / = O 24
{0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,1}, / / = Z 25
{0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1}, / / = 0 26
{1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,1,1}, / / = 1 27
{0,0,0,1,0,0,0,1,1,1,1,0,1,1,1,0,1}, / / = 2 28
{0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,1,1}, / / = 3 29
{1,1,0,0,1,1,1,0,1,1,1,0,1,1,1,0,1}, / / = 4 30
{0,0,1,0,0,0,1,0,1,1,1,0,1,1,1,0,1}, / / = 5 31
{0,0,1,0,0,0,0,0,1,1,1,0,1,1,1,0,1}, / / = 6 32
{0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1}, / / = 7 33
{0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1}, / / = 8 34
{0,0,0,0,0,0,1,0,1,1,1,0,1,1,1,0,1}, / / = 9 35
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, / / = espace 36
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, / / = 37 éclairé complet
{1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1}, / / = SS 38
{0,1,1,1,0,0,0,1,0,0,1,1,0,1,1,0,1}} ; = & 39
LTP587P Segments: A, B, C, D, E, F, G, H, K, M, N, P, R, S, T, U, dp

Définir les 5 voyants de Mode
led1 int = 40 ;
led2 int = 42 ;
led3 int = 44 ;
led4 int = 46 ;
DEL5 int = 48 ;

4,10,12, 5,11, 6, 3,16,21,25,13,19,14,22,24, 7,23,20,18,15, 0, 8, 1,17, 2, 9
Définir les valeurs de rotor A B C D E F G H I J K L M N O P Q
public static const int rotorvals [12] [78] = {{4,10,12, 5,11, 6, 3,16,21,25,13,19,14,22,24, 7,123,20,18,15, 0, 8, 1,17, 2, 9,
4,10,12, 5,11, 6, 3,16,21,25,13,19,14,22,24, 7,123,20,18,15, 0, 8, 1,17, 2, 9,
4,10,12, 5,11, 6, 3,16,21,25,13,19,14,22,24, 7,123,20,18,15, 0, 8, 1,17, 2, 9}, / / roue 1

{0, 9, 3,10,118, 8,17,20,23, 1,11, 7,22,19,12, 2,16, 6,25,13,15,24, 5,21,14, 4,
0, 9, 3,10,118, 8,17,20,23, 1,11, 7,22,19,12, 2,16, 6,25,13,15,24, 5,21,14, 4,
0, 9, 3,10,118, 8,17,20,23, 1,11, 7,22,19,12, 2,16, 6,25,13,15,24, 5,21,14, 4}, / / roue 2

{1, 3, 5, 7, 9,11, 2,15,17,19,23,21,25,13,24, 4, 8,22, 6, 0,10,112,20,18,16,14,
1, 3, 5, 7, 9,11, 2,15,17,19,23,21,25,13,24, 4, 8,22, 6, 0,10,112,20,18,16,14,
1, 3, 5, 7, 9,11, 2,15,17,19,23,21,25,13,24, 4, 8,22, 6, 0,10,112,20,18,16,14}, / / roue 3

{4,18,14,21,15,25, 9, 0,24,116,20, 8,17, 7,23,11,13, 5,19, 6,10, 3, 2,12,22, 1,
7,23,11,13, 0,24,116,20, 4,18,14,21,15,25, 2,12,22, 8,17, 5,19, 6,10, 9, 3, 1,
4,18,14,21,15,25, 9, 0,24,116,20, 8,17, 7,23,11,13, 5,19, 6,10, 3, 2,12,22, 1}, / / roue 4

{21,25 1,17, 6, 8,19,24,20,15,18, 3,13, 7,11,23, 0,22,12, 9,16,14, 5, 4, 2 110,
21,25 1,17, 6, 8,19,24,20,15,18, 3,13, 7,11,23, 0,22,12, 9,16,14, 5, 4, 2 110,
21,25, 1,17, 6, 8,19,24,20,15,18, 3,13, 7,11,23, 0,22,12, 9,16,14, 5, 4, 2 110}, / / roue 5

{9,15, 6,21,14,20,12, 5,24,16, 1, 4 113, 7,25,17, 3,10, 0,18,23,11, 8, 2,19,122,
9,15, 6,21,14,20,12, 5,24,16, 1, 4 113, 7,25,17, 3,10, 0,18,23,11, 8, 2,19,122,
9,15, 6,21,14,20,12, 5,24,16, 1, 4 113, 7,25,17, 3,10, 0,18,23,11, 8, 2,19,122}, / / roue 6

{13,25, 9, 7, 6,17, 2,23,12,24,18,22,101,14,20, 5, 0, 8,21,11,15, 4,10,16, 3 119,
13,25, 9, 7, 6,17, 2,23,12,24,18,22,101,14,20, 5, 0, 8,21,11,15, 4,10,16, 3 119,
13,25, 9, 7, 6,17, 2,23,12,24,18,22,101,14,20, 5, 0, 8,21,11,15, 4,10,16, 3 119}, / / roue 7

{5,10,16, 7,19,11,23,14, 2, 1, 9,18,115, 3,25,17, 0,12, 4,22,13, 8,20,24, 6 121,
5,10,16, 7,19,11,23,14, 2, 1, 9,18,115, 3,25,17, 0,12, 4,22,13, 8,20,24, 6 121,
5,10,16, 7,19,11,23,14, 2, 1, 9,18,115, 3,25,17, 0,12, 4,22,13, 8,20,24, 6 121}, / / roue 8

{11,4,24,9,21,2,13,8,23,22,15,1,16,12,3,17,19,0,10,25,6,5,20,7,14,18,
11,4,24,9,21,2,13,8,23,22,15,1,16,12,3,17,19,0,10,25,6,5,20,7,14,18,
11,4,24,9,21,2,13,8,23,22,15,1,16,12,3,17,19,0,10,25,6,5,20,7,14,18}, / / beta

{5,18,14,10,0,13,20,4,17,7,12,1,19,8,24,2,22,11,16,15,25,23,21,6,9,3,
5,18,14,10,0,13,20,4,17,7,12,1,19,8,24,2,22,11,16,15,25,23,21,6,9,3,
5,18,14,10,0,13,20,4,17,7,12,1,19,8,24,2,22,11,16,15,25,23,21,6,9,3}, / / gamma

{4,13,10,16,0,20,24,22,9,8,2,14,15,1,11,12,3,23,25,21,5,19,7,17,6,18,
4,13,10,16,0,20,24,22,9,8,2,14,15,1,11,12,3,23,25,21,5,19,7,17,6,18,
4,13,10,16,0,20,24,22,9,8,2,14,15,1,11,12,3,23,25,21,5,19,7,17,6,18}, / / = UKW-B

{17,3,14,1,9,13,19,10,21,4,7,12,11,5,2,22,25,0,23,6,24,8,15,18,20,16,
17,3,14,1,9,13,19,10,21,4,7,12,11,5,2,22,25,0,23,6,24,8,15,18,20,16,
17,3,14,1,9,13,19,10,21,4,7,12,11,5,2,22,25,0,23,6,24,8,15,18,20,16} / / = UKW-C
};


public static const int rotorvali [10] [78] = {{20,22,24, 6, 0, 3, 5,15,21,25, 1, 4, 2,10,12,19, 7,23,18,11,17, 8,13,16,14, 9,
20,22,24, 6, 0, 3, 5,15,21,25, 1, 4, 2,10,12,19, 7,23,18,11,17, 8,13,16,14, 9,
20,22,24, 6, 0, 3, 5,15,21,25, 1, 4, 2,10,12,19, 7,23,18,11,17, 8,13,16,14, 9}, //wheel 1 j’ai
//
{0, 9,15, 2,25,22,17,11, 5, 1, 3,10,14,19,24,20,16, 6, 4,13, 7,23,12, 8,21,18,
0, 9,15, 2,25,22,17,11, 5, 1, 3,10,14,19,24,20,16, 6, 4,13, 7,23,12, 8,21,18,
0, 9,15, 2,25,22,17,11, 5, 1, 3,10,14,19,24,20,16, 6, 4,13, 7,23,12, 8,21,18}, //wheel 2 j’ai

{19, 0, 6, 1,15, 2,18, 3,16, 4,20, 5,21,13,25, 7,24, 8,23, 9,22,11,17,10,14,12,
19, 0, 6, 1,15, 2,18, 3,16, 4,20, 5,21,13,25, 7,24, 8,23, 9,22,11,17,10,14,12,
19, 0, 6, 1,15, 2,18, 3,16, 4,20, 5,21,13,25, 7,24, 8,23, 9,22,11,17,10,14,12}, //wheel 3 j’ai


{7,25,22,21, 0,17,19,13,11, 6,20,15,23,16, 2, 4, 9,12, 1,18,10, 3,24,14, 8, 5,
7,25,22,21, 0,17,19,13,11, 6,20,15,23,16, 2, 4, 9,12, 1,18,10, 3,24,14, 8, 5,
7,25,22,21, 0,17,19,13,11, 6,20,15,23,16, 2, 4, 9,12, 1,18,10, 3,24,14, 8, 5}, //wheel 4 je

{16, 2,24,11,23,22, 4,13, 5,19,25,14,18,12,21, 9,20, 3,10, 6, 8, 0,17,15, 7, 1,
16, 2,24,11,23,22, 4,13, 5,19,25,14,18,12,21, 9,20, 3,10, 6, 8, 0,17,15, 7, 1,
16, 2,24,11,23,22, 4,13, 5,19,25,14,18,12,21, 9,20, 3,10, 6, 8, 0,17,15, 7, 1}, //wheel 5 j’ai

{18,10,23,16,11, 7, 2,13,22, 0,17,21,06,12, 4, 1, 9,15,19,24, 5, 3, 25,20, 8,14,
18,10,23,16,11, 7, 2,13,22, 0,17,21,06,12, 4, 1, 9,15,19,24, 5, 3, 25,20, 8,14,
18,10,23,16,11, 7, 2,13,22, 0,17,21,06,12, 4, 1, 9,15,19,24, 5, 3, 25,20, 8,14}, //wheel 6 j’ai

{16,12,6,24,21,15,4,3,17,2,22,19,8,0,13,20,23,5,10,25,14,18,11,7,9,1,
16,12,6,24,21,15,4,3,17,2,22,19,8,0,13,20,23,5,10,25,14,18,11,7,9,1,
16,12,6,24,21,15,4,3,17,2,22,19,8,0,13,20,23,5,10,25,14,18,11,7,9,1}, //wheel 7 j’ai

{16,9,8,13,18,0,24,3,21,10,1,5,17,20,7,12,2,15,11,4,22,25,19,6,23,14,
16,9,8,13,18,0,24,3,21,10,1,5,17,20,7,12,2,15,11,4,22,25,19,6,23,14,
16,9,8,13,18,0,24,3,21,10,1,5,17,20,7,12,2,15,11,4,22,25,19,6,23,14}, //wheel 8 j’ai

{17,11,5,14,1,21,20,23,7,3,18,0,13,6,24,10,12,15,25,16,22,4,9,8,2,19,
17,11,5,14,1,21,20,23,7,3,18,0,13,6,24,10,12,15,25,16,22,4,9,8,2,19,
17,11,5,14,1,21,20,23,7,3,18,0,13,6,24,10,12,15,25,16,22,4,9,8,2,19}, //Beta j’ai

{4,11,15,25,7,0,23,9,13,24,3,17,10,5,2,19,18,8,1,12,6,22,16,21,14,20,
4,11,15,25,7,0,23,9,13,24,3,17,10,5,2,19,18,8,1,12,6,22,16,21,14,20,
4,11,15,25,7,0,23,9,13,24,3,17,10,5,2,19,18,8,1,12,6,22,16,21,14,20}} ; Gamma j’ai


Définir un tableau 2D pour garder les lieux roue & positions
roue int [3] [3] = {{26,0,0}, {26,0,0}, {26,0,0}} ;
int refléter [2] = {1,0} ;

Définir le tableau pour les valeurs de plugbord 25 x2 position 0 cales utilisent position 1 détient valeur int plugu détient le nombre total de fiches utilisées (max 10)
int plugval [2] [26] = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25}} ;
int pluguse = 0 ; int paindex = 0 ; int pbindex = 1 ;

void setup() {}
Initialiser toutes les 38 broches de la LED en sortie
pour (int index = 0; index < = 11 ; index ++) {}
pinMode (lamppin [index], sortie) ;
digitalWrite(lamppin[index],1) ;
}
pour (int index = 0; index < = 3; index ++) {}
pinMode (anode [index], sortie) ;
digitalWrite (anode [index], 1) ;
}
pour (int index = 0; index < = 16 ; index ++) {}
pinMode (segment [index], sortie) ;
digitalWrite (segment [index], 1) ;
}
pinMode(led1,OUTPUT) ;
pinMode(led2,OUTPUT) ;
pinMode(led3,OUTPUT) ;
pinMode(led4,OUTPUT) ;
pinMode(led5,OUTPUT) ;

Serial.Begin(9600) ;
Initialiser toutes les 4 broches de pusbutton en entrée
pour (int index = 0; index < = 3; index ++) {}
pinMode (inpin [index], entrée) ;
}

}

void loop() {}
Test de nouvelle clé & debounce clavier pressée
temps = millis() ;
Si (temps > lors + 500) {keyval = readkbde();}
Si ((keyval == 45) & & (windex == 1)) {modeselect();}
Le fonctionnement de la machine Enigma entier tourne autour de laquelle Mode d’opération est en cours
if(mode == 0) {mode0();}
d’autre if(mode == 1) {mode1();}
d’autre if(mode == 2) {mode2();}
d’autre if(mode == 3) {mode3();}
d’autre if(mode == 4) {mode4();}
d’autre if(mode == 5) {mode5();}
else {}

Serial.println(keyVal) ; pour des tirages de débogage keybord valeur à serial monitor / / pour exécuter ou del

}

Cette fonction prend soin de déterminer quelle touche a été enfoncée et retourne un entier unique
int readkbde() {}
kval int = 100 ;
pour (int index = 0; index < = 3; index ++) {inval [index] = analogRead(inpin[index]) ;   } //Reads analogique d’entrée non valides
Si ((925 > inval [0]) & & (828 > inval [1]) & & (730 > inval [2]) & & (828 > inval [3])) {kval = 100;} / / Appuyez sur aucune touche
ElseIf ((924 < inval [0]) & & (915 > inval [0])) {kval = 49;} //up flèche 4
ElseIf ((914 < inval [0]) & & (903 > inval [0])) {kval = 48;} //up flèche 3
ElseIf ((902 < inval [0]) & & (887 > inval [0])) {kval = 47;} //up flèche 2
ElseIf ((886 < inval [0]) & & (865 > inval [0])) {kval = 46;} //up flèche 1
ElseIf ((864 < inval [0]) & & (836 > inval [0])) {kval = 45;} //mode
ElseIf ((834 < inval [0]) & & (793 > inval [0])) {kval = 44;} //enter
ElseIf ((792 < inval [0]) & & (724 > inval [0])) {kval = 43;}
ElseIf ((723 < inval [0]) & & (594 > inval [0])) {kval = 42;}
ElseIf ((593 < inval [0]) & & (260 > inval [0])) {kval = 41;}
ElseIf (inval [0] < 259) {kval = 40;}
ElseIf ((827 < inval [1]) & & (807 > inval [1])) {kval = 14;}
ElseIf ((806 < inval [1]) & & (781 > inval [1])) {kval = 8;}
ElseIf ((780 < inval [1]) & & (749 > inval [1])) {kval = 20;}
ElseIf ((748 < inval [1]) & & (706 > inval [1])) {kval = 25;}
ElseIf ((705 < inval [1]) & & (647 > inval [1])) {kval = 19;}
ElseIf ((646 < inval [1]) & & (555 > inval [1])) {kval = 17;}
ElseIf ((554 < inval [1]) & & (418 > inval [1])) {kval = 4;}
ElseIf ((417 < inval [1]) & & (169 > inval [1])) {kval = 22;}
ElseIf (inval [1] < 168) {kval = 16;}
ElseIf ((729 < inval [2]) & & (699 > inval [2])) {kval = 10;}
ElseIf ((698 < inval [2]) & & (660 > inval [2])) {kval = 9;}
ElseIf ((659 < inval [2]) & & (611 > inval [2])) {kval = 7;}
ElseIf ((610 < inval [2]) & & (547 > inval [2])) {kval = 6;}
ElseIf ((546 < inval [2]) & & (455 > inval [2])) {kval = 5;}
ElseIf ((454 < inval [2]) & & (331 > inval [2])) {kval = 3;}
ElseIf ((330 < inval [2]) & & (inval [2] > 127)) {kval = 18;}
ElseIf (inval [2] < 126) {kval = 0;}
ElseIf ((827 < inval [3]) & & (807 > inval [3])) {kval = 11;}
ElseIf ((806 < inval [3]) & & (781 > inval [3])) {kval = 12;}
ElseIf ((780 < inval [3]) & & (749 > inval [3])) {kval = 13;}
ElseIf ((748 < inval [3]) & & (706 > inval [3])) {kval = 1;}
ElseIf ((705 < inval [3]) & & (647 > inval [3])) {kval = 21;}
ElseIf ((646 < inval [3]) & & (555 > inval [3])) {kval = 2;}
ElseIf ((554 < inval [3]) & & (418 > inval [3])) {kval = 23;}
ElseIf ((417 < inval [3]) & & (169 > inval [3])) {kval = 24;}
ElseIf (inval [3] < 169) {kval = 15;}
else {kval = 100;}
if(kval < 99) {lors = millis();}              Départs principaux debounce minuterie
Si ((kval > = 0) & & (kval < = 99)) {windex = 1;}  Windex montrant vrai (1) indique le retour d’un trait de clés frais
retour kval ;
}

Fonction pour changer le Mode de fonctionnement
void modeselect() {}
mode ++ ;
Si (mode > = 6) {mode = 0;}
Windex = 0 ;
}

Le Mode par défaut : Enigma est une machine à écrire
void mode0() {}
Si ((keyval > = 0) & & (keyval < = 25)) {lampval = keyval;}
lampita() ;
Marquee() ;
lampitb() ;
}

Sélectionnez les Rotors et le réflecteur
void mode1() {}
int indice ;
digitalWrite (led1, HIGH) ;
if(Windex == 1) {si ((keyval == 43) || (keyVal == 46)) {refléter [0] ++; if (refléter [0] > 2) {refléter [0] = 1;}  Windex = 0;}}
if(Windex == 1) {if(keyval == 47) {pour (indice = roue [2] [0]; (index == wheel[1][0]) || (indice == wheel[0][0]) || (indice == wheel[2][0]) ;
index ++) {if(index > 33) {index = 26;}} roue [2] [0] = index ;  Windex = 0;}}
if(Windex == 1) {if(keyval == 48) {pour (indice = roue [1] [0]; (index == wheel[2][0]) || (indice == wheel[0][0]) || (indice == wheel[1][0]) ;
index ++) {if(index > 33) {index = 26;}} roue [1] [0] = index ;  Windex = 0;}}
if(Windex == 1) {if(keyval == 49) {pour (indice = roue [0] [0]; (index == wheel[2][0]) || (indice == wheel[1][0]) || (indice == wheel[0][0]) ;
index ++) {if(index > 33) {index = 26;}} roue [0] [0] = index ;  Windex = 0;}}
if(Windex == 1) {if(keyval == 42) {pour (indice = roue [2] [0]; (index == wheel[1][0]) || (indice == wheel[0][0]) || (indice == wheel[2][0]) ;
index--) {if(index < 28) {index = 35;}} roue [2] [0] = index ;  Windex = 0;}}
if(Windex == 1) {if(keyval == 41) {pour (indice = roue [1] [0]; (index == wheel[2][0]) || (indice == wheel[0][0]) || (indice == wheel[1][0]) ;
index--) {if(index < 28) {index = 35;}} roue [1] [0] = index ;  Windex = 0;}}
if(Windex == 1) {if(keyval == 40) {pour (indice = roue [0] [0]; (index == wheel[2][0]) || (indice == wheel[1][0]) || (indice == wheel[0][0]) ;
index--) {if(index < 28) {index = 35;}} roue [0] [0] = index ;  Windex = 0;}}
dig2 = roue [2] [0] ;  dig3 = roue [1] [0] ; dig4 = roue [0] [0] ; dig1 = tenir compte [0] ;
nixisend() ;
dig1 = 37 ; dig2 = 37 ; dig3 = 37 ; dig4 = 37 ;
digitalWrite (led1, faible) ;
}

Positionner le réglage interne de chaque Rotor
void mode2() {}
digitalWrite (led2, HIGH) ;
if(Windex == 1) {}
if(keyVal == 47) {[2] [1] de roue ++; if (roue [2] [1] > 25) {roue [2] [1] = 0;}}
if(keyVal == 48) {roue [1] [1] ++; if (roue [1] [1] > 25) {roue [1] [1] = 0;}}
if(keyVal == 49) {roue [0] [1] ++; if (roue [0] [1] > 25) {roue [0] [1] = 0;}}
if(keyVal == 42) {roue [2] [1]--; if (roue [2] [1] < 0) {[2] [1] de la roue = 25;}}
if(keyVal == 41) {roue [1] [1]--; if (roue [1] [1] < 0) {roue [1] [1] = 25;}}
if(keyVal == 40) {roue [0] [1]--; if (roue [0] [1] < 0) {roue [0] [1] = 25;}}
Windex = 0 ; }

dig2 = roue [2] [1] ;  dig3 = roue [1] [1] ; dig4 = roue [0] [1] ; dig1 = 0 ;
nixisend() ;
dig1 = 37 ; dig2 = 37 ; dig3 = 37 ; dig4 = 37 ;
digitalWrite (led2, faible) ;
}

Position du caractère de début de chaque roue
void mode3() {}
digitalWrite (DEL3, HIGH) ;
if(Windex == 1) {}
if(keyVal == 46) {refléter [1] ++; if (refléter [1] > 25) {refléter [1] = 0;}}
if(keyVal == 47) {[2] [2] de roue ++; if (roue [2] [2] > 25) {roue [2] [2] = 0;}}
if(keyVal == 48) {roue [1] [2] ++; if (roue [1] [2] > 25) {roue [1] [2] = 0;}}
if(keyVal == 49) {roue [0] [2] ++; if (roue [0] [2] > 25) {roue [0] [2] = 0;}}
if(keyVal == 43) {refléter [1]--; if (refléter [1] < 0) {refléter [1] = 25;}}
if(keyVal == 42) {roue [2] [2]--; if (roue [2] [2] < 0) {[2] [2] de la roue = 25;}}
if(keyVal == 41) {roue [1] [2]--; if (roue [1] [2] < 0) {roue [1] [2] = 25;}}
if(keyVal == 40) {roue [0] [2]--; if (roue [0] [2] < 0) {roue [0] [2] = 25;}}
Windex = 0 ; }

dig2 = roue [2] [2] ;  dig3 = roue [1] [2] ; dig4 = roue [0] [2] ; dig1 = tenir compte [1] ;
nixisend() ;
dig1 = 37 ; dig2 = 37 ; dig3 = 37 ; dig4 = 37 ;
digitalWrite (DEL3, faible) ;
}

Définir les paires du tableau de connexion
void mode4() {}
int index = 0 ;
digitalWrite (led4, HIGH) ;
Si (pluguse < = 9) {}
Si (plugval [0] [paindex] == 1) {pour (indice = paindex;(index == paindex) || (indice == pbindex) || (plugval [0] [index] == 1) ; index ++) {if(index > 24) {index = -1;}} paindex = index;}
Si (plugval [0] [pbindex] == 1) {pour (indice = pbindex;(index == pbindex) || (indice == paindex) || (plugval [0] [index] == 1) ; index ++) {if(index > 24) {index = -1;}} pbindex = index;}
if(Windex == 1) {}
if(keyVal == 46) {pour (indice = paindex;(index == paindex) || (indice == pbindex) || (plugval [0] [index] == 1) ; index ++) {if(index > 24) {index = -1;}} paindex = index ; Windex = 0 ; }
if(keyVal == 43) {pour (indice = paindex;(index == paindex) || (indice == pbindex) || (plugval [0] [index] == 1) ; index--) {if(index < 1) {index = 26;}} paindex = index ; Windex = 0 ;  }
if(keyVal == 49) {pour (indice = pbindex;(index == pbindex) || (indice == paindex) || (plugval [0] [index] == 1) ; index ++) {if(index > 24) {index = -1;}} pbindex = index ; Windex = 0 ; }
if(keyVal == 40) {pour (indice = pbindex;(index == pbindex) || (indice == paindex) || (plugval [0] [index] == 1) ; index--) {if(index < 1) {index = 26;}} pbindex = index ; Windex = 0 ;  }
if(keyVal == 44) {plugval [0] [paindex] = 1; plugval [1] [paindex] = pbindex ; plugval [0] [pbindex] = 1; plugval [1] [pbindex] = paindex ; windex = 0; pluguse ++;}
}
dig2 = 19 ; dig3 = 14 ; dig4 = pbindex ; dig1 = paindex ;
nixisend() ;
dig1 = 37 ; dig2 = 37 ; dig3 = 37 ; dig4 = 37 ;
}
else {done();}
digitalWrite (led4, faible) ;
}

Il s’agit de Mode de fonctionnement Normal pour crypter/décrypter
void mode5() {}
int pv = 0 ;
digitalWrite (DEL5, HIGH) ;

Si ((keyval > = 0) & & (keyval < = 25)) {if(windex == 1) {procesvala = keyval ;  indexwheels();}}
Windex = 0 ;
procesval = procesvala ;
procesval = plugval [1] [procesval] ;
Serial.Print (procesval) ; Serial.Print("") ;

PV = (procesval + (roue [0] [2] - wheel[0][1])) ;
if(PV < 0) {pv = pv + 26;}
procesval = rotorvals [roue [0] [0] -27] [pv] ;
Si (procesval > = 100) {procesval = procesval - 100;}
procesval = (procesval - (roue [0] [2] - wheel[0][1])) ;
if(procesval < 0) {procesval = procesval + 26;} if(procesval > 25) {procesval = procesval - 26;}
Serial.Print (procesval) ; Serial.Print("") ;

PV = (procesval + (roue [1] [2] - wheel[1][1])) ;
if(PV < 0) {pv = pv + 26;}
procesval = rotorvals [roue [1] [0] -27] [pv] ;
Si (procesval > = 100) {procesval = procesval - 100;}
procesval = (procesval - (roue [1] [2] - wheel[1][1])) ;
if(procesval < 0) {procesval = procesval + 26;} if(procesval > 25) {procesval = procesval - 26;}
Serial.Print (procesval) ; Serial.Print("") ;

PV = (procesval + (roue [2] [2] - wheel[2][1])) ;
if(PV < 0) {pv = pv + 26;}
procesval = rotorvals [roue [2] [0] -27] [pv] ;
Si (procesval > = 100) {procesval = procesval - 100;}
procesval = (procesval - (roue [2] [2] - wheel[2][1])) ;
if(procesval < 0) {procesval = procesval + 26;} if(procesval > 25) {procesval = procesval - 26;}
Serial.Print (procesval) ; Serial.Print("") ;

PV = (procesval) ;
procesval = rotorvals [refléter [0] + 7] [pv] ;
Si (procesval > = 100) {procesval = procesval - 100;}
if(procesval < 0) {procesval = procesval + 26;} if(procesval > 25) {procesval = procesval - 26;}
Serial.Print (procesval) ; Serial.Print("") ;

procesval = rotorvals [refléter [0] + 9] [procesval] ;
Serial.Print (procesval) ; Serial.Print("") ;

PV = (procesval + 26) ;
procesval = rotorvali [refléter [0] + 7] [pv] ;
Si (procesval > = 100) {procesval = procesval - 100;}
if(procesval < 0) {procesval = procesval + 26;} if(procesval > 25) {procesval = procesval - 26;}
Serial.Print (procesval) ; Serial.Print("") ;

PV = (procesval + (roue [2] [2] - wheel[2][1])) ;
if(PV < 0) {pv = pv + 26;}
procesval = rotorvali [roue [2] [0] -27] [pv] ;
Si (procesval > = 100) {procesval = procesval - 100;}
procesval = (procesval - (roue [2] [2] - wheel[2][1])) ;
if(procesval < 0) {procesval = procesval + 26;} if(procesval > 25) {procesval = procesval - 26;}
Serial.Print (procesval) ; Serial.Print("") ;

PV = (procesval + (roue [1] [2] - wheel[1][1])) ;
if(PV < 0) {pv = pv + 26;}
procesval = rotorvali [roue [1] [0] -27] [pv] ;
Si (procesval > = 100) {procesval = procesval - 100;}
procesval = (procesval - (roue [1] [2] - wheel[1][1])) ;
if(procesval < 0) {procesval = procesval + 26;} if(procesval > 25) {procesval = procesval - 26;}
Serial.Print (procesval) ; Serial.Print("") ;

PV = (procesval + (roue [0] [2] - wheel[0][1])) ;
if(PV < 0) {pv = pv + 26;}
procesval = rotorvali [roue [0] [0] -27] [pv] ;
Si (procesval > = 100) {procesval = procesval - 100;}
procesval = (procesval - (roue [0] [2] - wheel[0][1])) ;
if(procesval < 0) {procesval = procesval + 26;} if(procesval > 25) {procesval = procesval - 26;}

Serial.Print (procesval) ; Serial.Print("") ;

procesval = plugval [1] [procesval] ;

lampval = procesval ;
Serial.println(lampval) ;
dig2 = roue [2] [2] ;  dig3 = roue [1] [2] ; dig4 = roue [0] [2] ; dig1 = tenir compte [1] ;
lampita() ;
nixisend() ;
lampitb() ;
dig1 = 37 ; dig2 = 37 ; dig3 = 37 ; dig4 = 37 ;
digitalWrite (DEL5, faible) ;
}

Fonction d’assistance à la lumière de la clé appropriée
void lampita() {}
digitalWrite(lamparray[lampval][0],0) ;
digitalWrite(lamparray[lampval][1],0) ;
}
void lampitb() {}
digitalWrite(lamparray[lampval][0],1) ;
digitalWrite(lamparray[lampval][1],1) ;
}

Fonction d’aide pour illuminer « Nixes »
void nixisend() {}
sixteenSegWrite (0, dig1) ;
sixteenSegWrite (1, dig2) ;
sixteenSegWrite (2, dig3) ;
sixteenSegWrite (3, dig4) ;
}

void marquee() {}

temps = millis() ;
Si (mtime < temps) {}
mtime = temps + 400 ;
MDEX ++;}
dig1 = data [mdex] ;
dig2 = data [mdex + 1] ;
dig3 = data [mdex + 2] ;
dig4 = data [mdex + 3] ;
Si (mdex > = 31) {mdex = 0;}
nixisend() ;

}
Fonction qui transforme réellement sur chacun des 17 segments appropriés sur chaque « Nixie »
void sixteenSegWrite (int digits, caractère int) {}
digitalWrite(anode[digit],0) ;
pour (int index = 0; index < 17 ; index ++) {}
digitalWrite (segment [index], segmentvals[character][index]) ;
}
Delay(7) ;
pour (int index = 0; index < = 16 ; index ++) {}
digitalWrite (segment [index], 1) ;
}
digitalWrite (anode [chiffre], 1) ;
}

done() Sub {}
dig1 = 3 ; dig2 = 14 ; dig3 = 13 ; dig4 = 4 ;
nixisend() ;
dig1 = 37 ; dig2 = 37 ; dig3 = 37 ; dig4 = 37 ;
}

void indexwheels() {}
Serial.Print(rotorvals[Wheel[0][0]-27][Wheel[0][2]]) ;
Serial.Print("") ; Serial.Print(Wheel[0][0]-27) ; Serial.Print("") ; Serial.println(Wheel[0][2]) ;
Si (rotorvals [roue [0] [0] -27] [roue [0] [2]] > = 100) {windex1 = 1;}
roue [0] [2] ++ ; Si (roue [0] [2] > 25) {roue [0] [2] = 0;}
Windex = 0 ;
if(windex1 == 1) {}
Si (rotorvals [roue [1] [0] -27] [roue [1] [2]] > = 100) {windex2 = 1;}
roue [1] [2] ++ ; Si (roue [1] [2] > 25) {roue [1] [2] = 0;}}
windex1 = 0 ;
if(windex2 == 1) {}
roue [2] [2] ++ ; Si (roue [2] [2] > 25) {roue [2] [2] = 0;}
windex2 = 0 ; }
}

S’il y a suffisamment d’intérêt, nous prévoyons sur créez un PCB qui sera permettraient une Assemblée beaucoup plus facile de cette magnifique réplique de Enigma entièrement fonctionnelle. S’il vous plaît visitez http://www.stgeotronics.com pour connaître la disponibilité, prix & pour passer votre commande ou pré-commande maintenant. Les schémas de Circuit sont publiées, donc le PCB est entré dans sa phase de développement. Bientôt à tester.

Articles Liés

Faire votre propre règle à calcul

Faire votre propre règle à calcul

j'ai pensé à faire ma propre règle à calcul et finalement fait.  Ce Instructable est partiellement une description de comment j'ai fait il et partiellement une évaluation de l'effort.Étape 1 : En 2008 legionlabs membre Instructables a publié « Commen
Faire votre propre pièce personnalisée

Faire votre propre pièce personnalisée

Dans le cas où il n'apparaît pas un lien pour la vidéo : http://www.youtube.com/watch?v=jhASjoxSpkEAvez-vous déjà demandé si vous irait bien sur une pièce de monnaie ? C'est votre chance de découvrir !En gestation depuis votre propre pièce de monnaie
Faire votre propre Boombox

Faire votre propre Boombox

Dans ce projet, je vais vous montrer comment créer une Boombox qui se compose principalement d'un autoradio, haut-parleurs récupérés et deux batteries au plomb de 12V. Cette version améliorée est plus fort et plus léger que mon précédent Boombox et p
Comment faire votre propre toutou Octopus

Comment faire votre propre toutou Octopus

Vous avez toujours voulu avoir un ami céphalopode de votre propre sans avoir peur de mouiller partout sur l'endroit ou il s'échappant de votre poisson réservoir avec facilité ? Eh bien, maintenant vous pouvez ! Au sein de ce projet sont des étapes si
Comment faire votre propre pyramide balles de jonglage

Comment faire votre propre pyramide balles de jonglage

apprendre à faire votre propre pyramide jonglerie balles de tissu et de riz !Il est préférable d'utiliser du matériel Rideau ou quelque chose de force similaire qui ne s'effiloche facilement. Vous pouvez également faire preuve de créativité dans les
Faire votre propre diable ou elf caoutchouc latex oreilles

Faire votre propre diable ou elf caoutchouc latex oreilles

Bonjour à tousCette instructable vise à vous donner un aperçu de comment sculpter et monter un un ensemble d'oreilles au latex de caoutchouc portable à votre propre conception.Il y a beaucoup de techniques différentes pour faire des prothèses de l'or
Faire votre propre diadème de papier

Faire votre propre diadème de papier

faire votre propre diadème de papier. C'est très simple et vous prendra moins de 2 minutes.Étape 1: 1 feuille de papier Obtenir une feuille de papierÉtape 2: Pliez le papier Plier le style hamburger de papier et gardez-la pliée.Étape 3: Pliez le papi
Faire votre propre rasoir et rasage brosse Stand

Faire votre propre rasoir et rasage brosse Stand

cette instructable va vous montrer comment vous pouvez faire votre propre rasoir et rasage support de brosse à l'aide d'éléments qui sont probablement déjà dans votre maison.Outils requis :Paire de pinces (préférence quelque chose lourdes, comme une
Faire votre propre clé USB lecteur flash

Faire votre propre clé USB lecteur flash

C'est ennuyeux d'utiliser un lecteur flash USB normal ? Voici un exemple pour vous faire votre propre style clé USB.Ce dont vous avez besoin: 1 USB flash drive 2. petite poupée que vous voulez vraiment couper sa tête; pEtape 1: Démonter le lecteur fl
Faire votre propre soutien-gorge de bikini de noix de coco avec LEDs

Faire votre propre soutien-gorge de bikini de noix de coco avec LEDs

Vacances d'été est à venir et vous voulez un soutien-gorge de bikini, des matériaux entièrement naturels et respectueux de l'environnement, mais il est unique.Pour moins de $10 vous, aussi, pouvez faire votre propre soutien-gorge de noix de coco avec
Faire votre propre Arduino personnalisé compatible

Faire votre propre Arduino personnalisé compatible

j'aime Ardunio. J'aime les choses que les gens font avec eux et j'aime faire mes propres. En août dernier que j'ai publié une Instructable comment faire votre propre timbre-poste de taille compatible Arduino. Cet Instructable va vous montrer comment
Faire votre propre cirque de puces

Faire votre propre cirque de puces

faire votre propre cirque de puces miniatures.Cirque de puces ont été autour depuis l'époque victorienne fois lorsque les puces humaines réelles ont été utilisées pour effectuer des tours de cirque.  La puce serait exploitée avec un petit morceau de
Faire votre propre support de marteau

Faire votre propre support de marteau

En manipulant la forme d'un vieux cintre, vous pouvez faire votre propre porte-marteau que vous pouvez utiliser avec un tablier de clou ou une ceinture d'outil.
Faire votre propre 12 pouces Minecraft pioche d’or

Faire votre propre 12 pouces Minecraft pioche d’or

sa été demandé quelques fois maintenant que je fais un tutoriel vidéo sur comment faire votre propre pioche or Minecraft à l'aide de papercraft.Comme je l'ai dit avant que je ne suis pas très bon à des vidéos YouTube, mais je lui ai donné une bonne d