Converter for Consul 262.5 terminal keyboard and VDX 52600 terminal.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

83 lines
1.6 KiB

  1. #include <TimerOne.h>
  2. const int pinData = 6;
  3. const int pinStatus = 7;
  4. void setup(void)
  5. {
  6. pinMode(pinData, OUTPUT);
  7. //Timer1.initialize(60);
  8. //Timer1.attachInterrupt(clockCycle);
  9. Timer1.initialize(1100/2);
  10. Timer1.attachInterrupt(clockCycle);
  11. Timer1.stop();
  12. pinMode(pinStatus, INPUT_PULLUP);
  13. attachInterrupt(digitalPinToInterrupt(pinStatus), statusCycle, CHANGE);
  14. Serial.begin(9600);
  15. }
  16. volatile long lastChange = 0;
  17. volatile long lastStart = 0;
  18. volatile int x = 0;
  19. volatile int dataWord = 0;
  20. volatile int dataState = 0;
  21. volatile int dataDelay = 0;
  22. volatile int clkState = LOW;
  23. void statusCycle() {
  24. long timeNow = millis();
  25. long changeDiff = timeNow - lastChange;
  26. lastChange = timeNow;
  27. if (changeDiff >= 10) {
  28. lastStart = timeNow;
  29. dataWord = ('1' + x) << 3;
  30. dataState = 10;
  31. dataDelay = 1;
  32. x = (x + 1) % 3;
  33. clkState = HIGH;
  34. Timer1.start();
  35. }
  36. if (timeNow - lastStart >= 7 && changeDiff >= 2) {
  37. //dataWord = 0b1000000011 | (('A' + x) << 2);
  38. }
  39. }
  40. void clockCycle(void)
  41. {
  42. int dataBit = HIGH;
  43. if (clkState == LOW) {
  44. clkState = HIGH;
  45. } else {
  46. clkState = LOW;
  47. }
  48. if (dataDelay > 0) {
  49. dataDelay--;
  50. } else if (dataState > 0) {
  51. int bitToSend = (dataWord >> (dataState - 1)) & 1;
  52. //int bitToSend = dataWord & 1;
  53. //dataWord = dataWord >> 1;
  54. dataBit = !bitToSend ? LOW : HIGH;
  55. dataState--;
  56. } else {
  57. //digitalWrite(pinData, HIGH);
  58. Timer1.stop();
  59. }
  60. digitalWrite(pinData, dataBit);
  61. }
  62. void loop(void)
  63. {
  64. delay(500);
  65. /*noInterrupts();
  66. dataWord = 0b1000000011 | (('A' + x) << 2);
  67. dataState = 16;
  68. x = (x + 1) % 30;
  69. interrupts();*/
  70. }