Étape 8: Plus de logiciels !
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.