Gör din egen Enigma replika (7 / 11 steg)
Steg 7: Programvara - Åh... AJ!
En kod som testar att varje tangentbord knapp läses noggrant.
En andra kod som testar varje 10 funktion knapp.
En Enigma_POST (Power On Self Test) skiss de tester som varje tangentbord lampan kan tändas just och flytta varje LED genom varje läge, med några ändringar till den ursprungliga bakbord koden för varje segment av 4 16-segmentet lysdioderna fungerar perfekt.
Men, även med alla dessa prov koder å som testat var varje bit av hårdvara på maskinen, uppgiften att reproducera kryptering/dekryptering funktionaliteten hos en riktig M4 Enigma en matematik kraftprov!
Alla Arduino skisser kommer att finnas på våra Github som vi för närvarande ställer upp.
Här är den Enigma_POST skissen:
/ * Enigma utvecklingskoden prov varje av de 4 Nixies, 5 lysdioderna,
Slå sedan på varje lampa i sekvens.
Skriven av Marc Tessier & James Sanderson 9/8/13
*/
Definiera 16-segmenten stiften
int segmentet [17] = {24,22,25,31,38,36,32,30,28,26,23,27,33,35,34,29,37}.
int anod [4] = {39,41,43,45}.
Definiera de 9 lamporna Pins
int lampa [9] = {10,9,8,7,6,5,4,3,2}.
int lanode [3] = {11,12,13}.
LTP587P segment: A, B, C, D, E, F, G, H, K, M, N, P, R, S, T, U, dp
booleska segmentvals [39] [17] = {{0,0,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1}, / / = A
{0,0,0,0,0,0,1,1,1,0,1,0,1,0,1,1,1}, / / = B
{0,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1}, / / = C
{0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,1}, / / = D
{0,0,1,1,0,0,0,0,1,1,1,0,1,1,1,0,1}, / / = E
{0,0,1,1,1,1,0,0,1,1,1,0,1,1,1,0,1}, / / = F
{0,0,1,0,0,0,0,0,1,1,1,0,1,1,1,1,1}, / / = G
{1,1,0,0,1,1,0,0,1,1,1,0,1,1,1,0,1}, / / = H
{0,0,1,1,0,0,1,1,1,0,1,1,1,0,1,1,1}, / / = jag
{1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1}, / / = J
{1,1,1,1,1,1,0,0,1,1,0,1,0,1,1,0,1}, / / = K
{1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1}, / / = L
{1,1,0,0,1,1,0,0,0,1,0,1,1,1,1,1,1}, / / = M
{1,1,0,0,1,1,0,0,0,1,1,1,0,1,1,1,1}, / / = N
{0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1}, / / = O
{0,0,0,1,1,1,0,0,1,1,1,0,1,1,1,0,1}, / / = P
{0,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1}, / / = Q
{0,0,0,1,1,1,0,0,1,1,1,0,0,1,1,0,1}, / / = R
{0,0,1,0,0,0,1,0,1,1,1,0,1,1,1,0,1}, / / = S
{0,0,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1}, / / = T
{1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1}, / / = U
{1,1,1,1,1,1,0,0,1,1,0,1,1,1,0,1,1}, / / = V
{1,1,0,0,1,1,0,0,1,1,1,1,0,1,0,1,1}, / / = W
{1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,1}, / / = X
{1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1}, / / = Y
{0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,1}, / / = Z
{0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,1}, / / = 0
{1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,1,1}, / / = 1
{0,0,0,1,0,0,0,1,1,1,1,0,1,1,1,0,1}, / / = 2
{0,0,0,0,0,0,1,1,1,1,1,0,1,1,1,1,1}, / / = 3
{1,1,0,0,1,1,1,0,1,1,1,0,1,1,1,0,1}, / / = 4
{0,0,1,0,0,0,1,0,1,1,1,0,1,1,1,0,1}, / / = 5
{0,0,1,0,0,0,0,0,1,1,1,0,1,1,1,0,1}, / / = 6
{0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1}, / / = 7
{0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1}, / / = 8
{0,0,0,0,0,0,1,0,1,1,1,0,1,1,1,0,1}, / / = 9
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, / / = utrymme
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, / / = full Lit
{1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1} / / = SS
};
LTP587P segment: A, B, C, D, E, F, G, H, K, M, N, P, R, S, T, U, dp
booleska lampvals [9] [9] = {{0,1,1,1,1,1,1,1,1}, / / = Q eller A eller P
{1,0,1,1,1,1,1,1,1}, / / = W eller S eller Y
{1,1,0,1,1,1,1,1,1}, / / = E eller D eller X
{1,1,1,0,1,1,1,1,1}, / / = R eller F eller C
{1,1,1,1,0,1,1,1,1}, / / = T eller G eller V
{1,1,1,1,1,0,1,1,1}, / / = Z eller H eller B
{1,1,1,1,1,1,0,1,1}, / / = U eller J eller N
{1,1,1,1,1,1,1,0,1}, / / = jag eller K eller M
{1,1,1,1,1,1,1,1,0} / / = O eller L
};
int value_row1 = 0;
int value_row2 = 0;
int value_row3 = 0;
char nyckel = 91.
int led1 = 40;
int led2 = 42.
int led3 = 44.
int led4 = 46.
int led5 = 48.
int vänta = 100;
void setup() {
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);
}
initiera digital stiften som en utgång.
pinMode (led1, produktionen);
pinMode (led2, produktionen);
pinMode (led3, produktionen);
pinMode (led4, produktionen);
pinMode (led5, produktionen);
för (heltal index = 0; index < = 2; index ++) {
pinMode (lanode [index], produktionen);
digitalWrite (lanode [index], 1);
}
för (heltal index = 0; index < = 8; index ++) {
pinMode (lampa [index], produktionen);
digitalWrite (lampa [index], 1);
}
}
void loop() {
sixteenSegWrite (0, 38);
sixteenSegWrite (1, 38);
sixteenSegWrite (2, 38);
sixteenSegWrite (3, 38);
digitalWrite (led1, hög); Aktivera LED (HIGH är spänningsnivån)
Delay(200); vänta en sekund
digitalWrite (led1, låg); Inaktivera LED genom att spänningen låg
Delay(Wait); vänta en sekund
digitalWrite (led2, hög); Aktivera LED (HIGH är spänningsnivån)
Delay(200); vänta en sekund
digitalWrite (led2, låg); Inaktivera LED genom att spänningen låg
Delay(Wait); vänta en sekund
digitalWrite (led3, hög); Aktivera LED (HIGH är spänningsnivån)
Delay(200); vänta en sekund
digitalWrite (led3, låg); Inaktivera LED genom att spänningen låg
Delay(Wait); vänta en sekund
digitalWrite (led4, hög); Aktivera LED (HIGH är spänningsnivån)
Delay(200); vänta en sekund
digitalWrite (led4, låg); Inaktivera LED genom att spänningen låg
Delay(Wait); vänta en sekund
digitalWrite (led5, hög); Aktivera LED (HIGH är spänningsnivån)
Delay(200); vänta en sekund
digitalWrite (led5, låg); Inaktivera LED genom att spänningen låg
Delay(Wait); vänta en sekund
för (heltal index = 0; index < = 2; index ++) {
digitalWrite (lanode [index], 0);
för (int mychar = 0; mychar < 9; mychar ++) {
för (int sindex = 0; sindex < 9; sindex ++) {
digitalWrite (lampa [sindex], lampvals[mychar][sindex]);
fördröjning (30);
}
}
digitalWrite (lanode [index], 1);
}
}
void sixteenSegWrite (int tecken, int tecken) {
digitalWrite(anode[digit],0);
för (heltal index = 0; index < 17; index ++) {
digitalWrite (segment [index], segmentvals[character][index]);
}
}