Il mio apparecchio intende simulare la enigma “german railway” a 3 rotori; altri limiti che ho imposto sono la limitazione a 16 caratteri del messaggio ( l’LCD è 16 X 2 ).
La trasmissione inizia quando sulla tastiera viene battuto il tasto invio.
Trasmettitore
Per leggere i dati dalla tastiera ho usato la libreria , mentre per l’ LCD HD64480 la Non disponendo di commutatori a 26 posizioni (per simulare le posizioni dei rotori della macchina Enigma), per evitare di consumare una grande quantità di ingressi ho usato 3 potenziometri, uno per ogni rotore: ho trasformato il valore analogico letto dall’ingresso( 0 -> 1023 10 bit) in 26 “posizioni” virtuali; con un interruttore commuto sull’LCD la visualizzazione del testo trasmesso con quella dello stato dei rotori.
I “Rotori di scambio ” sono memorizzati in liste di 26 elementi.
Per facilitarmi la gestione queste liste non sono composte da caratteri ma da numeri che ho messo in sostituzione delle lettere ( con la corrispondenza di A = 1 , B = 2; …)
Il cambio di posizione dei rotori non viene simulato facendo scorrere gli elementi al suo interno ma “spostando” il collegamento tra un rotore e il successivo.
Una volta cifrato, il messaggio viene convertito in codice morse;
definito un impulso di tempo t di 100 millisecondi per il punto, la linea è un impulso T*3, la pausa t e la fine parola t*3 .
Tutto pronto ora per l’invio all’uscita di Arduino: l’uscita PWM resta ON per il tempo programmato ( punto, linea ) ma al 50%, cioè varia tra 0 e 128 e non tra 0 e 255. Con questo sistema il led di potenza, quando è ON lampeggia con una frequenza di 1 kHz ( propria di Arduino Due ); questo metodo mi ha aiutato a distinguere sul ricevitore il mio segnale da altri disturbi
Ricevitore
Il lavoro più grosso sul segnale ricevuto è fatto dalla parte hardware …(vedi descrizione relativa); il segnale in uscita al tone decoder sembrava già perfetto e pulito dai disturbi quando accendendo la luce a risparmio energetico della mia camera ( dove facevo gli esperimenti) mi sono accorto di un picco indesiderato e ripetitivo nel segnale
che si presenta ogni 20 millisecondi (50Hz).
Ho risolto il problema con una doppia lettura dell’ingresso, scartando quindi le brevi variazioni.
Per analizzare il segnale ho usato la funzione pulseIn;
Ho convertito la serie di punti e di linee in lettere;
a questo punto, come ho fatto per il trasmettitore, conversione di caratteri in numeri, passaggio dei valori attraverso le funzioni rotori e il sistema di “scorrimento dei collegamenti” e invio a display LCD.