Advertisement
Tarielect

encoder_test

Jul 19th, 2018
386
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.97 KB | None | 0 0
  1. *************************************************************************
  2. //  Name     : mouse_encoder                                              *
  3. //  Author   : Tarilayefa Edward                                          *
  4. //  Notice   : Tari Electronics & Embedded Systems (TEES), 2018.          *
  5. //           : tarielectronics@yahoo.com                                  *
  6. //           : tarielect.edward@gmail.com                                 *
  7. //           : +23408184754883,+23408062251186, Nigeria.                  *
  8. //           : https//:web.facebook.com/groups/teestraining/              *
  9. //           : https//:web.facebook.com/groups/picarduino/                *
  10. //  Date     : 18/07/2018                                                 *
  11. //  Version  : 1.0                                                        *
  12. //  Notes    : A program to read mouse encoder & decode values on lcd &   *
  13. //           : serial monitor.                                            *
  14. //  Reference: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx         *
  15. //  Compiler : avrgcc                                                     *
  16. //  IDE      : Arduino 1.8.5                                              *
  17. //  Target   : Atmega 328, Arduino Uno, Nano.                             *
  18. //*************************************************************************
  19. //#include <LiquidCrystal.h> //add the lcd library
  20. //LiquidCrystal lcd(7,6,5,4,3,2); //(rs,en,d4,d5,d6,d7)
  21. # include <LiquidCrystal_SR.h> //add 2/3 wire lcd library
  22. LiquidCrystal_SR lcd(8,9); //(data,clock)
  23. //------------------------------------------------------------------------
  24. int EncbtnA = 2; //encoder button switch A
  25. int EncbtnB = 3; //encoder button switch B
  26. int lastState = 0;
  27. int steps = 0; //encoder count steps (0 - 255)
  28. int cw = 0; //encoder direction (-1, 0, 1)
  29. int AState = 0;
  30. int BState = 0;
  31. int State = 0; //state (0, 1, 2, 3)
  32. int clearBtn = 10;
  33. //------------------------------------------------------------------------
  34. //------------------------------------------------------------------------
  35. void setup() //setup function
  36. {
  37.     pinMode(EncbtnA, INPUT_PULLUP);//set pin to input mode
  38.     pinMode(EncbtnB, INPUT_PULLUP);
  39.     pinMode(clearBtn, INPUT_PULLUP);
  40.     //------------------------------------------------------------------------
  41.     lcd.begin(16,20); //initialize 16x2 char lcd
  42.     lcd.clear(); //clear screen
  43.     delay(1000); //wait for 1s
  44.     //------------------------------------------------------------------------
  45.     Serial.begin(9600);
  46.     lcd.print(" Mouse Encoder  ");
  47.     Serial.println("Mouse Encoder");
  48.     delay(3000); //wait for 3s
  49. }
  50. //------------------------------------------------------------------------
  51. //------------------------------------------------------------------------
  52. void loop() //main loop function
  53. {
  54.     int clearState = digitalRead(clearBtn);
  55.     getEncoder();//call encoder decode function
  56.     if(clearState == 0){
  57.         steps = 0;
  58.     }
  59.     //------------------------------------------------------------------------
  60.     Serial.print("Mouse Encoder Steps: ");
  61.     Serial.println(steps);
  62.     //------------------------------------------------------------------------
  63.     lcd.setCursor(0,1);
  64.     lcd.print("Steps: ");
  65.     lcd.print(steps);
  66.     lcd.print("    ");
  67. }
  68. //------------------------------------------------------------------------
  69. //------------------------------------------------------------------------
  70. void getEncoder(){ //encoder decode function
  71.     //read the encoder input pin:
  72.     AState = digitalRead(EncbtnA); //read encoder buttonA
  73.     BState = digitalRead(EncbtnB) << 1; //read encoder buttonB
  74.     State = AState | BState; //read encoder button state
  75.     //------------------------------------------------------------------------
  76.     if (lastState != State){
  77.         switch (State) {
  78.         case 0:  //encoder sequence 0
  79.             if (lastState == 2){
  80.                 steps++;
  81.                 cw = 1;
  82.             }
  83.             else if(lastState == 1){
  84.                 steps--;
  85.                 cw = -1;
  86.             }
  87.             break;
  88.             //------------------------------------------------------------------------
  89.         case 1: //encoder sequence 1
  90.             if (lastState == 0){
  91.                 steps++;
  92.                 cw = 1;
  93.             }
  94.             else if(lastState == 3){
  95.                 steps--;
  96.                 cw = -1;
  97.             }
  98.             break;
  99.             //------------------------------------------------------------------------
  100.         case 2: //encoder sequence 2
  101.             if (lastState == 3){
  102.                 steps++;
  103.                 cw = 1;
  104.             }
  105.             else if(lastState == 0){
  106.                 steps--;
  107.                 cw = -1;
  108.             }
  109.             break;
  110.             //------------------------------------------------------------------------
  111.         case 3: //encoder sequence 3
  112.             if (lastState == 1){
  113.                 steps++;
  114.                 cw = 1;
  115.             }
  116.             else if(lastState == 2){
  117.                 steps--;
  118.                 cw = -1;
  119.             }
  120.             break;
  121.             //------------------------------------------------------------------------
  122.         }
  123.     }
  124.     //------------------------------------------------------------------------
  125.     lastState = State; //set encoder state
  126.     //------------------------------------------------------------------------
  127.     delay(1); //wait for 1ms
  128. }
  129. //------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement