A velocidade Máxima não congela

Olá, a um certo tempo eu juntei esses Sketchs com velocidade e direção do vento o conhecido (Anemometro), mas eu já tentei de varais maneiras em fazer que a velocidade máxima fique congelada, mas não consigo, poderiam me ajudar, eu acho que falta pouco para funcionar.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

int pin = A0; // Declara o pino analógico 0 como “pin”
int Winddir = 0; // Declara o valor inicial em 0
float valor = 0; // declara a variável inicial em 0

// Pin definitions

define Hall sensor 2 // Pino digital 2

LiquidCrystal_I2C lcd(0x27, 20, 4);

// Constants definitions
//const float pi = 3.14159265; // Numero pi
int period = 2000; // Tempo de medida(miliseconds)
int delaytime = 900; // Time between samples (miliseconds)
int radius = 147; // Raio do anemometro(mm)

// Variable definitions
unsigned int Sample = 0; // Sample number
unsigned int counter = 0; // magnet counter for sensor
int RPM = 0; // Revolutions per minute
float speedwind = 0; // Wind speed (m/s)
float windspeed = 0; // Wind speed (km/h)
float v2 = 0;

void setup()
{
// Set the pins
pinMode(2, INPUT);
digitalWrite(2, HIGH); //internall pull-up active
analogReference(DEFAULT);

lcd.init();
lcd.backlight();

//Start serial
Serial.begin(9600); // sets the serial port to 9600 baud

}

void loop(){

Velocidade();

valor = analogRead(pin) * (5.0 / 1023.0); // Calcula a tensão

// Indica a posição norte   10K

if (valor >= 2.24) {
Winddir = 360;
lcd.setCursor(7, 3);
lcd.print(“Norte”);
}

// Indica a posição Nordeste 20K ************
else if (valor >= 1.50) {
Winddir = 45;
lcd.setCursor(7, 3);
lcd.print(“Nordeste”);
}

// Indica a posição oeste 30K ***********
else if (valor >= 1.20) {
Winddir = 90;
lcd.setCursor(7, 3);
lcd.print(“Leste”);
}

// Indica a posição sudeste 40K *************
else if (valor >= 0.96) {
Winddir = 135;
lcd.setCursor(7, 3);
lcd.print(“Sudeste”);
}

// Indica a posição sul 50K
else if (valor >= 0.80) {
Winddir = 180;
lcd.setCursor(7, 3);
lcd.print(“Sul”);
}

// Indica a posição Sodoeste 60K
else if (valor >= 0.68) {
Winddir = 225;
lcd.setCursor(7, 3);
lcd.print(“Sudoeste”);
}

// Indica a posição Oeste 70K ************
else if (valor >= 0.59) {
Winddir = 270;
lcd.setCursor(7, 3);
lcd.print(“Oeste”);
}

// Indica a posição Noroeste 80K *********
else if (valor >= 0.50) {
Winddir = 315;
lcd.setCursor(7, 3);
lcd.print(“Noroeste”);
}

// Caso nenhum valor seja compatível, imprime Fora de Faixa
else {
Winddir = 000;
lcd.setCursor(7, 3);
lcd.print(“Fora de Faixa”);

}

// Imprime os valores do Ângulo na linha 2
lcd.setCursor(0, 2);
lcd.print(“Angulo: “);
lcd.print(Winddir);
lcd.print(” Graus”);

// Imprime a posição do vento na linha 3
lcd.setCursor(0, 3);
lcd.print("Vento: ");

delay(delaytime); //delay between prints

Sample++;
Serial.print(Sample);
windvelocity();
Serial.println(" finished.");
Serial.print("Counter: “);
Serial.print(counter);
Serial.print(”; RPM: “);
RPMcalc();
Serial.print(RPM);
Serial.print(”; Wind speed: ");

//*****************************************************************
//print m/s
WindSpeed();
Serial.print(windspeed);
Serial.print(" [m/s] ");

//*****************************************************************
//print km/h
SpeedWind();
Serial.print(speedwind);
Serial.print(" [km/h] ");
Serial.println();

}

void Velocidade() {

// lcd.clear();

lcd.setCursor(0, 3);
lcd.print("Vento: ");
lcd.setCursor(9, 1);
lcd.print("VMax: ");

lcd.setCursor(18, 0);
lcd.print(“Km”);
lcd.setCursor(0, 0);
lcd.print(“Velocidade:”);
lcd.setCursor(0, 1);
lcd.print("Rpm: ");
lcd.setCursor(5, 1);//12
lcd.print( RPM );
lcd.setCursor(12, 0);
lcd.print(speedwind );

lcd.setCursor(0, 2);
lcd.print(“Angulo: “);
lcd.print(Winddir);
lcd.print(” Graus”);

lcd.setCursor(15, 1);//12
if (speedwind>v2)v2=speedwind,lcd.print (v2,1);

}

// Measure wind speed
void windvelocity(){
speedwind = 0;
windspeed = 0;

counter = 0;
attachInterrupt(0, addcount, RISING);
unsigned long millis();
long startTime = millis();
while(millis() < startTime + period) {
}
}

void RPMcalc(){
RPM=((counter)*60)/(period/1000); // Calculate revolutions per minute (RPM)

}

void WindSpeed(){
windspeed = ((4 * PI * radius * RPM)/60) / 1000; // Calculate wind speed on m/s

}

void SpeedWind(){
speedwind = (((4 * PI * radius * RPM)/60) / 1000)*3.6; // Calculate wind speed on km/h

lcd.setCursor(18, 0);
lcd.print(“Km”);
lcd.setCursor(0, 0);
lcd.print(“Velocidade”);
lcd.setCursor(0, 1);
lcd.setCursor(0, 1);
lcd.print("Rpm: ");
lcd.setCursor(5, 1);//12
lcd.print( RPM );
lcd.setCursor(12, 0);
lcd.print(speedwind );

}

void addcount(){
counter++;

}

Cara, é simples. No loop voce cria uma variavel velocidade máxima. e faz um if comparando a velocidade atual com a a máxima.
if ( vel maxima < velocidade atual))
{ velocidade máxima = velocidade atual;}

Olá meu caro amigo, obrigado pela ajuda, vou tentar fazer essa modificação.