Spinner fidget tachometer

Code for BASIC version

int State2 = 0;
int Last2;
int Pasos2;
int PicosNum = 3;
unsigned long previousMillis = 0; 
int RPS;
int Ranking;
int LastRanking;

void setup() {
Serial.begin(9600);              // Use Serial Monitor window
pinMode(2, INPUT);
}

void loop()
{
  State2 = digitalRead(2);  // Read the sensor

          //===== Eliminate Repeated counts if Last2 is = 1 ==================>>>>>>>
          if ((State2 == 1) & (Last2 == 0))   
             {
              Pasos2 = Pasos2 + 1;

              Last2 = 1;                                                              
             }
          else if (State2 == 0) 
             {
              Last2 = 0;   
             }   
          //-------------------------------------------------------------------------

          //===== Read Numbers every 1 second ====================>>>>>>>>>>>>>>>>>
          unsigned long currentMillis = millis();
          if (currentMillis - previousMillis >= 1000)
             {
                previousMillis = currentMillis;
                 RPS = (Pasos2 / PicosNum);
                 Serial.print("Rev X Sec  =     ");  
                 Serial.print((RPS), DEC);   
                 Pasos2 = 0;
                        if ((RPS >= 5) && (RPS <= 10))    //>> Add Numbers to Ranking every 1 second From 10 to 6 Revolutions per seconds     
                           {
                            Ranking = Ranking + 1;
                            LastRanking = Ranking;
                            Serial.print(" / Ranking      ");  
                            Serial.print((LastRanking), DEC);  
                           } 
                          else 
                           {
                            Ranking = 0;
                           }            
                Serial.println(""); 

             }

}

________________________________________________________________________________________________________________________________________________________________________________________________

Code for buttons and LCD, advance version

int State2 = 0;
int Last2;
int Pasos2;
int PicosNum = 3;
unsigned long previousMillis = 0; 
int RPS;
int Ranking;
int LastRanking;
int BotonCual;
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);


void setup() {
                                Serial.begin(9600);              // Use Serial Monitor window
lcd.begin(16, 2);              // start the library
pinMode(2, INPUT);
pinMode(3, OUTPUT); 
digitalWrite(3, LOW);  
}

void loop()
{
//================================================ Show Present >>>>>>>>>>>>
if (digitalRead(3)==0) //Checa Presensia ON
{
    if (digitalRead(2)==1) //Checa Presensia ON
      {
       lcd.setCursor(14,0);
       lcd.print("X");
      }
}
else
{
    if (digitalRead(2)==0) //Checa Presensia ON
      {
       lcd.setCursor(14,0);
       lcd.print("X");
      } 
}  
//================================================ Select Picos >>>>>>>>>>>>
BotonCual = analogRead(0);   
if ((BotonCual > 390) && (BotonCual< 450)){PicoCuantos();}  
if ((BotonCual > 80) && (BotonCual< 120)){PicoCuantosUP();}  
if ((BotonCual > 240) && (BotonCual< 280)){PicoCuantosDN();} 
if ((BotonCual > 630) && (BotonCual< 650)){PrendeElNegro();}  
//----------------------------------------------------------------------
  
  State2 = digitalRead(2);  // Read the sensor

          //===== Eliminate Repeated counts if Last2 is = 1 ==================>>>>>>>
          if ((State2 == 1) & (Last2 == 0))   
             {
              Pasos2 = Pasos2 + 1;

              Last2 = 1;                                                              
             }
          else if (State2 == 0) 
             {
              Last2 = 0;   
             }   
          //-------------------------------------------------------------------------

          //===== Read Numbers every 1 second ====================>>>>>>>>>>>>>>>>>
          unsigned long currentMillis = millis();
          if (currentMillis - previousMillis >= 1000)
             {
                previousMillis = currentMillis;
                 RPS = (Pasos2 / PicosNum);
                                             Serial.print("Rev X Sec  =     ");  
                                             Serial.print((RPS), DEC);   
                  lcd.setCursor(0,0);
                  lcd.print("Spin RPS       ");
                  lcd.setCursor(11,0);
                  lcd.print((RPS), DEC);
                  Pasos2 = 0;
                        if ((RPS >= 5) && (RPS <= 10))    //>> Add Numbers to Ranking every 1 second From 10 to 6 Revolutions per seconds     
                           {
                            Ranking = Ranking + 1;
                            LastRanking = Ranking;
                                            Serial.print(" / Ranking      ");  
                                            Serial.print((LastRanking), DEC);  
                            lcd.setCursor(0,1);
                            lcd.print("Ranking         ");
                            lcd.setCursor(12,1);
                            lcd.print((LastRanking), DEC);                   
                           } 
                          else 
                           {
                            Ranking = 0;
                           }            
                                              Serial.println(""); 

             }
}
void PicoCuantos()
{
lcd.clear();
lcd.setCursor(0,0);     
lcd.print("Pik X Rev =      "); 
lcd.setCursor(10,0);   
lcd.print(PicosNum);
delay(1000);
}

void PicoCuantosUP()
{
lcd.clear();
lcd.setCursor(0,0);     
lcd.print("Pik X Rev =      "); 
lcd.setCursor(10,0);   
PicosNum = PicosNum + 1;
if (PicosNum >=10){PicosNum=10;}
lcd.print(PicosNum);
delay(1000);
}

void PicoCuantosDN()
{
lcd.clear();
lcd.setCursor(0,0);     
lcd.print("Pik X Rev =      "); 
lcd.setCursor(10,0);   
PicosNum = PicosNum - 1;
if (PicosNum <= 1){PicosNum=1;}
lcd.print(PicosNum);
delay(1000);
}

void PrendeElNegro()
{
if (digitalRead(3)==1) //Prende el  Innnfrared para detectar Negro
  {
    digitalWrite(3, LOW); 
    lcd.setCursor(15,0);
    lcd.print(" ");
    delay(1000);
  }
else
  {
    digitalWrite(3, HIGH); 
    lcd.setCursor(15,0);
    lcd.print("O");
    delay(1000);
  }
}