Barnens spel till Arduino Enigma maskin (8 / 10 steg)
Steg 8: Koden: rotorer
CONST char rI [26] = {'E',
"K",
ÄR ',
"F",
"L",
"G",
HADE ",
"Q",
"V",
"Z",
'N ",
'T',
' O ',
"W",
"Y",
"H",
"X",
'U',
S ',
"P",
A,
"I",
"B",
"R",
"C",
'J'};
CONST char rII [26] = {A,
"J",
HADE ",
"K",
S ',
"I",
"R",
'U',
"X",
"B",
"L",
"H",
"W",
'T',
ÄR ',
"C",
"Q",
"G",
"Z",
'N ",
"P",
"Y",
"F",
"V",
' O ',
'E'};
char rIII [26] = {"B",
HADE ",
"F",
"H",
"J",
"L",
"C",
"P",
"R",
'T',
"X",
"V",
"Z",
'N ",
"Y",
"E",
"I",
"W",
"G",
A,
"K",
ÄR ',
'U',
S ',
"Q",
'O'};
Ni kanske undrar "Varför inte bara definiera dem som en sträng, detta verkar vara spretig". Med andra ord varför inte göra så här:
char rotI [26] = "" EKMFLGDQVZNTOWYHXUSPAIBRCJ "
Jag ska erkänna detta gör för mycket längre kod, men för mig det är vettigare att visuellt se det ner (jag kan inte tänka mig en tid jag någonsin gjort detta tidigare, men med den här jag tycker det fungerar). I grunden eftersom dessa är rotorerna (och jag var kopiering värdena av en pappersmaskin Enigma) då det är så jag valde att göra det.
Förutom att definiera reflektorer definierade jag vilket nummer varje rotor bör aktivera nästa rotorn. Med andra ord, när RI är i position 17, ska sedan rotorn till vänster vända.
CONST int spinRI = 17;
CONST int spinRII = 5;
CONST int spinRIII = 22.
Eftersom rotorerna kan användas i någon av de tre platser som du ser på skärmen jag kopiera konstant spin värdena till ints som ändras när som helst en olika rotorn sätts i en kortplats (r1 är vänster mest rotorn, r2 är center rotorn, r3 är rätt de flesta rotorn).
int spin_r1 = spinRI;
int spin_r2 = spinRII;
int spin_r3 = spinRIII;
Följande variabler hålla reda på vilka rotorn är i vilken slot. Detta används så att du vet när du ändrar rotorer i en kortplats vad rotor nästa kommer att vara
int cur_r1 = 1;
int cur_r2 = 2;
int cur_r3 = 3;
Jag definierar också reflektorn. I grunden är vad detta säger om indata kommer in på position 3, då det borde gå tillbaka ut 7 plats till exempel (eftersom värdet i position 3 är 7). Reflektorn i princip sänder signalen tillbaka genom rotorerna i omvänd ordning
int reflektor [26] = {24,
17,
20,
7,
16,
18,
11,
3,
15,
23,
13,
6,
14,
10,
12,
8,
4,
1,
5,
25,
2,
22,
21,
9,
0,
19}.
Detta är platshållare för nuvarande rotor matrisen i positioner 1, 2 och 3 på skärmen
char rotor1 [26];
char rotor2 [26];
char rotor3 [26];
Obs: Bilden i det här steget är från Wikipedia