#include #include "enigma_types.h" #define DATAPIN 2 #define IRQPIN 3 PS2KeyAdvanced keyboard; // Сконвертировать HEX значение клавиши // в её алфавитный индекс; // // возвращает индекс буквы size_t toKeyIndex(const String& input_hex) { size_t index = -1; for (size_t i = 0; i < ALPHABET_SIZE; ++i) { if (key_values[i].hex == input_hex) { 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; } ///////////////////////////////////////////////////// void setup() { keyboard.begin(DATAPIN, IRQPIN); Serial.begin(115200); } void loop() { 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; const String encoded_letter = key_values[shift(index)].view; // отправить encoded_letter на экран }