diff --git a/terminal_keyboard_emulator.ino b/terminal_keyboard_emulator.ino index 0f97b27..843c137 100644 --- a/terminal_keyboard_emulator.ino +++ b/terminal_keyboard_emulator.ino @@ -5,6 +5,9 @@ #include // pinout config +const int pinLedOffline = 10; // out +const int pinLedOnline = 9; // out +const int pinSpeaker = 8; // out const int pinData = 6; // out, host data const int pinStatus = 7; // in, host status const int clockPin = 5; // out, kbd clock @@ -22,6 +25,7 @@ volatile int data = 0; int test = 0; volatile int counter = 0; int numbits = 10; +volatile int typedKey = -1; // MODS >>> // [1] send debug scancode information to serial port @@ -31,7 +35,7 @@ bool modConsoleLog = true; // ---------- // KBD Output // ---------- -volatile long lastChange = 0; +volatile long lastChange = -100000; volatile int x = 0; volatile int dataWord = 0; volatile int dataState = 0; @@ -54,6 +58,7 @@ void sendKey(byte key) { dataDelay = 0; packetDelay = 0; packetTail = 15; + typedKey = key; //Serial.print("Sending key "); Serial.println((int) key); } @@ -365,6 +370,17 @@ void onTimerInterrupt() slaveClockStep = (slaveClockStep + 1) % slaveClockDivider; } +// -------------- +// User Interface +// -------------- +void updateOnlineLeds() +{ + long timeNow = millis(); + bool online = (lastChange > timeNow) || ((timeNow - lastChange) < 10000); + digitalWrite(pinLedOffline, online ? LOW : HIGH); + digitalWrite(pinLedOnline, online ? HIGH : LOW); +} + // ---- // Main // ---- @@ -374,12 +390,17 @@ void setup(void) setupKeyMapping(); + pinMode(pinLedOffline, OUTPUT); + pinMode(pinLedOnline, OUTPUT); + pinMode(pinSpeaker, OUTPUT); pinMode(pinData, OUTPUT); pinMode(dataPin, INPUT); pinMode(outPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(pinStatus, INPUT_PULLUP); + digitalWrite(pinLedOffline, HIGH); + digitalWrite(pinLedOnline, HIGH); digitalWrite(pinData, HIGH); digitalWrite(outPin, LOW); @@ -388,6 +409,23 @@ void setup(void) Timer1.initialize(timerDelay); Timer1.attachInterrupt(onTimerInterrupt); + delay(500); + tone(pinSpeaker, 650, 200); + digitalWrite(pinLedOffline, LOW); + digitalWrite(pinLedOnline, HIGH); + delay(200); + tone(pinSpeaker, 500, 200); + digitalWrite(pinLedOffline, HIGH); + digitalWrite(pinLedOnline, LOW); + delay(200); + digitalWrite(pinLedOffline, LOW); + digitalWrite(pinLedOnline, LOW); + delay(500); + + updateOnlineLeds(); + tone(pinSpeaker, 440, 200); + delay(200); + Serial.println("Keyboard ready"); } @@ -419,5 +457,13 @@ void loop(void) Serial.print("QWE "); Serial.println((int)k); if (qwe % 5 == 0) delay(2000); /**/ + + updateOnlineLeds(); + if (typedKey != -1) { + tone(pinSpeaker, 200 + typedKey, 100); + typedKey = -1; + } + + delay(5); }