Sensor de presencia y contador con fotodiodo y fototransistor

Buenas Noches

Una duda quiero hacer un sensor de presencia y un monedero los dos con fotodiodos y fototransistores, quiero que cuando detecte un objeto me mande inserte la moneda y que por medio del monedero cuando llegue a 6 acabe, pero cuando me detecta el objeto no me deja iniciar con el contador del monedero este es mi código no se que es lo que esta mal

Les agradecería su ayuda

#include <LiquidCrystal.h>
LiquidCrystal lcd(22, 23, 24, 25, 26, 27);

const int Lectura_coca = 30;  
const int Lectura_moneda1 = 40;
const int Lectura_moneda2 = 42;

const int Led_coca = 31;
const int Led_moneda1 = 41;
const int Led_moneda2 = 43;

int conteo_moneda1 = 0;
int conteo_moneda2 = 0;

int moneda1 = 0;
int moneda2 = 0;
int total = 0;

int sensor_coca = 0; 
int sensor_moneda1 = 0;
int sensor_moneda2 = 0;


void setup() {

  Serial.begin(9600); 
  lcd.begin(16,2);
  lcd.clear();

  pinMode(Led_coca, OUTPUT);
  pinMode(Led_moneda1, OUTPUT);
  pinMode(Led_moneda2, OUTPUT);

  sensor_coca = digitalRead(Lectura_coca);
  sensor_moneda1 = digitalRead(Lectura_moneda1);
  sensor_moneda2 = digitalRead(Lectura_moneda2); 

}

void loop() {

  if(sensor_coca == HIGH)                              
  {
    digitalWrite(Led_coca, HIGH);                     
    lcd.setCursor(0,0);
    lcd.print("   Si hay en    ");
    lcd.setCursor(0,1);
    lcd.print("   existencia   ");
    delay(500);
    digitalWrite(Led_coca, LOW);

    while(sensor_coca == HIGH)
    {           
    
    lcd.setCursor(0,0);
    lcd.print(" Inserte moneda ");
    lcd.setCursor(0,1);
    lcd.print("      $         ");

    if(sensor_moneda1 == HIGH)                
  {
    digitalWrite(Led_moneda1, HIGH);         
    conteo_moneda1++;                   

      while(sensor_moneda1 == HIGH){       
        sensor_moneda1 = digitalRead(Lectura_moneda1);  
      }
  }

  else{                                       
    digitalWrite(Led_moneda1, LOW);       
  }

    if(sensor_moneda2 == HIGH)        
  {
    digitalWrite(Led_moneda2, HIGH);   
    conteo_moneda2++;            

      while(sensor_moneda2 == HIGH){      
        sensor_moneda2 = digitalRead(Lectura_moneda2);
      }
  }
  else{                                 
    digitalWrite(Led_moneda2, LOW);   
  }

  moneda1 = conteo_moneda1*1;    
  moneda2 = conteo_moneda2*2;   
  total = moneda1+moneda2;     

  lcd.setCursor(7,1);      
  lcd.print(total);      

  if(total > 5){            
    lcd.clear();       
    conteo_moneda1=0;      
    conteo_moneda2=0;          
    total=0;     
    moneda1=0;      
    moneda2=0;   
  }   
      }

  }

  else{                           
    digitalWrite(Led_coca, LOW);        
    lcd.setCursor(0,0);
    lcd.print("    No hay en    ");
    lcd.setCursor(0,1);
    lcd.print("   existencia    ");
    delay(1000);
    lcd.setCursor(0,0);
    lcd.print(" Seleccione otra  ");
    lcd.setCursor(0,1);
    lcd.print("     opcion         ");
  }
}

Debes entender que el bloque setup() solo se ejecuta una vez al iniciar el Arduino, asi que es el unico momento en que sera leido sensor_coca.

Pasa estas 3 lineas al loop()

sensor_coca = digitalRead(Lectura_coca);
sensor_moneda1 = digitalRead(Lectura_moneda1);
sensor_moneda2 = digitalRead(Lectura_moneda2);

Luego tengo la impresion de que los 3 sensores detectaran el paso es decir daran un HIGH mientras vean el objeto, asi que todo tu codigo solo funciona mientras pasa el objeto y luego mientas metes las monedas ya no funciona.