diff --git a/terminal_keyboard_emulator.ino b/terminal_keyboard_emulator.ino index 2555c70..bdc68cf 100644 --- a/terminal_keyboard_emulator.ino +++ b/terminal_keyboard_emulator.ino @@ -3,13 +3,15 @@ const int pinData = 6; const int pinStatus = 7; +const int timerDelay = 545; + void setup(void) { pinMode(pinData, OUTPUT); //Timer1.initialize(60); //Timer1.attachInterrupt(clockCycle); - Timer1.initialize(1100/2); + Timer1.initialize(timerDelay); Timer1.attachInterrupt(clockCycle); Timer1.stop(); @@ -25,6 +27,8 @@ volatile int x = 0; volatile int dataWord = 0; volatile int dataState = 0; volatile int dataDelay = 0; +volatile int packetDelay = 0; +volatile int packetTail = 0; volatile int clkState = LOW; void statusCycle() { @@ -34,11 +38,14 @@ void statusCycle() { if (changeDiff >= 10) { lastStart = timeNow; - dataWord = ('1' + x) << 3; - dataState = 10; - dataDelay = 1; - x = (x + 1) % 3; + dataWord = (1 + x); + dataState = 7; + dataDelay = 0; + packetDelay = 0; + packetTail = 100; + x = (x + 1) % 1; clkState = HIGH; + Timer1.initialize(timerDelay); Timer1.start(); } if (timeNow - lastStart >= 7 && changeDiff >= 2) { @@ -55,14 +62,20 @@ void clockCycle(void) } else { clkState = LOW; } - if (dataDelay > 0) { + if (packetDelay > 0) { + packetDelay--; + } else if (dataDelay > 0) { dataDelay--; + dataBit = LOW; } else if (dataState > 0) { int bitToSend = (dataWord >> (dataState - 1)) & 1; //int bitToSend = dataWord & 1; //dataWord = dataWord >> 1; dataBit = !bitToSend ? LOW : HIGH; dataState--; + } else if (packetTail > 0) { + packetTail--; + dataBit = LOW; } else { //digitalWrite(pinData, HIGH); Timer1.stop();