Advertisement
learnelectronics

Fidget Spinner Tachometer

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