aumentare diminuire velocità motore dc

ho provato anche ad inserire un ciclo for ma continua a ripeterlo da 0 a speed senza interrompersi mentre vorrei che una volta arrivato a speed mantenesse la velocità

#define dir_1 46
#define pwm_1 3
#define dir_2 47
#define pwm_2 2                 
#define ant1 23          
#define post1 22
int val1 = 0;
int vval1 = 0;          //PWMMAX 256
int val3 = 0;
int vval3 = 0;
int stato1 = 0;
byte speed = 80;
int pwm_value=0; 



void setup() {  
  Serial.begin(9600); 
  pinMode(ant1, INPUT);
  pinMode(post1, INPUT);
  pinMode(pwm_1,OUTPUT);
  pinMode(dir_1,OUTPUT);
  pinMode(pwm_2,OUTPUT);
  pinMode(dir_2,OUTPUT); 

}  

void loop() {  
  val1 = digitalRead(ant1); 
  val3 = digitalRead (post1);

  //SWITCH1
  
  if ((val1 == HIGH) && (vval1 == LOW)){  
    stato1 = 1 - stato1;  
                 // attesa di 15 millisecondi  
  }   
  
  vval1 = val1;            // ricordiamo il valore precedente di val  
  
    if (stato1 == 1) { 
 for (pwm_value=0; pwm_value<speed; pwm_value=pwm_value+5){
 digitalWrite(dir_1,LOW); //controls the direction the motor
 digitalWrite(dir_2,HIGH);
 analogWrite(pwm_2,pwm_value); 
 analogWrite(pwm_1,pwm_value); 
 delay(100);

}
    digitalWrite(dir_1,LOW);
    digitalWrite(dir_2,HIGH);
    analogWrite(pwm_1,speed);
    analogWrite(pwm_2,speed);  
    }   
  else {  
    digitalWrite(dir_1,HIGH);
    digitalWrite(dir_2,LOW);
    analogWrite(pwm_1,speed);
    analogWrite(pwm_2,speed);

    
  }  

  //SWITCH3

     if ((val3 == HIGH) && (vval3 == LOW)){  
    stato1 = 1 - stato1;  
                    // attesa di 15 millisecondi  
  }   
  
  vval3 = val3;            // ricordiamo il valore precedente di val  
  
    if (stato1 == 1) { 
    digitalWrite(dir_1,LOW);
    digitalWrite(dir_2,HIGH);
    analogWrite(pwm_1,speed);
    analogWrite(pwm_2,speed);

     
  }   
  else {  
    digitalWrite(dir_1,HIGH);
    digitalWrite(dir_2,LOW);
    analogWrite(pwm_1,speed);
    analogWrite(pwm_2,speed);

  }

  
}