Przeglądaj źródła

Responding like crazy

master
Dejvino 1 rok temu
commit
829246c332
1 zmienionych plików z 85 dodań i 0 usunięć
  1. +85
    -0
      terminal_keyboard_emulator.ino

+ 85
- 0
terminal_keyboard_emulator.ino Wyświetl plik

@@ -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();*/
}

Ładowanie…
Anuluj
Zapisz