Faire votre propre réplique Enigma (7 / 11 étapes)

Etape 7: Logiciel - oh... aïe !

Au cours de chaque phase d’assemblage de matériel, nous avions créé des petits croquis Arduino qui mettrait à l’épreuve la section individuelle spécifique, nous avons travaillé sur :

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]) ;
}
}

Articles Liés

Faire votre propre règle à calcul

Faire votre propre règle à calcul

j'ai pensé à faire ma propre règle à calcul et finalement fait.  Ce Instructable est partiellement une description de comment j'ai fait il et partiellement une évaluation de l'effort.Étape 1 : En 2008 legionlabs membre Instructables a publié « Commen
Faire votre propre pièce personnalisée

Faire votre propre pièce personnalisée

Dans le cas où il n'apparaît pas un lien pour la vidéo : http://www.youtube.com/watch?v=jhASjoxSpkEAvez-vous déjà demandé si vous irait bien sur une pièce de monnaie ? C'est votre chance de découvrir !En gestation depuis votre propre pièce de monnaie
Faire votre propre Boombox

Faire votre propre Boombox

Dans ce projet, je vais vous montrer comment créer une Boombox qui se compose principalement d'un autoradio, haut-parleurs récupérés et deux batteries au plomb de 12V. Cette version améliorée est plus fort et plus léger que mon précédent Boombox et p
Comment faire votre propre toutou Octopus

Comment faire votre propre toutou Octopus

Vous avez toujours voulu avoir un ami céphalopode de votre propre sans avoir peur de mouiller partout sur l'endroit ou il s'échappant de votre poisson réservoir avec facilité ? Eh bien, maintenant vous pouvez ! Au sein de ce projet sont des étapes si
Comment faire votre propre pyramide balles de jonglage

Comment faire votre propre pyramide balles de jonglage

apprendre à faire votre propre pyramide jonglerie balles de tissu et de riz !Il est préférable d'utiliser du matériel Rideau ou quelque chose de force similaire qui ne s'effiloche facilement. Vous pouvez également faire preuve de créativité dans les
Faire votre propre diable ou elf caoutchouc latex oreilles

Faire votre propre diable ou elf caoutchouc latex oreilles

Bonjour à tousCette instructable vise à vous donner un aperçu de comment sculpter et monter un un ensemble d'oreilles au latex de caoutchouc portable à votre propre conception.Il y a beaucoup de techniques différentes pour faire des prothèses de l'or
Faire votre propre diadème de papier

Faire votre propre diadème de papier

faire votre propre diadème de papier. C'est très simple et vous prendra moins de 2 minutes.Étape 1: 1 feuille de papier Obtenir une feuille de papierÉtape 2: Pliez le papier Plier le style hamburger de papier et gardez-la pliée.Étape 3: Pliez le papi
Faire votre propre rasoir et rasage brosse Stand

Faire votre propre rasoir et rasage brosse Stand

cette instructable va vous montrer comment vous pouvez faire votre propre rasoir et rasage support de brosse à l'aide d'éléments qui sont probablement déjà dans votre maison.Outils requis :Paire de pinces (préférence quelque chose lourdes, comme une
Faire votre propre clé USB lecteur flash

Faire votre propre clé USB lecteur flash

C'est ennuyeux d'utiliser un lecteur flash USB normal ? Voici un exemple pour vous faire votre propre style clé USB.Ce dont vous avez besoin: 1 USB flash drive 2. petite poupée que vous voulez vraiment couper sa tête; pEtape 1: Démonter le lecteur fl
Faire votre propre soutien-gorge de bikini de noix de coco avec LEDs

Faire votre propre soutien-gorge de bikini de noix de coco avec LEDs

Vacances d'été est à venir et vous voulez un soutien-gorge de bikini, des matériaux entièrement naturels et respectueux de l'environnement, mais il est unique.Pour moins de $10 vous, aussi, pouvez faire votre propre soutien-gorge de noix de coco avec
Faire votre propre Arduino personnalisé compatible

Faire votre propre Arduino personnalisé compatible

j'aime Ardunio. J'aime les choses que les gens font avec eux et j'aime faire mes propres. En août dernier que j'ai publié une Instructable comment faire votre propre timbre-poste de taille compatible Arduino. Cet Instructable va vous montrer comment
Faire votre propre cirque de puces

Faire votre propre cirque de puces

faire votre propre cirque de puces miniatures.Cirque de puces ont été autour depuis l'époque victorienne fois lorsque les puces humaines réelles ont été utilisées pour effectuer des tours de cirque.  La puce serait exploitée avec un petit morceau de
Faire votre propre support de marteau

Faire votre propre support de marteau

En manipulant la forme d'un vieux cintre, vous pouvez faire votre propre porte-marteau que vous pouvez utiliser avec un tablier de clou ou une ceinture d'outil.
Faire votre propre 12 pouces Minecraft pioche d’or

Faire votre propre 12 pouces Minecraft pioche d’or

sa été demandé quelques fois maintenant que je fais un tutoriel vidéo sur comment faire votre propre pioche or Minecraft à l'aide de papercraft.Comme je l'ai dit avant que je ne suis pas très bon à des vidéos YouTube, mais je lui ai donné une bonne d