Stap 7: De Software - oh... Auw!
Een code die proeven dat elk toetsenbord knop nauwkeurig wordt gelezen.
Een tweede code die elk van de 10 functietoetsen.
Een Enigma_POST (Power On Self Test) schets die tests die elk toetsenbord lamp precies kan worden verlicht en verplaatsen van elke LED via elke modus, met enkele wijzigingen aan de oorspronkelijke breadboard code om ervoor te zorgen elk segment van de 4 16-Segment LED's werkt perfect.
Maar was zelfs met al deze steekproef codes aan kant die getest elk stukje hardware op de computer, de taak van het reproduceren van de functionaliteit van coderen/decoderen van een echte M4 Enigma een wiskunde--hoogstandje!
Alle Arduino schetsen zullen beschikbaar zijn op onze Github die we momenteel opzetten.
Hier is de schets van de Enigma_POST:
/ * Enigma ontwikkeling Code test elke van de 4 Nixies, de 5 LEDs,
opnieuw in te schakelen op elk licht in de juiste volgorde.
Geschreven door Marc Tessier & James Sanderson 9/8/13
*/
Definiëren van de 16-segmenten pinnen
int segment [17] = {24,22,25,31,38,36,32,30,28,26,23,27,33,35,34,29,37};
int anode [4] = {39,41,43,45};
Definiëren van de 9 lampen Pins
int lamp [9] = {10,9,8,7,6,5,4,3,2};
int lanode [3] = {11,12,13};
LTP587P segmenten: A, B, C, D, E, F, G, H, K, M, N, P, R, S, T, U, dp
Booleaanse 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}, / / = ik
{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}, / / = ruimte
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, / / = volledig verlicht
{1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1} / / = SS
};
LTP587P segmenten: A, B, C, D, E, F, G, H, K, M, N, P, R, S, T, U, dp
Booleaanse lampvals [9] [9] = {{0,1,1,1,1,1,1,1,1}, / / = Q of A of P
{1,0,1,1,1,1,1,1,1}, / / = W of S of Y
{1,1,0,1,1,1,1,1,1}, / / = E of D of X
{1,1,1,0,1,1,1,1,1}, / / = R of F of C
{1,1,1,1,0,1,1,1,1}, / / = T of G of V
{1,1,1,1,1,0,1,1,1}, / / = Z of H of B
{1,1,1,1,1,1,0,1,1}, / / = U of J of N
{1,1,1,1,1,1,1,0,1}, / / = I of K of M
{1,1,1,1,1,1,1,1,0} / / = O of L
};
int value_row1 = 0;
int value_row2 = 0;
int value_row3 = 0;
char sleutel = 91;
int led1 = 40;
int led2 = 42;
int led3 = 44;
int led4 = 46;
int led5 = 48;
int wachten = 100;
VOID Setup {}
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);
}
Initialiseer de digitale pinnen als uitgang.
pinMode (led1, OUTPUT);
pinMode (led2, OUTPUT);
pinMode (led3, OUTPUT);
pinMode (led4, OUTPUT);
pinMode (led5, OUTPUT);
voor (int index = 0; index < = 2; index ++) {}
pinMode (lanode [index], OUTPUT);
digitalWrite (lanode [index], 1);
}
voor (int index = 0; index < = 8; index ++) {}
pinMode (lamp [index], OUTPUT);
digitalWrite (lamp [index], 1);
}
}
void loop {}
sixteenSegWrite (0, 38);
sixteenSegWrite (1, 38);
sixteenSegWrite (2, 38);
sixteenSegWrite (3, 38);
digitalWrite (led1, hoge); de LED inschakelen (HIGH is het spanningsniveau)
delay(200); wachten op een tweede
digitalWrite (led1, laag); de LED uitschakelen door de spanning laag
delay(wait); wachten op een tweede
digitalWrite (led2, hoge); de LED inschakelen (HIGH is het spanningsniveau)
delay(200); wachten op een tweede
digitalWrite (led2, laag); de LED uitschakelen door de spanning laag
delay(wait); wachten op een tweede
digitalWrite (led3, hoge); de LED inschakelen (HIGH is het spanningsniveau)
delay(200); wachten op een tweede
digitalWrite (led3, laag); de LED uitschakelen door de spanning laag
delay(wait); wachten op een tweede
digitalWrite (led4, hoge); de LED inschakelen (HIGH is het spanningsniveau)
delay(200); wachten op een tweede
digitalWrite (led4, laag); de LED uitschakelen door de spanning laag
delay(wait); wachten op een tweede
digitalWrite (led5, hoge); de LED inschakelen (HIGH is het spanningsniveau)
delay(200); wachten op een tweede
digitalWrite (led5, laag); de LED uitschakelen door de spanning laag
delay(wait); wachten op een tweede
voor (int index = 0; index < = 2; index ++) {}
digitalWrite (lanode [index], 0);
voor (int mychar = 0; mychar < 9; mychar ++) {}
voor (int sindex = 0; sindex < 9; sindex ++) {}
digitalWrite (lamp [sindex], lampvals[mychar][sindex]);
vertraging (30);
}
}
digitalWrite (lanode [index], 1);
}
}
VOID sixteenSegWrite (int cijfer, int karakter) {}
digitalWrite(anode[digit],0);
voor (int index = 0; index < 17; index ++) {}
digitalWrite (segment [index], segmentvals[character][index]);
}
}