Advertisement
learnelectronics

Fidget Spinner Tachometer

Jul 12th, 2017
1,347
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.52 KB | None | 0 0
  1. /*
  2.  * Fidget Spinner Tachometer
  3.  *
  4.  * learnelectronics
  5.  * 11 JUL 2017
  6.  *
  7.  * www.youtube.com/c/learnelectronics
  8.  * arduino0169@gmail.com
  9.  */
  10.  
  11.  
  12.  
  13.  
  14. #include <Wire.h>                                                 //I2C library for OLED
  15. #include <Adafruit_SSD1306.h>                                     //driver for OLED
  16.  
  17. #define OLED_RESET 4                                              //OLED reset on pin 4
  18.  
  19. Adafruit_SSD1306 display(OLED_RESET);                             //create instance of Adafruit_SSD1306 called display
  20.  
  21.  
  22. const int hallSensorPin = 2;                                      // connect the hall effect sensor on pin 2
  23. const unsigned long sampleTime = 1000;                            //sample time 1000mS or 1S
  24. const int maxRPM = 1500;                                          //just a guess              
  25. int rpmMaximum = 0;                                               //var to store new maximum rpms
  26.  
  27. void setup()
  28. {
  29.   display.begin(SSD1306_SWITCHCAPVCC, 0x3C);                      //start the OLED @ hex arrdess ox3c  
  30.   display.display();                                              //send data in bufer to screen
  31.   display.clearDisplay();                                         //clear buffer and display
  32.   pinMode(hallSensorPin,INPUT);                                   //set digital pin to as input
  33.  
  34.   display.setTextSize(1);                                         //display params
  35.   display.setTextColor(WHITE);                                    //display params
  36.   display.setCursor(0,0);                                         //display params
  37.   display.print("Initializing");                                  //send message to buffer
  38.   delay(1000);                                                    //wait
  39.   display.display();                                              //send data in bufer to screen
  40.   display.clearDisplay();                                         //clear buffer and display
  41. }
  42.  
  43. void loop()
  44. {
  45.   delay(100);                                                     //wait 1/10 of a second
  46.   int rpm = getRPM();                                             //int var called rpm equal to val returned by func getRPM
  47.   if (rpm > rpmMaximum) rpmMaximum = rpm;                         //check for new max rpms
  48.   displayRPM(rpm);                                                //call displayrpm func
  49.  
  50.  
  51. }
  52.  
  53. int getRPM()                                                      //function to get rpms
  54. {
  55.   int count = 0;                                                  //set int var count to 0
  56.   boolean countFlag = LOW;                                        //set count flag to 0 (off/false)
  57.   unsigned long currentTime = 0;                                  //set current time to 0
  58.   unsigned long startTime = millis();                             //set startTime to current millis
  59.   while (currentTime <= sampleTime)                               //as long as currenttime is lessthan sampletime
  60.   {                                                               //check hal sensor
  61.     if (digitalRead(hallSensorPin) == HIGH)                       //if high (1/ON)
  62.     {
  63.       countFlag = HIGH;                                           //set or keep countflag high
  64.     }
  65.     if (digitalRead(hallSensorPin) == LOW && countFlag == HIGH)   //but if it's low (hall triggered)
  66.     {
  67.       count++;                                                    //increment count by 1
  68.       countFlag=LOW;                                              //set flag low
  69.     }
  70.     currentTime = millis() - startTime;                           //new current time is current millis - starttime
  71.   }
  72.   int countRpm = int(60000/float(sampleTime))*count;              //do da maths
  73.   return countRpm;                                                //return the rpms
  74. }
  75.    
  76. void displayRPM(int rpm)                                          //displayrpm function
  77. {
  78.  
  79.   display.clearDisplay();                                         //display params
  80.   display.setCursor(0,0);                                         //display params
  81.   display.print("RPM: ");                                         //send title info to buffer
  82.   display.println(rpm,DEC);                                       //send rpm data in decimal format to buffer
  83.   display.print("Max RPM: ");                                     //send title to buffer
  84.   display.print(rpmMaximum, DEC);                                 //send maxrpm data in decimal to buffer
  85.   display.display();                                              //show me the buffer!
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement