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.
 
 
 

62 lines
1.3 KiB

  1. /*
  2. Keyboard Clicker
  3. */
  4. int outPinsSize = 2;
  5. int outPins[] = { 13, 12 };
  6. int outShift = 0;
  7. int lastCount = 0;
  8. int outBell = 11;
  9. #define RELAY_OFF HIGH
  10. #define RELAY_ON LOW
  11. void setup() {
  12. pinMode(LED_BUILTIN, OUTPUT);
  13. for (int i = 0; i < outPinsSize; i++) {
  14. pinMode(outPins[i], OUTPUT);
  15. digitalWrite(outPins[i], RELAY_OFF);
  16. }
  17. pinMode(outBell, OUTPUT);
  18. digitalWrite(outBell, RELAY_OFF);
  19. // initialize serial:
  20. Serial.begin(115200);
  21. }
  22. void loop() {
  23. }
  24. /*
  25. SerialEvent occurs whenever a new data comes in the hardware serial RX. This
  26. routine is run between each time loop() runs, so using delay inside loop can
  27. delay response.
  28. */
  29. void serialEvent() {
  30. while (Serial.available()) {
  31. // get the new byte:
  32. char inChar = (char)Serial.read();
  33. //Serial.println(inChar);
  34. if (inChar >= '0' && inChar <= '9') {
  35. int count = inChar - '0';
  36. if (count >= lastCount) {
  37. outShift = (outShift + 1) % outPinsSize;
  38. }
  39. lastCount = count;
  40. for (int i = 0; i < outPinsSize; i++) {
  41. digitalWrite(outPins[(i + outShift) % outPinsSize], ((count > i) ? RELAY_ON : RELAY_OFF));
  42. }
  43. } else {
  44. if (inChar == '(') {
  45. digitalWrite(outBell, RELAY_ON);
  46. delay(20);
  47. digitalWrite(outBell, RELAY_OFF);
  48. }
  49. }
  50. }
  51. }