Converter for Consul 262.5 terminal keyboard and VDX 52600 terminal.
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

96 Zeilen
1.9 KiB

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