Best Sensor for Coin Sorter

You can reduce the size and complexity of your sketch by using arrays:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);

bool debug = false;
unsigned displayTimeMilis = 3000;
bool starting = true;


int lightUmbral[4] = {365, 855, 465, 840};
// int lightUmbral4 = 365;

int coinNumber[4];          // Dime 10, Penny 01, Nickel 05, Quarter 25
bool coinPassing[4];

//int tempNumber100 = 0;
float tempTotalMoney = 0;
bool showingCount = false;

int photocellPin[4] = {A0, A1, A2, A3};     // 10
int photocellReading[4];


void setup()
{
  analogWrite(6, 128);  // display
  analogWrite(9, 128);  // display
  // set up the LCD's number of columns and rows:

  lcd.begin();
  
  // Print a message to the LCD.
  lcd.setCursor(0, 0); // column, row
  lcd.print("Getting Started...");


  digitalWrite(1, HIGH);  // luz
  //Serial.begin(9600);

  delay(1000);        // INITIAL WAIT TIME

  for (int i = 0; i < 4; i++)
  {
    photocellReading[i] = analogRead(photocellPin[i]);
    coinNumber[i] = 0;
    coinPassing[i] = false;
  }
}

void loop()
{
  lcd.setCursor(0, 1);
  // print the number of seconds since reset:

  for (int i = 0; i < 4; i++)
  {
    photocellReading[i] = analogRead(photocellPin[i]);

    if (photocellReading[i] >= lightUmbral[i])
    {
      coinPassing[i] = false;
    }
    else if (!coinPassing[i])
    {
      coinPassing[i] = true;
      coinNumber[i]++;
    }
  }

  if (debug)
  {
    // CLEAN LCD
    lcd.setCursor(0, 0);
    lcd.print("                ");
    lcd.setCursor(0, 1);
    lcd.print("                ");
    // end CLEAN LCD

    lcd.setCursor(0, 0); // column, Row
    lcd.print(photocellReading[0]);

    lcd.setCursor(5, 0); // column, Rowa
    lcd.print(photocellReading[1]);

    lcd.setCursor(10, 0); // column, Row
    lcd.print(photocellReading[2]);

    lcd.setCursor(0, 1); // column, Row
    lcd.print(photocellReading[3]);
  }
  else if (!showingCount && millis() % displayTimeMilis < displayTimeMilis / 2)
  {
    showingCount = true;

    // CLEAN LCD
    lcd.setCursor(0, 0);
    lcd.print("                ");
    lcd.setCursor(0, 1);
    lcd.print("                ");
    // end CLEAN LCD

    lcd.setCursor(0, 0); // column, Row
    lcd.print("10=");
    lcd.setCursor(3, 0);
    lcd.print(coinNumber[0]);

    lcd.setCursor(8, 0); // column, Row
    lcd.print("01=");
    lcd.setCursor(11, 0);
    lcd.print(coinNumber[1]);

    lcd.setCursor(0, 1); // column, Row
    lcd.print("05=");
    lcd.setCursor(4, 1);
    lcd.print(coinNumber[2]);

    lcd.setCursor(8, 1); // column, Row
    lcd.print("25=");
    lcd.setCursor(12, 1);
    lcd.print(coinNumber[3]);

  }
  else if (showingCount && millis() % displayTimeMilis >= displayTimeMilis / 2)
  {
    showingCount = false;

    // CLEAN LCD
    lcd.setCursor(0, 0);
    lcd.print("                ");
    lcd.setCursor(0, 1);
    lcd.print("                ");
    // end CLEAN LCD

    lcd.setCursor(2, 0); // column, Row
    lcd.print("MONEY TOTAL:");

    tempTotalMoney = (coinNumber[0] * 0.10)
                     + (coinNumber[1] * 0.01)
                     + (coinNumber[2] * 0.05)
                     + (coinNumber[3] * 0.25);

    lcd.setCursor(4, 1);
    lcd.print("$");
    lcd.setCursor(5, 1); // column, Row
    lcd.print(tempTotalMoney);
  }
}