larryl79

Untitled

Mar 23rd, 2022 (edited)
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.09 KB | None | 0 0
  1. #include <Arduino.h>
  2. #include <LiquidCrystal_I2C.h>
  3. #define LCDADDR 0x27 // address of LCD on I2C bus
  4. #define LCDLINES 4
  5. #define LCDROWS 20
  6.  
  7. //Defining rotary pins
  8. //
  9. #include <ESPRotary.h> // https://github.com/LennartHennigs/ESPRotary/
  10. #include <Button2.h> // https://github.com/LennartHennigs/Button2
  11. #define ROTARY_PIN1 4 // CLK
  12. #define ROTARY_PIN2 15 // DT
  13. #define BUTTON_PIN 27 // Button / switch
  14.  
  15. #define CLICKS_PER_STEP 2 // this number depends on your rotary encoder
  16.  
  17. /////////////////////////////////////////////////////////////////
  18.  
  19. ESPRotary r;
  20. Button2 b;
  21.  
  22. /////////////////////////////////////////////////////////////////
  23.  
  24. LiquidCrystal_I2C lcd(LCDADDR, LCDROWS, LCDLINES);
  25.  
  26. int page_counter = 1;
  27.  
  28. unsigned long lastDebounceTime = 0; // the last time the output pin was toggled
  29. unsigned long debounceDelay = 50;
  30.  
  31. // custom up arrow char
  32. byte UP[8] = {
  33. 0b00100,
  34. 0b01110,
  35. 0b11111,
  36. 0b00100,
  37. 0b00100,
  38. 0b00000,
  39. 0b00000,
  40. 0b00000
  41. };
  42.  
  43. // custom char down arrow
  44. byte DOWN[8] = {
  45. 0b00000,
  46. 0b00000,
  47. 0b00000,
  48. 0b00100,
  49. 0b00100,
  50. 0b11111,
  51. 0b01110,
  52. 0b00100
  53. };
  54.  
  55. byte REPEAT[8] = {
  56. 0B00000,
  57. 0B00010,
  58. 0B11111,
  59. 0B10010,
  60. 0B00000,
  61. 0B01001,
  62. 0B11111,
  63. 0B01000
  64. };
  65.  
  66. // rotary on change
  67. void rotate(ESPRotary& r) {
  68. Serial.println(r.getPosition());
  69. Serial.println(page_counter);
  70. }
  71.  
  72. // rotary on left or right rotation
  73. void showDirection(ESPRotary& r) {
  74. Serial.println(r.directionToString(r.getDirection()));
  75. if (r.directionToString(r.getDirection()) == "LEFT" && page_counter < 6)
  76. {
  77. lcd.clear();
  78. if (page_counter >= 6)
  79. { page_counter = 6; }
  80. else
  81. { page_counter++; }
  82. }
  83.  
  84. if (r.directionToString(r.getDirection()) == "RIGHT" && page_counter > 0)
  85. {
  86.  
  87. lcd.clear();
  88. if (page_counter <= 1)
  89. { page_counter = 1; }
  90. else
  91. { page_counter--; }
  92. }
  93. }
  94.  
  95. // single click
  96. void click(Button2& btn) {
  97. Serial.println("Click!");
  98. }
  99.  
  100. // long click
  101. void resetPosition(Button2& btn) {
  102. r.resetPosition();
  103. Serial.println("Reset!");
  104. }
  105.  
  106.  
  107. void setup()
  108. {
  109. Serial.begin(115200);
  110. delay(50);
  111. Serial.println("\n\nSimple Counter");
  112.  
  113. r.begin(ROTARY_PIN1, ROTARY_PIN2, CLICKS_PER_STEP);
  114. r.setChangedHandler(rotate);
  115. r.setLeftRotationHandler(showDirection);
  116. r.setRightRotationHandler(showDirection);
  117.  
  118. b.begin(BUTTON_PIN);
  119. b.setTapHandler(click);
  120. b.setLongClickHandler(resetPosition);
  121.  
  122. lcd.begin();
  123. lcd.clear();
  124. lcd.createChar(1, UP);
  125. lcd.createChar(2, DOWN);
  126. lcd.createChar(6, REPEAT);
  127. }
  128.  
  129.  
  130. /////////////////////////////////////////////////////////////////
  131.  
  132.  
  133. /////////////////////////////////////////////////////////////////
  134.  
  135.  
  136. void loop()
  137. {
  138. r.loop();
  139. b.loop();
  140.  
  141.  
  142. // ------- WRITE ALL PAGE COUNTER ------ //
  143. switch (page_counter)
  144. {
  145. case 1: // page 1
  146. {
  147. lcd.setCursor(1,0);
  148. lcd.print("Page 1");
  149. lcd.setCursor(1,1);
  150. lcd.print("1st page ");
  151.  
  152. // show arrow
  153. lcd.setCursor(0,LCDLINES - 1);
  154. lcd.write(byte(2));
  155. }
  156. break;
  157.  
  158. case 2: // page 2
  159. {
  160. lcd.setCursor(1,0);
  161. lcd.print("Page 2");
  162.  
  163. // show arrows
  164. lcd.setCursor(0,0);
  165. lcd.write(byte(1));
  166. lcd.setCursor(0,LCDLINES - 1);
  167. lcd.write(byte(2));
  168. }
  169. break;
  170.  
  171. case 3: // page 3
  172. {
  173. lcd.setCursor(1,0);
  174. lcd.print("Page 3");
  175.  
  176. // show arrows
  177. lcd.setCursor(0,0);
  178. lcd.write(byte(1));
  179. lcd.setCursor(0,LCDLINES - 1);
  180. lcd.write(byte(2));
  181. }
  182. break;
  183.  
  184. case 4: // page 4
  185. {
  186. lcd.setCursor(1,0);
  187. lcd.print("Page 4");
  188.  
  189. // show arrows
  190. lcd.setCursor(0,0);
  191. lcd.write(byte(1));
  192. lcd.setCursor(0,LCDLINES - 1);
  193. lcd.write(byte(2));
  194. }
  195. break;
  196.  
  197. case 5: // page 5
  198. {
  199. lcd.setCursor(1,0);
  200. lcd.print("Page 5");
  201.  
  202. // show arrows
  203. lcd.setCursor(0,0);
  204. lcd.write(byte(1));
  205. lcd.setCursor(0,LCDLINES - 1);
  206. lcd.write(byte(2));
  207. }
  208. break;
  209.  
  210. case 6: // page 6
  211. {
  212. lcd.setCursor(2,0);
  213. lcd.print("Page 6");
  214. lcd.setCursor(2,1);
  215. lcd.print("Last Page");
  216.  
  217. // show arrows
  218. lcd.setCursor(0,0);
  219. lcd.write(byte(1));
  220. }
  221. break;
  222.  
  223. } // switch end
  224.  
  225.  
  226. } // loop end}
Add Comment
Please, Sign In to add comment