Help with Multiple Tasks Troubleshooting

I am trying to trigger a buzzer for 500 milliseconds after I press a button using no delays, HOWEVER, it doesn’t work at all when I try it. It does the little startup buzz but nothing when I press the button.

Here is my code:

unsigned long buzzMillis = 0; 
unsigned long timer = 0;  

byte bPower = 22;
byte fPower = 37;
byte fBuzz = 40;

boolean powerB = false;
boolean powerF = false;
boolean buzzF = false;

void setup()
{
  //Controls
  pinMode(bPower, INPUT_PULLUP);
  pinMode(fPower, OUTPUT);
  pinMode(fBuzz, OUTPUT);
  
  digitalWrite(fBuzz, HIGH);

  delay(500);

  digitalWrite(fBuzz,LOW);
}

void loop()
{
  timer = millis();
  
  bVals();
  buzzerOff();
  
  //other tasks
}  

void bVals()
{
  if(timer - buzzMillis >= 500)
  {
    if(bPower == HIGH)
    {
      powerB = !powerB;

      digitalWrite(fBuzz, HIGH);
      buzzMillis = timer;
    }
  }
}

void buzzerOff() 
{ 
  if(buzzF == HIGH && timer - buzzMillis >= 500)
  {   
    digitalWrite(fBuzz, LOW);
  }
}

Btw, I’m using an ATmega 2650, which I don’t think it makes any difference, but I also thought that this code would work, so… ¯_(ツ)_/¯

On line 40 try:

    if(digitalRead(bPower) == HIGH)

outsider:
On line 40 try:

    if(digitalRead(bPower) == HIGH)

Thanks! I didn't even notice that.