lamp reageert niet op random

Mijn code werkt goed op 1 probleem na.
Als A0 HIGH is dan gaat mn lampje niet knipperen op de int knipper maar A0 reageert maar 1 keer.

Hoe zorg ik ervoor dat als ik op een knopje klik dat de code doorgaat?

const int lamp1 = 13;
const int relay = 7;

int knipper;
int knopje1;
int knopje2; 
int kern = 1;
int fossiel = 2;

boolean flag1 = true;
boolean flag2 = false;

void setup() {
pinMode (knopje1, INPUT);
pinMode (knopje2, INPUT);
pinMode (relay, OUTPUT);
pinMode (lamp1, OUTPUT);

Serial.begin(9600);
}

void loop() {

  knipper = random(20, 31);
  Serial.println(knipper);
  delay(100);

  if(digitalRead(A2)==HIGH){

    while(digitalRead(A2) == HIGH);

    flag1 = flag1;

    if (flag1){
      digitalWrite(relay, LOW);
      Serial.write(kern);
      digitalWrite(lamp1, HIGH);
    }
  }

  if(digitalRead(A0)== HIGH){
    Serial.write(fossiel);
    if(digitalRead(A0)== LOW){
    if (knipper ==  20 || 21 || 22){
      digitalWrite(relay, HIGH);
      digitalWrite(lamp1, HIGH);
    }
    else if(knipper >= 23 || knipper <= 30){
      digitalWrite(relay, LOW);
      digitalWrite(lamp1, LOW);
    }
  } 
  }
}

er gaat wat mis bij die if high dan kan hij niet ook LOW zijn,
flag=flag heeft geen zin en doet ook niks
onderin staat else moet dat geen && zijn?

wat is de waarde van knopje1 en knopje 2 in setup?

wat doet if (knipper == 20 || 21 || 22)?

hoe zijn de drukknoppen verbonden, naar + of naar GND, gebruik je pull-up of pull down weerstanden?