Taking an input volage and holding it until new input

Hey everyone, just working on a simple project for my electrical class. I have two 7 segment displays wired up to a few bcd converters that are outputting values for a coin detection circuit. The input in this case comes from a photo-transistor that when blocked, produces 5 v. However, when I read this input, the Arduino takes the signal over and over again, and it speeds through the 1-35 case statements.

What I want to know is can I hold this input and not take a new input until the old one is no longer high?
(when the coin is removed, only then does it accept new input)
Here is my code so far:

int j = 6;
int k = 8;
int l = 10;

void setup() {        
  Serial.begin(9600);
  pinMode(j, OUTPUT);
  pinMode(k, OUTPUT);
  pinMode(l, OUTPUT); //thats a "l" not a one
  pinMode(4, INPUT);
}

void loop()
{
 for (int x = 0; x < 40;)
 {
  int p;
  p = digitalRead(4); //what dosen't work
  if (p == 1)
    x= x + 5;  
  printa(x);
 }
 
}

int refresh() //just in case
{
   digitalWrite(j, LOW);
   digitalWrite(j, LOW); //lsb
   digitalWrite(k, LOW);
}

int printa(int x) //what writes the value to the display
{ //works perfectly
  if (x == 0)
  {
     digitalWrite(j, LOW); //lsb
     digitalWrite(k, LOW);
     digitalWrite(l, LOW); //msb
  }
  
  if (x == 5)
  {
     digitalWrite(j, LOW); //lsb
     digitalWrite(k, LOW);
     digitalWrite(l, HIGH); //msb
  }
  
  else if (x == 10)
  {
     digitalWrite(j, LOW); //lsb
     digitalWrite(k, HIGH);
     digitalWrite(l, LOW); //msb
  }
  
  else if (x == 15)
  {
     digitalWrite(j, LOW); //lsb
     digitalWrite(k, HIGH);
     digitalWrite(l, HIGH); //msb
  }
  
    else if (x == 20)
  {
     digitalWrite(j, HIGH); //lsb
     digitalWrite(k, LOW);
     digitalWrite(l, LOW); //msb
  }
  
    
    else if (x == 25)
  {
     digitalWrite(j, HIGH); //lsb
     digitalWrite(k, LOW);
     digitalWrite(l, HIGH); //msb
  }
  
      
    else if (x == 30)
  {
     digitalWrite(j, HIGH); //lsb
     digitalWrite(k, HIGH);
     digitalWrite(l, LOW); //msb
  }
  
      else if (x == 35)
  {
     digitalWrite(j, HIGH); //lsb
     digitalWrite(k, HIGH);
     digitalWrite(l, HIGH); //msb
  }
}

You could use a boolean to check the value, and attach that to an interrupt to change the state of the boolean.

Works perfectly thanks a bunch.

BTW, would it be possible to make this work with 2 inputs?

I tried just copying the loop twice, but it doesn't seem to work.

int j = 6;
int k = 8;
int l = 10;

void setup() {        
  Serial.begin(9600);
  pinMode(j, OUTPUT);
  pinMode(k, OUTPUT);
  pinMode(l, OUTPUT); //thats a "l" not a one
  pinMode(4, INPUT);
  pinMode(3, INPUT);
}

void loop()
{
 boolean here = false;
 int x = 0;
 for (x = 0; x < 40;)
 {
  int p;
  int q;
  p = digitalRead(4);
  q = digitalRead(3);
  if (p == 1)
  {
    if (here != true)
    {
    x= x + 5;
    }
    here = true;
  }
  else if (p == 0)
  {
    here = false;
  }    
  
  if (q == 1)
  {
    if (here != true)
    {
    x= x + 10;
    }
    here = true;
  }
  else if (q == 0)
  {
    here = false;
  } 

  
  
  printa(x);
  if(x >= 36)
    x = 0;
 }
 
}

int refresh() //just in case
{
   digitalWrite(j, LOW);
   digitalWrite(j, LOW); //lsb
   digitalWrite(k, LOW);
}

int printa(int x) //what writes the value to the display
{ //works perfectly
  if (x == 0)
  {
     digitalWrite(j, LOW); //lsb
     digitalWrite(k, LOW);
     digitalWrite(l, LOW); //msb
  }
  
  if (x == 5)
  {
     digitalWrite(j, LOW); //lsb
     digitalWrite(k, LOW);
     digitalWrite(l, HIGH); //msb
  }
  
  else if (x == 10)
  {
     digitalWrite(j, LOW); //lsb
     digitalWrite(k, HIGH);
     digitalWrite(l, LOW); //msb
  }
  
  else if (x == 15)
  {
     digitalWrite(j, LOW); //lsb
     digitalWrite(k, HIGH);
     digitalWrite(l, HIGH); //msb
  }
  
    else if (x == 20)
  {
     digitalWrite(j, HIGH); //lsb
     digitalWrite(k, LOW);
     digitalWrite(l, LOW); //msb
  }
  
    
    else if (x == 25)
  {
     digitalWrite(j, HIGH); //lsb
     digitalWrite(k, LOW);
     digitalWrite(l, HIGH); //msb
  }
  
      
    else if (x == 30)
  {
     digitalWrite(j, HIGH); //lsb
     digitalWrite(k, HIGH);
     digitalWrite(l, LOW); //msb
  }
  
      else if (x == 35)
  {
     digitalWrite(j, HIGH); //lsb
     digitalWrite(k, HIGH);
     digitalWrite(l, HIGH); //msb
  }
}