Etape 7: Logiciel - oh... aïe !
Un code qui vérifie que chaque touche du clavier est lue avec précision.
Un deuxième code qui teste chacun des boutons de 10 fonction.
Un Enigma_POST (Power On Self Test) croquis qui teste chaque lampe clavier peut être éclairée avec précision et déplacer chaque LED dans chaque mode, avec quelques modifications sur le code original de maquette pour s’assurer que chaque segment des 16 segments 4 LEDs fonctionne parfaitement.
Mais, même avec tous ces exemples codes sur place qui se sont avérés chaque pièce de matériel sur la machine, la tâche de reproduire la fonctionnalité de cryptage/décryptage d’une véritable énigme M4 a été un tour-de-force de mathématiques !
Tous les croquis de Arduino seront disponibles sur notre Github que nous mettons actuellement en place.
Voici l’esquisse de Enigma_POST :
/ * Code de développement enigma au Test de chaque des 4 Nixes, les 5 LED,
puis mettre sur chaque lampe en séquence.
Écrit par Marc Tessier & James Sanderson 08/09/13
*/
Définir les broches 16 Segments
int segment [17] = {24,22,25,31,38,36,32,30,28,26,23,27,33,35,34,29,37} ;
anode int [4] = {39,41,43,45} ;
Définir les 9 lampes broches
lampe int [9] = {10,9,8,7,6,5,4,3,2} ;
int lanode [3] = {11,12,13} ;
LTP587P Segments: A, B, C, D, E, F, G, H, K, M, N, P, R, S, T, U, dp
segmentvals booléen [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}, / / = I
{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}, / / = espace
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, / / = plein allumé
{1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1} / / = SS
};
LTP587P Segments: A, B, C, D, E, F, G, H, K, M, N, P, R, S, T, U, dp
lampvals booléen [9] [9] = {{0,1,1,1,1,1,1,1,1}, / / = Q ou A ou P
{1,0,1,1,1,1,1,1,1}, / / = W ou S ou Y
{1,1,0,1,1,1,1,1,1}, / / = E ou D ou X
{1,1,1,0,1,1,1,1,1}, / / = R ou C ou F
{1,1,1,1,0,1,1,1,1}, / / = T ou G ou V
{1,1,1,1,1,0,1,1,1}, / / = Z ou H ou B
{1,1,1,1,1,1,0,1,1}, / / = U ou J ou N
{1,1,1,1,1,1,1,0,1}, / / = I ou K ou M
{1,1,1,1,1,1,1,1,0} / / = O ou L
};
int value_row1 = 0 ;
int value_row2 = 0 ;
int value_row3 = 0 ;
clé char = 91 ;
led1 int = 40 ;
led2 int = 42 ;
led3 int = 44 ;
led4 int = 46 ;
DEL5 int = 48 ;
int wait = 100 ;
void setup() {}
pour (int index = 0; index < = 3; index ++) {}
pinMode (anode [index], sortie) ;
digitalWrite (anode [index], 1) ;
}
pour (int index = 0; index < = 16 ; index ++) {}
pinMode (segment [index], sortie) ;
digitalWrite (segment [index], 1) ;
}
initialiser les broches numériques en tant que sortie.
pinMode (led1, sortie) ;
pinMode (led2, sortie) ;
pinMode (DEL3, sortie) ;
pinMode (led4, sortie) ;
pinMode (DEL5, sortie) ;
pour (int index = 0; index < = 2; index ++) {}
pinMode (lanode [index], sortie) ;
digitalWrite (lanode [index], 1) ;
}
pour (int index = 0; index < = 8; index ++) {}
pinMode (lampe [index], sortie) ;
digitalWrite (lampe [index], 1) ;
}
}
void loop() {}
sixteenSegWrite (0, 38) ;
sixteenSegWrite (1, 38) ;
sixteenSegWrite (2, 38) ;
sixteenSegWrite (3, 38) ;
digitalWrite (led1, HIGH) ; allumer la LED (HIGH est le niveau de tension)
Delay(200) ; Attendez une seconde
digitalWrite (led1, faible) ; éteindre la LED en rendant la tension basse
Delay(Wait) ; Attendez une seconde
digitalWrite (led2, HIGH) ; allumer la LED (HIGH est le niveau de tension)
Delay(200) ; Attendez une seconde
digitalWrite (led2, faible) ; éteindre la LED en rendant la tension basse
Delay(Wait) ; Attendez une seconde
digitalWrite (DEL3, HIGH) ; allumer la LED (HIGH est le niveau de tension)
Delay(200) ; Attendez une seconde
digitalWrite (DEL3, faible) ; éteindre la LED en rendant la tension basse
Delay(Wait) ; Attendez une seconde
digitalWrite (led4, HIGH) ; allumer la LED (HIGH est le niveau de tension)
Delay(200) ; Attendez une seconde
digitalWrite (led4, faible) ; éteindre la LED en rendant la tension basse
Delay(Wait) ; Attendez une seconde
digitalWrite (DEL5, HIGH) ; allumer la LED (HIGH est le niveau de tension)
Delay(200) ; Attendez une seconde
digitalWrite (DEL5, faible) ; éteindre la LED en rendant la tension basse
Delay(Wait) ; Attendez une seconde
pour (int index = 0; index < = 2; index ++) {}
digitalWrite (lanode [index], 0) ;
pour (int mychar = 0; mychar < 9; mychar ++) {}
pour (sindex int = 0; sindex < 9; sindex ++) {}
digitalWrite (lampe [sindex], lampvals[mychar][sindex]) ;
retard (30) ;
}
}
digitalWrite (lanode [index], 1) ;
}
}
void sixteenSegWrite (int digits, caractère int) {}
digitalWrite(anode[digit],0) ;
pour (int index = 0; index < 17 ; index ++) {}
digitalWrite (segment [index], segmentvals[character][index]) ;
}
}