2022-03-14 15:30:32 +01:00
|
|
|
|
#include <PS2KeyAdvanced.h>
|
2022-03-17 13:38:01 +01:00
|
|
|
|
#include "enigma_types.h"
|
2022-03-14 15:30:32 +01:00
|
|
|
|
|
|
|
|
|
#define DATAPIN 2
|
|
|
|
|
#define IRQPIN 3
|
|
|
|
|
|
|
|
|
|
PS2KeyAdvanced keyboard;
|
|
|
|
|
|
2022-03-17 17:08:49 +01:00
|
|
|
|
// Сконвертировать HEX значение клавиши
|
|
|
|
|
// в её алфавитный индекс;
|
|
|
|
|
//
|
|
|
|
|
// возвращает индекс буквы
|
2022-03-17 17:27:47 +01:00
|
|
|
|
size_t toKeyIndex(const String& input_hex)
|
2022-03-17 17:08:49 +01:00
|
|
|
|
{
|
|
|
|
|
size_t index = -1;
|
|
|
|
|
for (size_t i = 0; i < ALPHABET_SIZE; ++i)
|
|
|
|
|
{
|
2022-03-17 17:27:47 +01:00
|
|
|
|
if (key_values[i].hex == input_hex)
|
2022-03-17 17:08:49 +01:00
|
|
|
|
{
|
|
|
|
|
index = i;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return index;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Взять текущий сдвиг в алфавите.
|
|
|
|
|
// Считается суммарно по всем дискам в положении
|
|
|
|
|
// на момент вызова;
|
|
|
|
|
//
|
|
|
|
|
// возвращает текущий индекс с применением сдвига
|
|
|
|
|
size_t shift(size_t index)
|
|
|
|
|
{
|
|
|
|
|
for (size_t i = 0; i < WHEELS_AMOUNT; ++i)
|
|
|
|
|
{
|
|
|
|
|
index += key_shifts[i];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return index % ALPHABET_SIZE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////
|
|
|
|
|
|
2022-03-17 13:38:01 +01:00
|
|
|
|
void setup()
|
2022-03-14 15:30:32 +01:00
|
|
|
|
{
|
2022-03-17 13:38:01 +01:00
|
|
|
|
keyboard.begin(DATAPIN, IRQPIN);
|
|
|
|
|
Serial.begin(115200);
|
2022-03-14 15:30:32 +01:00
|
|
|
|
}
|
|
|
|
|
|
2022-03-17 13:38:01 +01:00
|
|
|
|
void loop()
|
2022-03-14 15:30:32 +01:00
|
|
|
|
{
|
2022-03-17 17:08:49 +01:00
|
|
|
|
if (!keyboard.available())
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
const uint16_t key = keyboard.read();
|
|
|
|
|
if (key <= 0)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
const String value = String(key, HEX);
|
|
|
|
|
const size_t index = toKeyIndex(value);
|
|
|
|
|
if (index == -1)
|
|
|
|
|
return;
|
|
|
|
|
|
2022-03-17 17:27:47 +01:00
|
|
|
|
const String encoded_letter = key_values[shift(index)].view;
|
|
|
|
|
// отправить encoded_letter на экран
|
2022-03-14 15:30:32 +01:00
|
|
|
|
}
|