multiple function breathalyzer (getting close)

So here's the story, I am designing a breathalyzer for a college project
The breathalyzer will consist of a Q-35 alcohol sensor, a pressure sensor, a piezo speaker, a push button and an LCD.
Im in charge of the LCD and speaker, so values for sensors for now are just representations, next week the team is going to have to merge work
This is my run on how this thing is gona run
Push button initiates system on
LCD display, "hello"
(There will be a dictated warm up period for the Q-35 but not my issue until next week)
Whilst the pressure detector (detects breath rate due to pressure) reads low screen displays "please blow for x seconds"
Whilst pressure is within operational range the readings from the Q-35 are taken and the highest value is the one we're looking for.
IF during operation the pressure detected becomes too low or too high the reading is stopped, a double note is played from the speaker to indicate whether reading was too high or too low (high double note for high and low double note for low).
In this scenario the LCD will display a message for 3 or 4 seconds say "too much/not enough pressure", this will be part of stopping the reading and allowing the code to start over, also when the out range notes are play the user will stop blowing which will put pressure readings at zero and thus restart the system.
If pressure sensor stays within operational range the highest Q-35 reading will be displayed as alcohol content and some kind of message along with it ("your drunk")
Button is let go and the system restarts, if the button is let go at any time the system restarts

So that"s basically the idea of the breathalyzer
What Ive done so far is mess around with arrays (such as LED cyclone, Mario Theme tune) and have them starting and stopping, mid play due to the reading off a button.
I have a "highest value recorder" coded which reads the highest value recorded onto a serial print for every 10 seconds (readings are taken from a potentiometer(code name pot))
I have a "play note depending on input" code (yet again pot)

So my personal project will run like this
Push button (on), yet again if button is not pushed it restarts the system
For low pot2(simulates pressure)reading (<200) display "please blow"
When in pot2 operational range take reading whilst keeping note of the highest reading (from pot1)
If out of pot2 operational range(>800 or <200) play corresponding note and show corresponding display
System restart
If stays within range at end of time reading highest result is displayed

I'm gona put up my codes that I've done so far
I'll explain where they've worked and where they're not meeting requirements and hopefully some kind and gentle soul will be able to give a man a nudge in the right direction

Push Button Cyclone Array Break If Button Un-pushed
use of while and break commands make it work
This is what i intend for the button function on breathalyzer

const int led = 13;
const int numleds = 5;
int pinleds[numleds] = {30,32,34,36,38};
const int button = 10;

void setup()                   
{ 
  pinMode(button, INPUT);         
  digitalWrite(button, HIGH);
  
  for (int i =0; i < numleds; i++)
  {
    pinMode (pinleds[i], OUTPUT);
  }
}

void loop()
{
  while (digitalRead(button) == LOW)//only starts with button pushed 
    {                            //however array will play until the end without further reference
      cyclone(); 
    }
}

void cyclone()
{
 
  for (int i =0; i < numleds; i++) // sets to zero, when less than numleds adds 1 to i 
  {
    if (digitalRead(button) == HIGH)//before the code turns on the next we run a check on the button state
      {
       Break;
      }
    digitalWrite(pinleds[i],HIGH); // each light is turned on after the other with 100 delay 
    delay(100);
    digitalWrite(pinleds[i],LOW);
    delay(100);
      }
  for (int i = numleds - 1; i >= 0; i--)//in reverse 
  {
    if (digitalRead(button) == HIGH)//check again 
      {
       break;
      }
    digitalWrite(pinleds[i],HIGH); // each light is turned on after the other with 100 delay 
    delay(100);
    digitalWrite(pinleds[i],LOW);
    delay(100);
    }
  delay(100);
  
}

Next is Highest Reading Recorder
I have it set up to read potentiometer inputs, at 20 intervals, 500ms apart over 10 seconds
Can speed this up just have it slow for easy viewing
During recording its shows the value of the count, the sensor value and the highest recorded value during the 10 second read time
This is where it hit a snag I want it to suspend reading to display the highest reading for say 3 seconds before it starts the read again, I've tried multiple angles with breaks and if count >=19 commands but alas no joy
Plan on using this for a successful read on the breathalyzer

int pot = A0;
int read_time = 10000;//amount of time for which readings from potentiometer will be taken
int highestValue = 0;//highest value observed during read_time
int potSensorValue = 0;
int count = 0;//counts readings during read_time there will be 100 

void setup()
{
  pinMode(pot, INPUT);
  Serial.begin(9600);
}

void loop()
{
  potSensorValue = analogRead(pot);
  
  for (int i = 0; i < read_time/500; i++)//add 1 until = 20 
    {
      delay(500);// 10000/50 == 20 readings at 500ms apart
      if (potSensorValue > highestValue)// set highestValue with highest read pot value
          {
            highestValue = potSensorValue;
          }
        else if (potSensorValue < highestValue)// if not higher then highestValue remains
        {
          highestValue = highestValue;
        }
        if ( i == 0) //reset 
        {
          highestValue = potSensorValue;
        }
      count = i; //after each delay count goes up 1
      potSensorValue = analogRead(pot);
      Serial.print("count");
      Serial.println(count);//prints no of counts during read_time
      Serial.print("SensorValue"); 
      Serial.println(potSensorValue);
      Serial.print("HighestValue"); 
      Serial.println(highestValue);
     if (count > 19)//when count has be going for 10000 want to display highest value 
    {  
      break;//stops read_time after 10000 or rather it dosnt I know Ive got this in the wrong place but have tried multiple locations
      delay(1000);      
      Serial.print("highest value");//displays highest reading for 10000
      Serial.println(highestValue);//before starting again 
      delay(10000);
     
      
    }
  
}
}

continued ==>

Next we have
Play Note Depending On Input
This is working fairly well, I have it set with an in_range() function and an above_range() function
So when pot range is within it plays 3 second long notes (lets user know time is up without having to look at screen)
and a display of successful reading is shown, I expect in real operation once this happens the user stops blowing and and the pressure reading (the pot in this code) goes to zero and when the system starts again it does so from the beginning.
When sensor reading is above the required range a double high note indicates too much pressure along with a display.
I havent done a command for below range because that scenario i expect will be far less common.
The issue im having here is once the sensor value is in range if the value goes above during the 3 seconds I need it to interupt the in_range function and overwrite it with the above_range function however the in_range plays till end. I have tried using breaks as with my button example but with no luck, also another little qwerk is once with serial read.
When started it displays "please blow" but if you come down from a high reading onto a low one it will only display sensorValue

#include "pitches.h"
int speaker = 13;
int pot = A0;//potentiometer
int sensorValue = 0;

const int num_notes = 3;
const int notes[num_notes] = {NOTE_E5, NOTE_F5, NOTE_FS5};

void setup(){
  pinMode(speaker, OUTPUT);
  Serial.begin (9600);
}

void loop()
{
 sensorValue = analogRead(pot);//read sensor
 Serial.println(sensorValue);
 delay(100); //continue to display value
 int sensorValue = analogRead(A0);
 while (sensorValue > 200)//when over 200 go to action//start condition
    {
      in_range();//>200&&<800
      above_range();//>800
    }
    if (sensorValue < 200);
    {
      Serial.print("please blow");//sensor is waiting for input to start
    }
}

void in_range()
{
  sensorValue = analogRead(pot);
  Serial.println(sensorValue); //cant get this to give as many readings as id like during
  if (sensorValue > 200 && sensorValue < 800)
  {
  for (int i = 0; i < num_notes; i++)//array through the notes, used an array so i could use a break function
    {
      if (sensorValue > 800)
      {
        break;
        above_range();//once break go straight to above_range because sensorValue is >800
      }
      
      tone(speaker, notes[i]);
      delay (1000);//individual notes are 1 sec long
    }
    noTone(speaker);//if 3 secs have passed whilst still in range
    Serial.print("succesful reading"); 
    delay(5000);//finish notes and wait for 5 secs to show stop of array
  }
}


void above_range()
{
  sensorValue = analogRead(pot);
  Serial.println(sensorValue);
  if (sensorValue > 800)
  {
  tone(speaker, NOTE_G6);
  delay(500);
  tone(speaker, NOTE_D7);
  delay(500);
  noTone(speaker);
  Serial.print("too much gusto");
  delay(5000);
  }
  
}

so to conclude any help or direction would be very much appreciated

thank you for taking the time to read this