_ROTTARY_SW_func.h 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. // You can assign any number of functions to different pins. How cool is that?
  2. void ROTTARY_SW_sw_INT() {
  3. Serial.println("ROTTARY_SW_sw_INT TRIG");
  4. }
  5. /*
  6. void ROTTARY_SW_dt_INT() {
  7. Serial.println("ROTTARY_SW_dt_INT TRIG");
  8. }
  9. void ROTTARY_SW_clk_INT() {
  10. Serial.println("ROTTARY_SW_clk_INT TRIG");
  11. }
  12. */
  13. void ROTTARY_SW_dt_INT() {
  14. cli(); //stop interrupts happening before we read pin values
  15. reading1 = digitalRead(ROTTARY_SW_clk) ;
  16. reading2 = digitalRead(ROTTARY_SW_dt);
  17. //reading = PIND & 0xC; //read all eight pin values then strip away all but pinA and pinB's values
  18. if (reading1 == 1 and reading1 == 1 and aFlag) { //check that we have both pins at detent (HIGH) and that we are expecting detent on this pin's rising edge
  19. if(encoderPos == ARDUINO_SIZE_MIN_encoderPos) {
  20. } else {
  21. encoderPos --; //increment the encoder's position count
  22. }
  23. bFlag = 0; //reset flags for the next turn
  24. aFlag = 0; //reset flags for the next turn
  25. } else if (reading1 == 0 and reading2 == 1) {
  26. bFlag = 1; //signal that we're expecting pinA to signal the transition to detent from free rotation
  27. }
  28. sei(); //restart interrupts
  29. #ifdef DEBUG
  30. if(DEBUG > 4) {
  31. Serial.print("dt_: #["); Serial.print(encoderPos); Serial.print("] R1["); Serial.print(reading1); Serial.print("] R2["); Serial.print(reading2); Serial.print("] aFlag["); Serial.print(aFlag); Serial.print("] bFlag["); Serial.print(bFlag);
  32. Serial.println("] "); }
  33. #endif
  34. }
  35. void ROTTARY_SW_clk_INT(){
  36. cli(); //stop interrupts happening before we read pin values
  37. reading1 = digitalRead(ROTTARY_SW_clk) ;
  38. reading2 = digitalRead(ROTTARY_SW_dt);
  39. //reading = PIND & 0xC; //read all eight pin values then strip away all but pinA and pinB's values
  40. if (reading1 == 1 and reading2 == 1 && bFlag) { //check that we have both pins at detent (HIGH) and that we are expecting detent on this pin's rising edge
  41. if(encoderPos == ARDUINO_SIZE_MAX_encoderPos) {
  42. } else {
  43. encoderPos ++; //increment the encoder's position count
  44. }
  45. bFlag = 0; //reset flags for the next turn
  46. aFlag = 0; //reset flags for the next turn
  47. // Serial.print("clkA: #["); Serial.print(encoderPos); Serial.print("] R1["); Serial.print(reading1); Serial.print("] R2["); Serial.print(reading2); Serial.print("] AFlag["); Serial.print(aFlag); Serial.print("] bFlag["); Serial.print(bFlag); Serial.println("] ");
  48. } else if (reading1 == 1 ) {
  49. aFlag = 1; //signal that we're expecting pinA to signal the transition to detent from free rotation
  50. }
  51. #ifdef DEBUG
  52. if(DEBUG > 4) {
  53. Serial.print("clkA: #["); Serial.print(encoderPos); Serial.print("] R1["); Serial.print(reading1); Serial.print("] R2["); Serial.print(reading2); Serial.print("] AFlag["); Serial.print(aFlag); Serial.print("] bFlag["); Serial.print(bFlag);
  54. Serial.println("] "); }
  55. #endif
  56. sei(); //restart interrupts
  57. }