Gör din egen Enigma replika (8 / 11 steg)

Steg 8: Mer programvara!




Så vi skapade först en funktion för varje steg enigmaen fungerar i:
I läge 0, Standardfunktionsläge, är gåtan ingenting annat än en enkel skrivmaskin med en markeringsram som visar dess modellnummer.
Läge 1 ger användaren möjlighet att välja 3 (av 8) rotorer han kommer att använda tillsammans med som en (av 2) reflektor han vill använda.
I läge 2, kan användaren välja inre positionen för varje Rotor.
Läge 3 används för att ange startpositionen (externt) för varje Rotor.
I läge 4, kan en användare ange upp till 10 Swapped bokstavspar.
Läge 5 drivs läge och på den punkten, gåtan kommer att kryptera eller dekryptera en bokstav skrivs på tangentbordet.

Här är komplett skissen som kör hela gåtan:

/ * S & T GeoTronics Enigma kod. Denna Arduino Mega anpassade sköld är programmerad att replikera
exakt hur en sant tyska M4 Enigma-maskin.
Den använder 4 16-segmentet enheter, 5 lysdioder, 26 lampor setup som tangentbord, 26 tangentbord knappar
& 10 funktionstangenter. De 115 light emitting dioder är charlie-plexed att minimera den
mängd stiften behövs ner till 38 och alla 36 tryckknappar nycklar delar totalt 4 stift.
Utformade, monteras och programmerad av Marc Tessier & James Sanderson 9/20/13
*/
Definiera variablerna
osignerade långa tid = millis();
osignerade långa otime = tid;
int inpin [4] = {A0, A1, A2, A3};
int inval [4] = {0, 0, 0, 0};
int keyval = 100;
booleska windex = 0;
booleska windex1 = 0;
booleska windex2 = 0;
int lampval = 100;
int procesval = 0;
int procesvala = 0;
int läge = 0;
osignerade långa mtime;
int mdex = 0;

Definiera varje Nixie tecken
int dig1 = 37.
int dig2 = 37.
int dig3 = 37.
int dig4 = 37.

int data [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}.

Definiera 16-segmenten stiften som 2 matriser
int segmentet [17] = {24,22,25,31,38,36,32,30,28,26,23,27,33,35,34,29,37}. katod array
int anod [4] = {39,41,43,45}. annode array commin annode

Definiera 26 lyktorna som ett 2D Array
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}};

Definiera 12 lampa stiften initiering
int lamppin [12] = {2,3,4,5,6,7,8,9,10,11,12,13}. 2 till 10 katod, 11 till 13 gemensamma annode

Definiera varje LTP587P segment: A, B, C, D, E, F, G, H, K, M, N, P, R, S, T, U, dp
booleska 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}, / / = jag 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}, / / = utrymme 36
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, / / = fullt upplysta 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 segment: A, B, C, D, E, F, G, H, K, M, N, P, R, S, T, U, dp

Definiera de 5 lysdioderna läge
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
Definiera rotor värden A B C D E F G H I J K L M N O P Q
statisk 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}, / / hjul 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}, / / hjul 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}, / / hjul 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,
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}, / / hjul 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}, / / hjul 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}, / / hjul 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}, / / hjul 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}, / / hjul 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
};

statisk 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 jag
//
{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 jag

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

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

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

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

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

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

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

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

Definiera en 2D Array för att hålla hjulet platser & positioner
int hjul [3] [3] = {{26,0,0}, {26,0,0}, {26,0,0}};
int återspeglar [2] = {1,0}.

Definiera matris för plugbord värden 25 x2 position 0 innehar använda position 1 håller värdet int plugu innehar den totala nomber av pluggar används (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() {
Initiera alla 38 LED stift som utdata
för (heltal index = 0; index < = 11; index ++) {
pinMode (lamppin [index], produktionen);
digitalWrite(lamppin[index],1);
}
för (heltal index = 0; index < = 3; index ++) {
pinMode (anoden [index], produktionen);
digitalWrite (anoden [index], 1);
}
för (heltal index = 0; index < = 16; index ++) {
pinMode (segment [index], OUTPUT);
digitalWrite (segment [index], 1);
}
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
pinMode(led4,OUTPUT);
pinMode(led5,OUTPUT);

Serial.BEGIN(9600);
Initiera alla 4 pusbutton stift som indata
för (heltal index = 0; index < = 3; index ++) {
pinMode (inpin [index], ingång);
}

}

void loop() {
Tangentbord debounce & test för nya nedtryckt
tid = millis();
om (tid > otime + 500) {keyval = readkbde();}
om ((keyval == 45) & & (windex == 1)) {modeselect();}
Hela Enigma machine verksamheten kretsar kring vilket driftsläge är aktuell
IF(mode == 0) {mode0();}
annat if(mode == 1) {mode1();}
annat if(mode == 2) {mode2();}
annat if(mode == 3) {mode3();}
annat if(mode == 4) {mode4();}
annat if(mode == 5) {mode5();}
annat {}

Serial.println(keyval); för debuging utskrifter keybord värde till seriell monitor / / för köra eller del

}

Denna funktion hand tar om räkna ut vilken tangent har tryckts & returnerar ett unikt heltal
int readkbde() {
int kval = 100;
för (heltal index = 0; index < = 3; index ++) {inval [index] = analogRead(inpin[index]);} //Reads analog ingång värden
om ((inval [0] > 925) & & (inval [1] > 828) & & (inval [2] > 730) & & (inval [3] > 828)) {kval = 100;} / / ingen nyckel tryck
annars om ((inval [0] < 924) & & (inval [0] > 915)) {kval = 49;} //up pil 4
annars om ((inval [0] < 914) & & (inval [0] > 903)) {kval = 48.} //up arrow 3
annars om ((inval [0] < 902) & & (inval [0] > 887)) {kval = 47;} //up pil 2
annars om ((inval [0] < 886) & & (inval [0] > 865)) {kval = 46;} //up pil 1
annars om ((inval [0] < 864) & & (inval [0] > 836)) {kval = 45;} //mode
annars om ((inval [0] < 834) & & (inval [0] > 793)) {kval = 44;} //enter
annars om ((inval [0] < 792) & & (inval [0] > 724)) {kval = 43;}
annars om ((inval [0] < 723) & & (inval [0] > 594)) {kval = 42.}
annars om ((inval [0] < 593) & & (inval [0] > 260)) {kval = 41;}
annars om (inval [0] < 259) {kval = 40;}
annars om ((inval [1] < 827) & & (inval [1] > 807)) {kval = 14.}
annars om ((inval [1] < 806) & & (inval [1] > 781)) {kval = 8.}
annars om ((inval [1] < 780) & & (inval [1] > 749)) {kval = 20;}
annars om ((inval [1] < 748) & & (inval [1] > 706)) {kval = 25;}
annars om ((inval [1] < 705) & & (inval [1] > 647)) {kval = 19.}
annars om ((inval [1] < 646) & & (inval [1] > 555)) {kval = 17;}
annars om ((inval [1] < 554) & & (inval [1] > 418)) {kval = 4;}
annars om ((inval [1] < 417) & & (inval [1] > 169)) {kval = 22.}
annars om (inval [1] < 168) {kval = 16.}
annars om ((inval [2] < 729) & & (inval [2] > 699)) {kval = 10.}
annars om ((inval [2] < 698) & & (inval [2] > 660)) {kval = 9.}
annars om ((inval [2] < 659) & & (inval [2] > 611)) {kval = 7.}
annars om ((inval [2] < 610) & & (inval [2] > 547)) {kval = 6;}
annars om ((inval [2] < 546) & & (inval [2] > 455)) {kval = 5.}
annars om ((inval [2] < 454) & & (inval [2] > 331)) {kval = 3;}
annars om ((inval [2] < 330) & & (inval [2] > 127)) {kval = 18;}
annars om (inval [2] < 126) {kval = 0;}
annars om ((inval [3] < 827) & & (inval [3] > 807)) {kval = 11.}
annars om ((inval [3] < 806) & & (inval [3] > 781)) {kval = 12.}
annars om ((inval [3] < 780) & & (inval [3] > 749)) {kval = 13.}
annars om ((inval [3] < 748) & & (inval [3] > 706)) {kval = 1;}
annars om ((inval [3] < 705) & & (inval [3] > 647)) {kval = 21.}
annars om ((inval [3] < 646) & & (inval [3] > 555)) {kval = 2;}
annars om ((inval [3] < 554) & & (inval [3] > 418)) {kval = 23.}
annars om ((inval [3] < 417) & & (inval [3] > 169)) {kval = 24.}
annars om (inval [3] < 169) {kval = 15;}
annat {kval = 100;}
IF(kval < 99) {otime = millis();} //Starts nyckel debounce timer
om ((kval > = 0) & & (kval < = 99)) {windex = 1;} //windex visar sant (1) anger återlämnande av en ny nyckel stroke
returnera kval;
}

Funktion för att ändra driftsläge
void modeselect() {
läge ++;
om (läge > = 6) {läge = 0;}
Windex = 0;
}

Standardläget: Enigma är en skrivmaskin
void mode0() {
om ((keyval > = 0) & & (keyval < = 25)) {lampval = keyval;}
lampita();
Marquee();
lampitb();
}

Välj rotorerna & reflektorn
void mode1() {
heltal index;
digitalWrite (led1, hög);
IF(Windex == 1) {om ((keyval == 43) || (keyval == 46)) {återspeglar [0] ++; om (avspegla [0] > 2) {återspeglar [0] = 1;} windex = 0 ;}}
IF(Windex == 1) {if(keyval == 47) {för (index = wheel [2] [0]; (index == wheel[1][0]) || (index == wheel[0][0]) || (index == wheel[2][0]);
index ++) {if(index > 33) {index = 26;}} hjulet [2] [0] = index. Windex = 0 ;}}
IF(Windex == 1) {if(keyval == 48) {för (index = wheel [1] [0]; (index == wheel[2][0]) || (index == wheel[0][0]) || (index == wheel[1][0]);
index ++) {if(index > 33) {index = 26;}} hjulet [1] [0] = index. Windex = 0 ;}}
IF(Windex == 1) {if(keyval == 49) {för (index = wheel [0] [0]; (index == wheel[2][0]) || (index == wheel[1][0]) || (index == wheel[0][0]);
index ++) {if(index > 33) {index = 26;}} hjulet [0] [0] = index. Windex = 0 ;}}
IF(Windex == 1) {if(keyval == 42) {för (index = wheel [2] [0]; (index == wheel[1][0]) || (index == wheel[0][0]) || (index == wheel[2][0]);
index--) {if(index < 28) {index = 35;}} hjulet [2] [0] = index. Windex = 0 ;}}
IF(Windex == 1) {if(keyval == 41) {för (index = wheel [1] [0]; (index == wheel[2][0]) || (index == wheel[0][0]) || (index == wheel[1][0]);
index--) {if(index < 28) {index = 35;}} hjulet [1] [0] = index. Windex = 0 ;}}
IF(Windex == 1) {if(keyval == 40) {för (index = wheel [0] [0]; (index == wheel[2][0]) || (index == wheel[1][0]) || (index == wheel[0][0]);
index--) {if(index < 28) {index = 35;}} hjulet [0] [0] = index. Windex = 0 ;}}
dig2 = wheel [2] [0]; dig3 = wheel [1] [0]; dig4 = wheel [0] [0]; dig1 = återspeglar [0];
nixisend();
dig1 = 37. dig2 = 37. dig3 = 37. dig4 = 37.
digitalWrite (led1, låg);
}

Placera den inre inställningen av varje Rotor
void mode2() {
digitalWrite (led2, hög);
IF(Windex == 1) {
IF(keyval == 47) {hjul [2] [1] ++; om (hjul [2] [1] > 25) {hjul [2] [1] = 0 ;}}
IF(keyval == 48) {hjulet [1] [1] ++; om (hjulet [1] [1] > 25) {hjulet [1] [1] = 0 ;}}
IF(keyval == 49) {hjulet [0] [1] ++; om (hjulet [0] [1] > 25) {hjulet [0] [1] = 0 ;}}
IF(keyval == 42) {hjul [2] [1]--; om (hjul [2] [1] < 0) {hjul [2] [1] = 25 ;}}
IF(keyval == 41) {hjulet [1] [1]--; om (hjulet [1] [1] < 0) {hjulet [1] [1] = 25 ;}}
IF(keyval == 40) {hjulet [0] [1]--; om (hjulet [0] [1] < 0) {hjulet [0] [1] = 25 ;}}
Windex = 0; }

dig2 = wheel [2] [1]. dig3 = wheel [1] [1]. dig4 = wheel [0] [1]. dig1 = 0;
nixisend();
dig1 = 37. dig2 = 37. dig3 = 37. dig4 = 37.
digitalWrite (led2, låg);
}

Placera Start karaktären av varje hjul
void mode3() {
digitalWrite (led3, hög);
IF(Windex == 1) {
IF(keyval == 46) {återspeglar [1] ++; om (avspegla [1] > 25) {återspeglar [1] = 0 ;}}
IF(keyval == 47) {hjul [2] [2] ++; om (hjul [2] [2] > 25) {hjul [2] [2] = 0 ;}}
IF(keyval == 48) {hjulet [1] [2] ++; om (hjulet [1] [2] > 25) {hjulet [1] [2] = 0 ;}}
IF(keyval == 49) {hjulet [0] [2] ++; om (hjulet [0] [2] > 25) {hjulet [0] [2] = 0 ;}}
IF(keyval == 43) {återspeglar [1]--; om (avspegla [1] < 0) {återspeglar [1] = 25 ;}}
IF(keyval == 42) {hjul [2] [2]--; om (hjul [2] [2] < 0) {hjul [2] [2] = 25 ;}}
IF(keyval == 41) {hjulet [1] [2]--; om (hjulet [1] [2] < 0) {hjulet [1] [2] = 25 ;}}
IF(keyval == 40) {hjulet [0] [2]--; om (hjulet [0] [2] < 0) {hjulet [0] [2] = 25 ;}}
Windex = 0; }

dig2 = wheel [2] [2]. dig3 = wheel [1] [2]. dig4 = wheel [0] [2]. dig1 = återspeglar [1];
nixisend();
dig1 = 37. dig2 = 37. dig3 = 37. dig4 = 37.
digitalWrite (led3, låg);
}

Definiera Plugboard paren
void mode4() {
heltal index = 0;
digitalWrite (led4, hög);
om (pluguse < = 9) {
om (plugval [0] [paindex] == 1) {för (index = paindex;(index == paindex) || (index == pbindex) || (plugval [0] [index] == 1); index ++) {if(index > 24) {index = -1 ;}} paindex = index;}
om (plugval [0] [pbindex] == 1) {för (index = pbindex;(index == pbindex) || (index == paindex) || (plugval [0] [index] == 1); index ++) {if(index > 24) {index = -1 ;}} pbindex = index;}
IF(Windex == 1) {
IF(keyval == 46) {för (index = paindex;(index == paindex) || (index == pbindex) || (plugval [0] [index] == 1); index ++) {if(index > 24) {index = -1 ;}} paindex = index. Windex = 0; }
IF(keyval == 43) {för (index = paindex;(index == paindex) || (index == pbindex) || (plugval [0] [index] == 1); index--) {if(index < 1) {index = 26 ;}} paindex = index. Windex = 0; }
IF(keyval == 49) {för (index = pbindex;(index == pbindex) || (index == paindex) || (plugval [0] [index] == 1); index ++) {if(index > 24) {index = -1 ;}} pbindex = index. Windex = 0; }
IF(keyval == 40) {för (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.
}
annat {done();}
digitalWrite (led4, låg);
}

Detta är Normal driftläge att kryptera/dekryptera
void mode5() {
int pv = 0;
digitalWrite (led5, hög);

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

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

PV = (procesval + (hjul [2] [2] - wheel[2][1]));
IF(PV < 0) {pv = pv + 26.}
procesval = rotorvals [rullar [2] [0] -27] [pv];
om (procesval > = 100) {procesval = procesval - 100;}
procesval = (procesval - (hjul [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 [återspeglar [0] + 7] [pv];
om (procesval > = 100) {procesval = procesval - 100;}
IF(procesval < 0) {procesval = procesval + 26.} IF(procesval > 25) {procesval = procesval - 26.}
Serial.Print (procesval); Serial.Print("");

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

PV = (procesval + 26);
procesval = rotorvali [återspeglar [0] + 7] [pv];
om (procesval > = 100) {procesval = procesval - 100;}
IF(procesval < 0) {procesval = procesval + 26.} IF(procesval > 25) {procesval = procesval - 26.}
Serial.Print (procesval); Serial.Print("");

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

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

PV = (procesval + (hjulet [0] [2] - wheel[0][1]));
IF(PV < 0) {pv = pv + 26.}
procesval = rotorvali [hjulet [0] [0] -27] [pv];
om (procesval > = 100) {procesval = procesval - 100;}
procesval = (procesval - (hjulet [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 = wheel [2] [2]. dig3 = wheel [1] [2]. dig4 = wheel [0] [2]. dig1 = återspeglar [1];
lampita();
nixisend();
lampitb();
dig1 = 37. dig2 = 37. dig3 = 37. dig4 = 37.
digitalWrite (led5, låg);
}

Hjälpare funktion att tända den rätta nyckeln
void lampita() {
digitalWrite(lamparray[lampval][0],0);
digitalWrite(lamparray[lampval][1],0);
}
void lampitb() {
digitalWrite(lamparray[lampval][0],1);
digitalWrite(lamparray[lampval][1],1);
}

Hjälp-funktionen att belysa "Nixies"
void nixisend() {
sixteenSegWrite (0, dig1);
sixteenSegWrite (1, dig2);
sixteenSegWrite 2, dig3.
sixteenSegWrite (3, dig4).
}

void marquee() {

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

}
Funktion som faktiskt vänder på varje 17 lämpliga segment på varje "Nixie"
void sixteenSegWrite (int tecken, int tecken) {
digitalWrite(anode[digit],0);
för (heltal index = 0; index < 17; index ++) {
digitalWrite (segment [index], segmentvals[character][index]);
}
Delay(7);
för (heltal index = 0; index < = 16; index ++) {
digitalWrite (segment [index], 1);
}
digitalWrite (anoden [siffra], 1);
}

void done() {
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]);
om (rotorvals [hjulet [0] [0] -27] [hjulet [0] [2]] > = 100) {windex1 = 1;}
hjulet [0] [2] ++; om (hjulet [0] [2] > 25) {hjulet [0] [2] = 0;}
Windex = 0;
IF(windex1 == 1) {
om (rotorvals [hjulet [1] [0] -27] [hjulet [1] [2]] > = 100) {windex2 = 1;}
hjulet [1] [2] ++; om (hjulet [1] [2] > 25) {hjulet [1] [2] = 0 ;}}
windex1 = 0;
IF(windex2 == 1) {
hjulet [2] [2] ++; om (hjul [2] [2] > 25) {hjul [2] [2] = 0;}
windex2 = 0; }
}

Om det finns tillräckligt intresse, vi tänker skapar en PCB som skulle gör det möjligt för en mycket lättare montering av denna underbara fullt fungerande Enigma replika. Besök http://www.stgeotronics.com att hitta information om tillgänglighet, priser & att placera din beställning eller Förbeställ nu. Kretsscheman publiceras, så PCB har gått in i sin utvecklingsfas. Snart att testas.

Se Steg
Relaterade Ämnen

Gör din egen plånboksstorlek Enigma(tm)-som maskin

jag jobbar som sysadmin och har alldeles för många lösenord att hålla reda på. Jag brukade använda en av dessa lösenord donglar för militären, men mellan platta batterier, storlek på saken och olika andra olägenheter, beslöt jag att göra min egen som...

Bygga din egen ficka SID Audio Player

Låt oss tid reser tillbaka till 80-talet igen genom att skapa din egen Propellerpowered Pocket SID Audio Player.]Den Guinness rekordbok listar Commodore 64 som den bäst säljande datormodellen genom tiderna. C64: an mest övertygande funktioner var det...

Skapa din egen Nike + (Nike Plus) Sensor hål i dina löparskor

Obs: instruktionerna är inkluderade i varje bild.För att se alla bilder (och se alla steg) måste du registrera dig för ett gratis konto på denna webbplats.En gång loggade i kan du klicka på varje bild för en större version med instruktioner.)Det finn...

Gjutning objekt i Sugru (gör din egen stearin och metall LEGO minifigurer!)

Varför kasta i Sugru?Denna guide visar dig hur man gör en billig och enkel form av en silikon förening kallas Sugru. Från denna värmetålig mögel kan man skapa en tenn gjutning, för smycken och sådant. Även om en professionell gjutning kommer att leve...

Gör din egen... {s} INGEN {w} styrelsen

vad är en nr-BOARD?Det är en snowboard med inga bindningar...Varför skulle någon göra det?Eftersom fötterna älskar att vara fri!Fråga bara någon surfer, skateboardåkare, bare-fotare, barn, etc...... Surfing har inga bindningar, skateboard har ingen.....

Att göra din egen räknesticka

jag har funderat på att göra min egen Glid härskar, och slutligen gjorde. Detta Instructable är delvis en beskrivning av hur jag gjorde det och delvis en utvärdering av arbetet.Steg 1: I 2008 publicerade Instructables medlem legionlabs "Hur man använ...

Bygga din egen 555 Timer

The 555 timer. Ett chip så mångsidigt att det har använts i allt från leksaker till rymdfarkoster. Ett chip som kan fungera som en oscillator, en schmitt-trigger, PWM föraren, en siren/larm, en ljus eller mörk detektor och mycket mycket mer. Det är d...

Göra din egen Mad Hatter hatt och kostym

Denna kostym som jag gjorde för en fotosession. Jag älskar bilden av Johnny Depp som mad hatter och ville replikera utseendet så mycket som möjligt för fotot. Ja är jag lite galen att sätta alla denna insats i att skapa en dräkt bara för ett foto. Me...

Gör din egen "Iron" tronen

drömmer du om att vara kung av återvändsgränden? Eller vad sägs om Sagan om gräsmattan? I så fall kommer du att behöva en tron! Vi byggde en spelet av troner inspirerad järn tronen för våra medeltida tema Halloween-fest. Det är inte på något sätt, et...

Bygg din egen (billigt!) multi-function Trådlös kamera controller.

IntroductionNågonsin tyckte att bygga din egen kamera controller?VIKTIGT: Kondensatorer för MAX619 är 470n eller 0.47u. Schematiskt är korrekt, men komponentlistan var fel - uppdaterad.Detta är en post i Digital dagar tävlingen så om du tycker det är...

Gör din egen anpassade mynt

Länk till videon ifall det inte dyker upp: http://www.youtube.com/watch?v=jhASjoxSpkEHar du någonsin undrat om du skulle se bra ut på ett mynt? Detta är din chans att ta reda på!I den senaste gör var egna mynt en pärs och en halv, med att mejsla ut e...

Bygga din egen Storytime Björn

semester är på väg!Jag har fått en bra idé för en rolig gåva för att favorit förskolebarn, och du får lära dig hur man gör saker prata på samma gång!Låt mig presentera Storytime björnen, den uppstoppade djur som kan sjunga, berätta historier eller sä...

Skapa din egen e-vätska

Nedan ger Detaljer om hur du skapar e-vätska smaker, sparar pengar och ger dig verktygen att skapa din egen unika smaker. Med lite tid och experimenterande kan du skapa smaker som är awesome till vape och du kan göra tid och tid igen. När du har bas...

Din egen färgsensor med hjälp av lysdioder

Visste du att du kan göra en "billig" men effektiv färgsensor med några grundläggande komponenter?Denna superenkla instructable kommer guide du gör din egen färg med hjälp av sensor en massa lysdioder och en LDR.Jag har lyckats göra ett väl ordn...

Gör din egen järn acetat/hemmagjord bets

Ett billigt och enkelt sätt att skapa många olika typer av trä fläckar.Steg 1: Ett mycket kostnadseffektivt sätt att göra din egen fläckDe flesta material jag använt, är husgeråd.Varor köpta:1. stål ull = $1.002. ättika = $1.00Steg 2: Du behöver:1. d...

Ställa in en BODACIOUS bubbla STATION för fester, festivaler & händelser - skapa din egen jätte kul!!!

Bubblorna är awesome! Jag förkastar helt uppfattningen att bubblan blåsa är bara barnens spelar, och ser det som en rolig, avkopplande, kreativ verksamhet för humanoider i alla åldrar och bakgrunder. Inställning-upp en bubbla station på en fest, ger...

DIY, BYGGA DIN EGEN DIGITALA BINARY CLOCK!

Detta Instructable visar hur man bygger en digital klocka på enklaste sätt. Du behöver bara några verktyg och lite tid...Steg 1: Introduktion Det finns två sätt att bygga din egen binär klocka.1.-en är till göra din egen PCB. Att lära sig lite av mik...

Hur du grilla din egen kaffe

en av mina favorit hobbies stekheta mitt eget kaffe. I detta instructable, du lär rosta egna kaffe (smakar mycket bättre än någon annan kan du köpa). Jag köpa den gröna från ett företag som heter Legacy kaffe. Du kan beställa den gröna online från Sw...

Bygga din egen dator

varför skulle någon gå ut och köpa en dator från en manufaturer som Dell eller Gateway, när de kunde bygga en mer kraftfull dator för mindre pengar? Svaret, de vet inte hur man bygger den.Detta kanske låter som en komplicerad process, men i alla verk...