int ledPin05 = 2;
int ledPin10 = 3;
int ledPin15 = 4;
int ledPin20 = 5;
int ledPin25 = 6;
int ledPin30 = 7;
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#define OLED_ADDR   0x3C
int x = 14;
Adafruit_SSD1306 display(-1);  // -1 = no reset pin
int button = 11;  // the number of the pushbutton pin
#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
#include <Fonts/FreeSerif9pt7b.h>
 int refsig = 200; //for converting the analog signal coming from hall sensor to digital through arduino code
 int val;//the digital value of the incoming analog signals
 int prev_val = 0;
 int mph;
 int rpm;
 long int t=0, cur_t=0; //time variables
 void setup()
 {
  pinMode(ledPin05, OUTPUT);
  pinMode(ledPin10, OUTPUT);
  pinMode(ledPin15, OUTPUT);
  pinMode(ledPin20, OUTPUT);
  pinMode(ledPin25, OUTPUT);
  pinMode(ledPin30, OUTPUT);
  // initialize and clear display
  display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
  display.clearDisplay();
  display.display();
 // init the pushbutton pin as an input
  pinMode(button, INPUT_PULLUP);
 
  //display test w/ text
  display.setTextSize(2);
  display.setTextColor(WHITE,BLACK);
  display.setCursor(0,0);
  
   Serial.begin(115200);
  // pinMode(A0, INPUT);
  pinMode(10, INPUT);
 }
 void loop()
 {
 
   val = digitalRead(10); //convert it to digital 0,1 form
   
   if (prev_val == 1 && val == 0) { //check for falling edge
      cur_t = micros();
    Serial.print(t);  Serial.print("  ");Serial.println(cur_t);
     rpm = ((1000000 * 60) / (cur_t - t)); //print the rpm
       t = cur_t;
          mph = ((rpm/60)/2); //convert rpm to Hz then to mph for 70mm wheels
          
    display.display(); //Get rid off to get higher speed
    display.setCursor(0,20); //set cursor to top right 
    display.print(mph); //print the mph variable 
    display.print("  MPH"); //print the units
    display.display(); // update the display
  
   
   }
   prev_val = val;

   if(mph >= 5){ //If speed is over 5mph first LED lights up
    digitalWrite(ledPin05, LOW);  //pulls the pin on the Arduino low thus turning on the LED
    digitalWrite(ledPin10, HIGH); // LED is off because pin on Arduino is not being pulled low
    digitalWrite(ledPin15, HIGH);
    digitalWrite(ledPin20, HIGH);
    digitalWrite(ledPin25, HIGH);
    digitalWrite(ledPin30, HIGH);
   }
  if(mph >= 10){ //If speed it above first two LEDs are turned on 
    digitalWrite(ledPin05, LOW);  //LED on
    digitalWrite(ledPin10, LOW);  //LED on
    digitalWrite(ledPin15, HIGH); //LED off
    digitalWrite(ledPin20, HIGH);
    digitalWrite(ledPin25, HIGH);
    digitalWrite(ledPin30, HIGH);
   }

    if(mph >= 15){
    digitalWrite(ledPin05, LOW);
    digitalWrite(ledPin10, LOW);
    digitalWrite(ledPin15, LOW);
    digitalWrite(ledPin20, HIGH);
    digitalWrite(ledPin25, HIGH);
    digitalWrite(ledPin30, HIGH);
   }

    if(mph >= 20){
    digitalWrite(ledPin05, LOW);
    digitalWrite(ledPin10, LOW);
    digitalWrite(ledPin15, LOW);
    digitalWrite(ledPin20, LOW);
    digitalWrite(ledPin25, HIGH);
    digitalWrite(ledPin30, HIGH);
   }

    if(mph >= 25){
    digitalWrite(ledPin05, LOW);
    digitalWrite(ledPin10, LOW);
    digitalWrite(ledPin15, LOW);
    digitalWrite(ledPin20, LOW);
    digitalWrite(ledPin25, LOW);
    digitalWrite(ledPin30, HIGH);
   }

    if(mph >= 30){
    digitalWrite(ledPin05, LOW);
    digitalWrite(ledPin10, LOW);
    digitalWrite(ledPin15, LOW);
    digitalWrite(ledPin20, LOW);
    digitalWrite(ledPin25, LOW);
    digitalWrite(ledPin30, LOW);
   }

   else{ //if no speed above 5 mph is being registered then turn off all LEDS
    digitalWrite(ledPin05, HIGH);
    digitalWrite(ledPin10, HIGH);
    digitalWrite(ledPin15, HIGH);
    digitalWrite(ledPin20, HIGH);
    digitalWrite(ledPin25, HIGH);
    digitalWrite(ledPin30, HIGH);
   }
 }