ayuda con proyecto!!!

buenas tardes!! tengo un proyecto que realizar, pero me e quedado atorado, por eso quisiera algo ayuda!!!

el proyecto es mas o menos así, es un sistema pull, tengo 8 controles con un boton y un led (tecnicos), los cuales al ser presionados encenderá el led, y se hara un conteo, el contador al ser diferente de cero, prenderá una luz roja en un semaforo. entones habra otro boton para un surtidor, el cual surtirá una pieza y presionara el boton restara uno al contador y apagando un led de las cajas de los tecnicos y meterá piezas hasta que el semáforo se ponga en verde!!

esta es la parte del codigo que llevo ( no me funciona muy bn el contador).

CONSTANTES
const int tec1 = 0;
const int tec2 = 1;
const int tec3 = 2;
const int tec4 = 3;
const int tec5 = 4;
const int tec6 = 5;
const int tec7 = 6;
const int tec8 = 7;
const int Ltec1 = 8;
const int Ltec2 = 9;
const int Ltec3 = 10;
const int Ltec4 = 11;
const int Ltec5 = 12;
const int Ltec6 = 13;
const int Ltec7 = 14;
const int Ltec8 = 15;
const int semaf = 16;
const int surti = 17;

// VARIABLES
int contatec = 0;
int contasur = 0;

void setup()
{
  pinMode(tec1, INPUT);
  pinMode(tec2, INPUT);
  pinMode(tec3, INPUT);
  pinMode(tec4, INPUT);
  pinMode(tec5, INPUT);
  pinMode(tec6, INPUT);
  pinMode(tec7, INPUT);
  pinMode(tec8, INPUT);
  pinMode(Ltec1, OUTPUT);
  pinMode(Ltec2, OUTPUT);
  pinMode(Ltec3, OUTPUT);
  pinMode(Ltec4, OUTPUT);
  pinMode(Ltec5, OUTPUT);
  pinMode(Ltec6, OUTPUT);
  pinMode(Ltec7, OUTPUT);
  pinMode(Ltec8, OUTPUT);
  pinMode(semaf, OUTPUT);
  pinMode(surti, INPUT);
}

void loop()
{
  if ( digitalRead(tec1) == HIGH )
  {
      if ( digitalRead(tec1) == LOW )
      {
         contatec++;
         delay(100);
      }
  }
  
  if ( digitalRead(tec2) == HIGH )
  {
      if ( digitalRead(tec2) == LOW )
      {
         contatec++;
         delay(100);
      }
  }
  
  if ( digitalRead(tec3) == HIGH )
  {
      if ( digitalRead(tec3) == LOW )
      {
         contatec++;
         delay(100);
      }
  }
  if ( digitalRead(tec4) == HIGH ) 
  {
      if ( digitalRead(tec4) == LOW )
      {
         contatec++;
         delay(100);
      }
  }

  if ( digitalRead(tec5) == HIGH )
  {
      if ( digitalRead(tec5) == LOW )
      {
         contatec++;
         delay(100);
      }
  }
    
  if ( digitalRead(tec6) == HIGH )
  {
      if ( digitalRead(tec6) == LOW )
      {
         contatec++;
         delay(100);
      }
  }
  
  if ( digitalRead(tec7) == HIGH )
  {
      if ( digitalRead(tec7) == LOW )
      {
         contatec++;
         delay(100);
      }
  }
  
  if ( digitalRead(tec8) == HIGH )
  {
      if ( digitalRead(tec8) == LOW )
      {
         contatec++;
         delay(100);
      }
  }

  if ( contatec != 0 )
  {
    digitalWrite(semaf, HIGH);
  }  
  else {
  digitalWrite(semaf, LOW);
    }
    
    
if (digitalRead(surti) == HIGH)
  {
    if (digitalRead(surti) == LOW)
    {
      contatec--;
      delay (100);
    }
  }

}

la parte de los led de los técnicos aun no la resuelvo. cualquier aporte o dirección sera muy apreciada

gracias!!

como crees que funciona esto

if ( digitalRead(tec2) == HIGH )
  {
      if ( digitalRead(tec2) == LOW )
      {
         contatec++;
         delay(100);
      }
  }

Tengo dudas de su funcionamiento. En realidad si detecta el cambio 1 -> 0 que es lo que buscas. Todo pulsador tiene rebotes asi que si no le agregas un debounce estaras teniendo varios falsos positivos.

No se entiende bien que es lo que necesitas hacer, tu código ademas no tiene comentarios.

Aportando a lo que ha comentado el compañero surbyte: un pin no puede estar en dos estados al mismo tiempo, lo que has escrito, tal como lo has escrito pretende que el pin este en dos estados (casi) al mismo tiempo, primero alto y bajo inmediatamente después para poder completar toda la función. Debes entender que una linea de codigo se ejecuta muy rápido en milésimas de segundo.

Lo cierto es que debes de esperar un tiempo prudente para ver si un botón ya ha sido liberado.

supongo que seria algo asi:

if ( digitalRead(tec2) == HIGH )
  {  delay(100);
      if ( digitalRead(tec2) == LOW )
      {
         contatec++;
   
      }
  }

Otra cosa es que veo que esto lo repites en casi todo el código, así que te podría salir una función como esta:

void loop()
{
checkBoton(tec1);                                                  //la función checkBoton revisa el estado del  tec1
checkBoton(tec2);
checkBoton(tec3);
...
...
...
}
void checkBoton( int boton)
{
if(digitalRead(boton) == HIGH)
{delay(100);                                                                    //espera un tiempo prudencial para que se libere el botón
      if(digitalRead(boton)==LOW)   contatec++;    //una vez liberado suma uno a contatec
}       

}

. . . . es un sistema pull, tengo 8 controles con un boton y un led (tecnicos) . . . .,

¿Qué será un boton tecnico (sic)?

¿Y un led "tecnico"?