Responding like crazy
This commit is contained in:
commit
829246c332
85
terminal_keyboard_emulator.ino
Normal file
85
terminal_keyboard_emulator.ino
Normal file
@ -0,0 +1,85 @@
|
||||
#include <TimerOne.h>
|
||||
|
||||
const int pinData = 6;
|
||||
const int pinStatus = 7;
|
||||
|
||||
void setup(void)
|
||||
{
|
||||
pinMode(pinData, OUTPUT);
|
||||
//Timer1.initialize(60);
|
||||
//Timer1.attachInterrupt(clockCycle);
|
||||
|
||||
Timer1.initialize(1100/2);
|
||||
Timer1.attachInterrupt(clockCycle);
|
||||
Timer1.stop();
|
||||
|
||||
pinMode(pinStatus, INPUT_PULLUP);
|
||||
attachInterrupt(digitalPinToInterrupt(pinStatus), statusCycle, CHANGE);
|
||||
|
||||
Serial.begin(9600);
|
||||
}
|
||||
|
||||
volatile long lastChange = 0;
|
||||
volatile long lastStart = 0;
|
||||
volatile int x = 0;
|
||||
volatile int dataWord = 0;
|
||||
volatile int dataState = 0;
|
||||
volatile int dataDelay = 0;
|
||||
volatile int clkState = LOW;
|
||||
|
||||
void statusCycle() {
|
||||
long timeNow = millis();
|
||||
long changeDiff = timeNow - lastChange;
|
||||
lastChange = timeNow;
|
||||
if (changeDiff >= 10) {
|
||||
lastStart = timeNow;
|
||||
|
||||
dataWord = (' ' + x);
|
||||
dataState = 8;
|
||||
dataDelay = 0;
|
||||
x = (x + 1) % 100;
|
||||
clkState = HIGH;
|
||||
Timer1.start();
|
||||
}
|
||||
if (timeNow - lastStart >= 7 && changeDiff >= 2) {
|
||||
//dataWord = 0b1000000011 | (('A' + x) << 2);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void clockCycle(void)
|
||||
{
|
||||
if (clkState == LOW) {
|
||||
clkState = HIGH;
|
||||
//digitalWrite(pinData, (dataState > 0) ? LOW : HIGH);
|
||||
} else {
|
||||
clkState = LOW;
|
||||
if (dataDelay > 0) {
|
||||
dataDelay--;
|
||||
} else if (dataState > 0) {
|
||||
int bitToSend = (dataWord >> (dataState - 1)) & 1;
|
||||
//digitalWrite(pinData, bitToSend ? LOW : HIGH);
|
||||
dataState--;
|
||||
if (dataState <= 0) {
|
||||
Timer1.stop();
|
||||
}
|
||||
} else {
|
||||
//digitalWrite(pinData, HIGH);
|
||||
}
|
||||
}
|
||||
if (dataDelay <= 0 && dataState > 0)
|
||||
digitalWrite(pinData, clkState);
|
||||
else
|
||||
digitalWrite(pinData, HIGH);
|
||||
}
|
||||
|
||||
void loop(void)
|
||||
{
|
||||
delay(500);
|
||||
|
||||
/*noInterrupts();
|
||||
dataWord = 0b1000000011 | (('A' + x) << 2);
|
||||
dataState = 16;
|
||||
x = (x + 1) % 30;
|
||||
interrupts();*/
|
||||
}
|
Loading…
Reference in New Issue
Block a user