Maak uw eigen Enigma Replica (8 / 11 stap)

Stap 8: Meer Software!


Zodat we een functie voor elke modus de Enigma werkt in voor het eerst gemaakt:
In de modus 0, standaard wijze, is de Enigma niets anders dan een simpele typemachine met een selectiekader waarin een typenummer.
Modus 1 kan de gebruiker selecteren de 3 (uit 8) rotoren die hij samen met welke een (van de 2 gebruiken zal) Reflector hij wil gebruiken.
In modus 2, kan de gebruiker de interne positie van elke Rotor selecteren.
Modus 3 wordt gebruikt om op te geven voor de beginpositie van de (externe) van elke Rotor.
Een gebruiker kan invoeren Mode 4, maximaal 10 Swapped letterparen.
Modus 5 modus wordt uitgevoerd, en op dat moment de Enigma zal coderen of decoderen van elke letter die wordt getypt op het toetsenbord.

Hier is de Complete schets die de hele Enigma loopt:

/ * S & T GeoTronics Enigma Code. Deze aangepaste schild van Arduino Mega is geprogrammeerd om te repliceren
precies het gedrag van een echte Duitse M4 Enigma machine.
Het maakt gebruik van 4 16-Segment eenheden, 5 LEDs, 26 lampen setup als toetsenbord, 26 toetsenbord knoppen
& 10 functietoetsen. De 115 light emitting diodes zijn charlie-plexed tot een minimum beperken de
hoeveelheid pennen nodig tot 38 en alle 36 drukknoppen sleutels zijn delen van een totaal van 4 pins.
Ontworpen, gemonteerd & geprogrammeerd door Marc Tessier & James Sanderson 9/20/13
*/
De variabelen definiëren
niet-ondertekende lang = millis();
unsigned long otime = tijd;
int inpin [4] = {A0, A1, A2, A3};
int inval [4] = {0, 0, 0, 0};
int keyval = 100;
Booleaanse windex = 0;
Boole windex1 = 0;
Boole windex2 = 0;
int lampval = 100;
int procesval = 0;
int procesvala = 0;
int modus = 0;
niet-ondertekende lange mtime;
int mdex = 0;

Definiëren van elk teken Nixie
int dig1 = 37;
int dig2 = 37;
int dig3 = 37;
int dig4 = 37;

int gegevens [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};

De 16-segmenten pinnen als 2 matrices definiëren
int segment [17] = {24,22,25,31,38,36,32,30,28,26,23,27,33,35,34,29,37}; kathode matrix
int anode [4] = {39,41,43,45}; annode matrix commin annode

De 26 lampen definiëren als een 2D-matrix
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}};

Definiëren van de 12 Lamp pinnen voor initialisatie
int lamppin [12] = {2,3,4,5,6,7,8,9,10,11,12,13}; 2 tot 10 kathode, 11 tot en met 13 gemeenschappelijke annode

Definiëren van elke LTP587P segmenten: A, B, C, D, E, F, G, H, K, M, N, P, R, S, T, U, dp
Booleaanse segmentvals [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}, / / = ik 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}, / / = Y 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}, / / = ruimte 36
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, / / = volledige verlichte 37
{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 segmenten: A, B, C, D, E, F, G, H, K, M, N, P, R, S, T, U, dp

Definiëren van de 5 modus LEDs
int led1 = 40;
int led2 = 42;
int led3 = 44;
int led4 = 46;
int led5 = 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
De waarden van de rotor A B C D E F G H I J K L M N O P Q definiëren
statische 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} / / 1 wiel

{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} / / 2 wiel

{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} / / 3 wiel

{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,
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,
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}, / / 4 wiel

{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}, / / wiel 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} / / wiel 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} / / wiel 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} / / wiel 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
};


statische 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 ik
//
{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 ik

{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 ik


{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 ik

{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 ik

{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 ik

{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 ik

{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 ik

{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 ik

{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 ik


Een 2D-matrix definiëren voor het bijhouden van de locaties van de wiel & standpunten
int wiel [3] [3] = {{26,0,0} {26,0,0}, {26,0,0}};
int weerspiegelen [2] = {1,0};

Definieer Array voor plugbord waarden 25 x2 positie 0 wachtruimten gebruiken positie 1 houdt waarde int plugu houdt de totale nomber van stekkers gebruikt (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 {}
Initialiseren van alle 38 LED-pinnen als uitgang
voor (int index = 0; index < = 11; index ++) {}
pinMode (lamppin [index], OUTPUT);
digitalWrite(lamppin[index],1);
}
voor (int index = 0; index < = 3; index ++) {}
pinMode (anode [index], OUTPUT);
digitalWrite (anode [index], 1);
}
voor (int index = 0; index < = 16; index ++) {}
pinMode (segment [index], uitvoer);
digitalWrite (segment [index], 1);
}
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
pinMode(led4,OUTPUT);
pinMode(led5,OUTPUT);

Serial.begin(9600);
Initialiseren van alle 4 pusbutton-pinnen als Input
voor (int index = 0; index < = 3; index ++) {}
pinMode (inpin [index], INPUT);
}

}

void loop {}
Toetsenbord ontdendering & test voor nieuwe toets ingedrukt
tijd = millis();
Als (tijd > otime + 500) {keyval = readkbde();}
Als ((keyval == 45) & & (windex == 1)) {modeselect();}
De hele operatie van Enigma machine draait waarrond werkingsmodus actueel is
if(mode == 0) {mode0();}
anders if(mode == 1) {mode1();}
anders if(mode == 2) {mode2();}
anders if(mode == 3) {mode3();}
anders if(mode == 4) {mode4();}
anders if(mode == 5) {mode5();}
else {}

Serial.println(keyval); voor debugging keybord waarde op seriële monitor drukt / / voor run of del

}

Deze functie ervoor zorgt dat uitzoeken welke toets is ingedrukt en geeft als resultaat een uniek geheel getal
int readkbde() {}
int kval = 100;
voor (int index = 0; index < = 3; index ++) {inval [index] = analogRead(inpin[index]);   } //Reads analoge ingang waarden
Als ((inval [0] > 925) & & (inval [1] > 828) & & (inval [2] > 730) & & (inval [3] > 828)) {kval = 100;} / / geen toets
anders als ((inval [0] < 924) & & (inval [0] > 915)) {kval = 49;} //up pijl 4
anders als ((inval [0] < 914) & & (inval [0] > 903)) {kval = 48;} //up pijl 3
anders als ((inval [0] < 902) & & (inval [0] > 887)) {kval = 47;} //up pijl 2
anders als ((inval [0] < 886) & & (inval [0] > 865)) {kval = 46;} //up pijl 1
anders als ((inval [0] < 864) & & (inval [0] > 836)) {kval = 45;} //mode
anders als ((inval [0] < 834) & & (inval [0] > 793)) {kval = 44;} //enter
anders als ((inval [0] < 792) & & (inval [0] > 724)) {kval = 43;}
anders als ((inval [0] < 723) & & (inval [0] > 594)) {kval = 42;}
anders als ((inval [0] < 593) & & (inval [0] > 260)) {kval = 41;}
anders als (inval [0] < 259) {kval = 40;}
anders als ((inval [1] < 827) & & (inval [1] > 807)) {kval = 14;}
anders als ((inval [1] < 806) & & (inval [1] > 781)) {kval = 8;}
anders als ((inval [1] < 780) & & (inval [1] > 749)) {kval = 20;}
anders als ((inval [1] < 748) & & (inval [1] > 706)) {kval = 25;}
anders als ((inval [1] < 705) & & (inval [1] > 647)) {kval = 19;}
anders als ((inval [1] < 646) & & (inval [1] > 555)) {kval = 17;}
anders als ((inval [1] < 554) & & (inval [1] > 418)) {kval = 4;}
anders als ((inval [1] < 417) & & (inval [1] > 169)) {kval = 22;}
anders als (inval [1] < 168) {kval = 16;}
anders als ((inval [2] < 729) & & (inval [2] > 699)) {kval = 10;}
anders als ((inval [2] < 698) & & (inval [2] > 660)) {kval = 9;}
anders als ((inval [2] < 659) & & (inval [2] > 611)) {kval = 7;}
anders als ((inval [2] < 610) & & (inval [2] > 547)) {kval = 6;}
anders als ((inval [2] < 546) & & (inval [2] > 455)) {kval = 5;}
anders als ((inval [2] < 454) & & (inval [2] > 331)) {kval = 3;}
anders als ((inval [2] < 330) & & (inval [2] > 127)) {kval = 18;}
anders als (inval [2] < 126) {kval = 0;}
anders als ((inval [3] < 827) & & (inval [3] > 807)) {kval = 11;}
anders als ((inval [3] < 806) & & (inval [3] > 781)) {kval = 12;}
anders als ((inval [3] < 780) & & (inval [3] > 749)) {kval = 13;}
anders als ((inval [3] < 748) & & (inval [3] > 706)) {kval = 1;}
anders als ((inval [3] < 705) & & (inval [3] > 647)) {kval = 21;}
anders als ((inval [3] < 646) & & (inval [3] > 555)) {kval = 2;}
anders als ((inval [3] < 554) & & (inval [3] > 418)) {kval = 23;}
anders als ((inval [3] < 417) & & (inval [3] > 169)) {kval = 24;}
anders als (inval [3] < 169) {kval = 15;}
else {kval = 100;}
if(kval < 99) {otime = millis();}              Start belangrijke ontdendering timer
Als ((kval > = 0) & & (kval < = 99)) {windex = 1;}  Windex tonen waar (1) geeft aan de terugkeer van een verse sleutel beroerte
Return kval;
}

Functie voor het wijzigen van de bedrijfsmodus
ongeldig modeselect() {}
modus ++;
Als (modus > = 6) {modus = 0;}
Windex = 0;
}

Standaardmodus: Enigma is een typemachine
ongeldig mode0() {}
Als ((keyval > = 0) & & (keyval < = 25)) {lampval = keyval;}
lampita();
Marquee();
lampitb();
}

Schakel van de Rotors & de Reflector
ongeldig mode1() {}
int index;
digitalWrite (led1, hoge);
if(Windex == 1) {als ((keyval == 43) || (keyval == 46)) {[0] weerspiegelen ++; als ([0] weerspiegelen > 2) {weerspiegelen [0] = 1;}  Windex = 0 ;}}
if(Windex == 1) {if(keyval == 47) {voor (index = wiel [2] [0]; (index == wheel[1][0]) || (index == wheel[0][0]) || (index == wheel[2][0]);
index ++) {if(index > 33) {index = 26;}} wiel [2] [0] = index;  Windex = 0 ;}}
if(Windex == 1) {if(keyval == 48) {voor (index = wiel [1] [0]; (index == wheel[2][0]) || (index == wheel[0][0]) || (index == wheel[1][0]);
index ++) {if(index > 33) {index = 26;}} wiel [1] [0] = index;  Windex = 0 ;}}
if(Windex == 1) {if(keyval == 49) {voor (index = wiel [0] [0]; (index == wheel[2][0]) || (index == wheel[1][0]) || (index == wheel[0][0]);
index ++) {if(index > 33) {index = 26;}} wiel [0] [0] = index;  Windex = 0 ;}}
if(Windex == 1) {if(keyval == 42) {voor (index = wiel [2] [0]; (index == wheel[1][0]) || (index == wheel[0][0]) || (index == wheel[2][0]);
index--) {if(index < 28) {index = 35;}} wiel [2] [0] = index;  Windex = 0 ;}}
if(Windex == 1) {if(keyval == 41) {voor (index = wiel [1] [0]; (index == wheel[2][0]) || (index == wheel[0][0]) || (index == wheel[1][0]);
index--) {if(index < 28) {index = 35;}} wiel [1] [0] = index;  Windex = 0 ;}}
if(Windex == 1) {if(keyval == 40) {voor (index = wiel [0] [0]; (index == wheel[2][0]) || (index == wheel[1][0]) || (index == wheel[0][0]);
index--) {if(index < 28) {index = 35;}} wiel [0] [0] = index;  Windex = 0 ;}}
Dig2 = wiel [2] [0];  Dig3 = wiel [1] [0]; Dig4 = wiel [0] [0]; Dig1 = weerspiegelen [0];
nixisend();
Dig1 = 37; Dig2 = 37; Dig3 = 37; Dig4 = 37;
digitalWrite (led1, laag);
}

Positie de innerlijke instelling van elke Rotor
ongeldig mode2() {}
digitalWrite (led2, hoge);
if(Windex == 1) {}
if(keyval == 47) {[2] [1] wiel ++; als (wiel [2] [1] > 25) {wiel [2] [1] = 0 ;}}
if(keyval == 48) {wiel [1] [1] ++; als (wiel [1] [1] > 25) {wiel [1] [1] = 0 ;}}
if(keyval == 49) {[0] [1] wiel ++; als (wiel [0] [1] > 25) {wiel [0] [1] = 0 ;}}
if(keyval == 42) {[2] [1]--wiel; als (wiel [2] [1] < 0) {wiel [2] [1] = 25 ;}}
if(keyval == 41) {wiel [1] [1]--; als (wiel [1] [1] < 0) {wiel [1] [1] = 25 ;}}
if(keyval == 40) {[0] [1]--wiel; als (wiel [0] [1] < 0) {wiel [0] [1] = 25 ;}}
Windex = 0; }

Dig2 = wiel [2] [1];  Dig3 = wiel [1] [1]; Dig4 = wiel [0] [1]; Dig1 = 0;
nixisend();
Dig1 = 37; Dig2 = 37; Dig3 = 37; Dig4 = 37;
digitalWrite (led2, laag);
}

Positie van het teken van de Start van elk wiel
ongeldig mode3() {}
digitalWrite (led3, hoge);
if(Windex == 1) {}
if(keyval == 46) {[1] weerspiegelen ++; als (weerspiegelen [1] > 25) {weerspiegelen [1] = 0 ;}}
if(keyval == 47) {[2] [2] wiel ++; als (wiel [2] [2] > 25) {wiel [2] [2] = 0 ;}}
if(keyval == 48) {wiel [1] [2] ++; als (wiel [1] [2] > 25) {wiel [1] [2] = 0 ;}}
if(keyval == 49) {[0] [2] wiel ++; als (wiel [0] [2] > 25) {wiel [0] [2] = 0 ;}}
if(keyval == 43) {[1]--weerspiegelen; als (weerspiegelen [1] < 0) {weerspiegelen [1] = 25 ;}}
if(keyval == 42) {[2] [2]--wiel; als (wiel [2] [2] < 0) {wiel [2] [2] = 25 ;}}
if(keyval == 41) {wiel [1] [2]--; als (wiel [1] [2] < 0) {wiel [1] [2] = 25 ;}}
if(keyval == 40) {[0] [2]--wiel; als (wiel [0] [2] < 0) {wiel [0] [2] = 25 ;}}
Windex = 0; }

Dig2 = wiel [2] [2];  Dig3 = wiel [1] [2]; Dig4 = wiel [0] [2]; Dig1 = weerspiegelen [1];
nixisend();
Dig1 = 37; Dig2 = 37; Dig3 = 37; Dig4 = 37;
digitalWrite (led3, laag);
}

Definiëren van de Enigma-paren
ongeldig mode4() {}
int index = 0;
digitalWrite (led4, hoge);
Als (pluguse < = 9) {}
Als (plugval [0] [paindex] == 1) {voor (index = paindex;(index == paindex) || (index == pbindex) || (plugval [0] [index] == 1); index ++) {if(index > 24) {index -1 ;}} = paindex = index;}
Als (plugval [0] [pbindex] == 1) {voor (index = pbindex;(index == pbindex) || (index == paindex) || (plugval [0] [index] == 1); index ++) {if(index > 24) {index -1 ;}} = pbindex = index;}
if(Windex == 1) {}
if(keyval == 46) {voor (index = paindex;(index == paindex) || (index == pbindex) || (plugval [0] [index] == 1); index ++) {if(index > 24) {index -1 ;}} = paindex = index; Windex = 0; }
if(keyval == 43) {voor (index = paindex;(index == paindex) || (index == pbindex) || (plugval [0] [index] == 1); index--) {if(index < 1) {index 26 ;}} = paindex = index; Windex = 0;  }
if(keyval == 49) {voor (index = pbindex;(index == pbindex) || (index == paindex) || (plugval [0] [index] == 1); index ++) {if(index > 24) {index -1 ;}} = pbindex = index; Windex = 0; }
if(keyval == 40) {voor (index = pbindex;(index == pbindex) || (index == 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, laag);
}

Dit is de normale werkingsmodus te coderen/decoderen
ongeldig mode5() {}
int pv = 0;
digitalWrite (led5, hoge);

Als ((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 + (wiel [0] [2] - wheel[0][1]));
if(PV < 0) {pv = pv + 26;}
procesval = rotorvals [wiel [0] [0]-27] [pv];
Als (procesval > = 100) {procesval = procesval - 100;}
procesval = (procesval - (wiel [0] [2] - wheel[0][1]));
if(procesval < 0) {procesval = procesval + 26;} if(procesval > 25) {procesval = procesval - 26;}
Serial.Print (procesval); Serial.Print("");

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

PV = (procesval + (wiel [2] [2] - wheel[2][1]));
if(PV < 0) {pv = pv + 26;}
procesval = rotorvals [wiel [2] [0]-27] [pv];
Als (procesval > = 100) {procesval = procesval - 100;}
procesval = (procesval - (wiel [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 [weerspiegelen [0] + 7] [pv];
Als (procesval > = 100) {procesval = procesval - 100;}
if(procesval < 0) {procesval = procesval + 26;} if(procesval > 25) {procesval = procesval - 26;}
Serial.Print (procesval); Serial.Print("");

procesval = rotorvals [weerspiegelen [0] + 9] [procesval];
Serial.Print (procesval); Serial.Print("");

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

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

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

PV = (procesval + (wiel [0] [2] - wheel[0][1]));
if(PV < 0) {pv = pv + 26;}
procesval = rotorvali [wiel [0] [0]-27] [pv];
Als (procesval > = 100) {procesval = procesval - 100;}
procesval = (procesval - (wiel [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 = wiel [2] [2];  Dig3 = wiel [1] [2]; Dig4 = wiel [0] [2]; Dig1 = weerspiegelen [1];
lampita();
nixisend();
lampitb();
Dig1 = 37; Dig2 = 37; Dig3 = 37; Dig4 = 37;
digitalWrite (led5, laag);
}

Helper functie aan het licht van de juiste sleutel
ongeldig lampita() {}
digitalWrite(lamparray[lampval][0],0);
digitalWrite(lamparray[lampval][1],0);
}
ongeldig lampitb() {}
digitalWrite(lamparray[lampval][0],1);
digitalWrite(lamparray[lampval][1],1);
}

Help-functie voor het verlichten van de "Nixies"
ongeldig nixisend() {}
sixteenSegWrite (0, dig1);
sixteenSegWrite (1, dig2);
sixteenSegWrite (2, dig3);
sixteenSegWrite (3, dig4);
}

ongeldig marquee() {}

tijd = millis();
Als (mtime < tijd) {}
Mtime影视搜索 = tijd + 400;
mdex ++;}
Dig1 = data [mdex];
Dig2 = data [mdex + 1];
Dig3 = data [mdex + 2];
Dig4 = data [mdex + 3];
Als (mdex > = 31) {mdex = 0;}
nixisend();

}
Functie die eigenlijk op elk van de 17 passende segmenten op elke "Nixie draait"
VOID sixteenSegWrite (int cijfer, int karakter) {}
digitalWrite(anode[digit],0);
voor (int index = 0; index < 17; index ++) {}
digitalWrite (segment [index], segmentvals[character][index]);
}
delay(7);
voor (int index = 0; index < = 16; index ++) {}
digitalWrite (segment [index], 1);
}
digitalWrite (anode [cijfer] 1);
}

ongeldig done() {}
Dig1 = 3; Dig2 = 14; Dig3 = 13; Dig4 = 4;
nixisend();
Dig1 = 37; Dig2 = 37; Dig3 = 37; Dig4 = 37;
}

ongeldig 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]);
Als (rotorvals [wiel [0] [0]-27] [wiel [0] [2]] > = 100) {windex1 = 1;}
wiel [0] [2] ++; Als (wiel [0] [2] > 25) {wiel [0] [2] = 0;}
Windex = 0;
if(windex1 == 1) {}
Als (rotorvals [wiel [1] [0]-27] [wiel [1] [2]] > = 100) {windex2 = 1;}
wiel [1] [2] ++; Als (wiel [1] [2] > 25) {wiel [1] [2] = 0 ;}}
windex1 = 0;
if(windex2 == 1) {}
[2] [2] wiel ++; Als (wiel [2] [2] > 25) {wiel [2] [2] = 0;}
windex2 = 0; }
}

Als er genoeg belangstelling voor is, zijn we van plan op een PCB waarmee zou voor een veel gemakkelijker montage van deze prachtige volledig functionele Enigma replica maakt. Bezoek http://www.stgeotronics.com om te weten te komen over beschikbaarheid, prijzen & te plaatsen van uw bestelling of pre-order nu. Het Circuit schema's zijn gepubliceerd, zodat de PCB zijn ontwikkelingsfase is ingegaan. Binnenkort te worden getest.

Gerelateerde Artikelen

Maak uw eigen slijtage overal "barefoot" schoenen

Maak uw eigen slijtage overal "barefoot" schoenen

* Opmerking! De volgende afbeeldingen zijn gemaakt met behulp van Model magie om het model van het voltooide project. Sugru zou worden sterker, soepeler toepassen en ziet er veel mooier! Model magie doet niet zeer goed glad en daarom zijn er vele hob
Hoe maak je eigen plaatsvervanger Sugru

Hoe maak je eigen plaatsvervanger Sugru

ik noem het Oogoo, een goedkope silicone klei die is gemakkelijk gemaakt. Het kan worden gebruikt als een uitstekende vervanger voor Sugru. Kan het hand gegoten of gegoten in vormen. Of, het kan worden gebruikt als een siliconen gieten. Het kan worde
Maak je eigen Iron acetaat/Homemade vlek

Maak je eigen Iron acetaat/Homemade vlek

Een voordelige en eenvoudige manier om veel verschillende soorten hout kleurt.Stap 1: Een zeer kosten effectieve manier om uw eigen vlekDe meeste materialen die ik gebruikte, zijn huishoudelijke artikelen.Artikelen gekocht:1. staalwol = $1,002. azijn
Maak uw eigen houten C-klem! | DIY houtbewerking Tools #2

Maak uw eigen houten C-klem! | DIY houtbewerking Tools #2

C-klemmen zijn zo duur! Zag je dat prijskaartje laatste keer dat u in de winkel was?Ik heb niet een heel groot budget voor projecten, zodat ik de meeste van mijn instrumenten maken. Thats waarom ik ben gaan om u te tonen hoe maak je een perfecte hout
Maak uw eigen bakpoeder (glutenvrij)!

Maak uw eigen bakpoeder (glutenvrij)!

Bakpoeder (发粉; 泡打粉) is een belangrijk ingrediënt in vele bakken recepten. Als je hebt uitgeput van bakpoeder, zijn er een paar eenvoudige substituten voor u.De eenvoudigste manier is: Maak uw eigen bakpoeder door gebruik te maken van 2 gemeenschappel
Maak je eigen echte zwaard!

Maak je eigen echte zwaard!

Ooit wilde fruit ninja? Nu u kunt! Maak uw eigen zwaard dat kan snijd door iets in haar pad.Dit was een leuk project en moet een paar vaardigheden in praktijk gebracht.Bekijk een video over hoe zijn gemaakt hierStap 1: Het hele punt... Pak een potloo
Maak uw eigen Tablet weven kaarten

Maak uw eigen Tablet weven kaarten

Maak uw eigen Tablet PC kaarten uit gewone speelkaarten weven!Tablet weven (ook wel kaart weven genoemd) is een oude soort weven die tabletten gebruikt voor het maken van lange smalle stroken stof die zeer sterk.  Vermoedelijk kunststof tabletten kun
Maak uw eigen klei-sculpting lus tools-herziene versie (bijgewerkte 7 Sept 09)

Maak uw eigen klei-sculpting lus tools-herziene versie (bijgewerkte 7 Sept 09)

beeldhouwen instrumenten zijn essentiële kit voor beeldhouwen in klei of olie gebaseerde kleien zoals plasteline (een hoogwaardige plasticine), wax of chavant.Meestal zijn er twee belangrijkste soorten beeldhouwen tools-de stok-achtige verscheidenhei
Maak uw eigen draaibank van andere volkeren vuilnis

Maak uw eigen draaibank van andere volkeren vuilnis

het doel van dit instructable is te maken van een hout-draaibank uit gerecycleerd en restanten van materialen en gebruik deze om enkele mooie dingen te maken.Waarom een draaibank? U kunt het gebruiken om mooie verjaardag en kerst pressies voor famili
Maak uw eigen pallet!

Maak uw eigen pallet!

Dus wil je dat crafty pallet-project die u zag op Pinterest, maar je gewoon niet hebben toegang tot alle paletten.Wat is een persoon om te doen?Maak je eigen!Volg deze eenvoudige stappen om uw eigen zelfgemaakte pallet, en u zult klaar zijn om uw eig
Maak uw eigen professionele record reinigen machine voor minder dan $80 en Bespaar tot $3000 en meer.

Maak uw eigen professionele record reinigen machine voor minder dan $80 en Bespaar tot $3000 en meer.

Excuus voor mijn Engels.Nadat ik terug naar het geluid van de goede oude vinyl vond dat ik had het probleem elke record liefhebber heeft. Hoe schoon de records correct!?Er zijn vele manieren rond op het Internet. Goedkopere manieren willen de Knosti
Hoe te: Maak uw eigen mosterd!

Hoe te: Maak uw eigen mosterd!

Mosterd thuis maken is niet zo moeilijk als je - in feite, met minder dan een half uur werkelijke hoeveelheid werk denkt, kunt u mosterd!Het slechtste deel is het wachten - u kan niet de mosterd eten meteen, en het is het beste te wachten een paar da
Maak uw eigen avontuur spel (HTML)

Maak uw eigen avontuur spel (HTML)

dit is een zeer zeer zeer fundamentele gebruik van HTML programmering een maken uw eigen om avonturenspel te maken. Ik ben niet super knowledgable in HTML. Als u dit zien en proberen en wilt rundvlees uw spel om het te maken meer visueel geweldig vin
Maak je eigen Super Mario spel

Maak je eigen Super Mario spel

dit Instructable leert de basisprincipes van kras, een eenvoudige en makkelijk te gebruiken ontwerpprogramma en hoe maak je een Super Mario spel gebruiken.Kras is één van de beste programma's voor beginnende ontwerpers en het spijt me voor alle mense