1
0
Fork 0
enigma/code.c.ino

68 lines
1.5 KiB
Arduino
Raw Normal View History

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;
// Сконвертировать 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;
}
/////////////////////////////////////////////////////
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
{
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 на экран
2022-03-14 15:30:32 +01:00
}