Duda con contador o control de tiempo para Sensores

Hola
estoy en un proyecto y tengo varios sensores y tengo que contar el tiempo que se lleva en activar de un sensor al otro
eh realizado un contador y me imprime el tiempo cada segundo
por ejemplo se activa el sensor 1 e inicia a marcar el tiempo desde que se activo,luego se activa el sensor 2 sigue el contador desde donde quedo el contador del sensor 1
Si el sensor 1 queso en 5 segundos el sensor 2 continua e inicia en 6 segundos. Pero si el contador del sensor sigue hasta 10 segundos y se desactiva el Sensor 1 no prosigue en 11 como quiero si no que sigue en 6 ya que había quedado en 5 segundos anteriormente.

quisiera resolver esta duda para ya sea que se active un sensor o se desactive la secuencia del contador siga hasta llegar al ultimo sensor.

int contador[8]={0,0,0,0,0,0,0,0};
int sensor[8]={2,3,4,5,6,7,8,9};
int alarma=11;
#define cm 10;

void setup()
{
  Serial.begin(9600);

  for(int x=0;x<=7;x++)
  {
 pinMode(sensor[x],INPUT);
  }

pinMode(alarma,OUTPUT);


}

void loop()
{

  struct sensores
  {
    
    int No[8]={1,2,3,4,5,6,7,8};
    char ubicacion[50]= "Ubicacion: 16°45'21.3''N 93 °09'22.8''W";
    int altura[8]={5,25,45,65,85,105,125,145};
  }st;
 
  
  if(digitalRead(sensor[0])==1 && digitalRead(sensor[1])==0)
  {

     contador[0]++;
     delay(1000);
     Serial.print("Tiempo de lluvia: "); Serial.print(contador[0]); Serial.println(" Segundos");
     Serial.print("Sensor No: "); Serial.println(st.No[0]);
     Serial.println(st.ubicacion);
    int a;
    a=st.altura[0]*cm;
    Serial.print("El nivel del agua es de: ");Serial.print(a); Serial.println(" mm de Precipitacion");
    delay(1000); Serial.println("\n");
  }


    
  if(digitalRead(sensor[1])==1 && digitalRead(sensor[2])==0)
  { 
     contador[1]=contador[0];
     contador[1]++;
      contador[0]=contador[1];
     
     delay(1000);
     
     Serial.print("Tiempo de lluvia: "); Serial.print(contador[1]); Serial.println(" Segundos");
     Serial.print("Sensor No: "); Serial.println(st.No[1]);
     Serial.println(st.ubicacion);
    int a;
    a=st.altura[1]*cm;
    Serial.print("El nivel del agua es de: ");Serial.print(a); Serial.println(" mm de Precipitacion");
    delay(1000);  Serial.println("\n");
  }
  else
  {
 
  }
  

    if(digitalRead(sensor[2])==1 && digitalRead(sensor[3])==0)
  {

     contador[2]=contador[1];
     contador[2]++;
     contador[1]=contador[2];
     
   
     delay(1000);
     Serial.print("Tiempo de lluvia: "); Serial.print(contador[2]); Serial.println(" Segundos");
     Serial.print("Sensor No: "); Serial.println(st.No[2]);
     Serial.println(st.ubicacion);
    int a;
    a=st.altura[2]*cm;
    Serial.print("El nivel del agua es de: ");Serial.print(a); Serial.println(" mm de Precipitacion");
    delay(1000); Serial.println("\n");
  }

khrox:
por ejemplo se activa el sensor 1 e inicia a marcar el tiempo desde que se activo,luego se activa el sensor 2 sigue el contador desde donde quedo el contador del sensor 1

Entonces y primero que todo, ¿No te estás liado? y segundo ¿Usas delays sabiendo que vas a "perder" ese tiempo en el contador (Se interrumpe todo el Arduino)?

Cada vez que se inicie un sensor, su tiempo será = millis() / 1000; Y obtienes los segundos. Fin.

Inicio del sensor 1 -> tiempo sensor 1 = millis() /1000;
Inicio del sensor 2 -> tiempo sensor 2 = millis() /1000;
...

Para que el tiempo sea real dí adiós a los delays() y usa tambien millis() para establecer el retardo. Hay un motón de info sobre esto en el foro.

Si es algo que deba ser muy preciso entonces usa micros() y divide según la escala de tiempo que necesites.

muchos errores en tu código, muy desordenado tmb
esto no compila

#define cm 10;

retira el ;

Raro definir una estructura dentro del loop, primera vez que lo veo, se suele definir como global, aunque supongo funcione no es lo habitual.
Muevelo a globales.

Esto tmb es una redundancia

Serial.println("\n");

con usar println() sufiente
No es un error, es como poner dos veces lo mismo.

Prueba esta versión a ver si compila porque tengo problemas con mi compilador y no pude verificarla

#define 	cm  		10

const byte sensor[8]     = {2,3,4,5,6,7,8,9};
const byte alarma 		 = 11;

unsigned int contador[8] = {0,0,0,0,0,0,0,0};

struct sensores   {
	int No[8]={1,2,3,4,5,6,7,8};
	char ubicacion[50]= "Ubicacion: 16°45'21.3''N 93 °09'22.8''W";
	int altura[8] = {5,25,45,65,85,105,125,145};
} st;

unsigned long start0, start1, start2;
bool disparo0 = true, disparo1 = true, disparo2 = true;

void setup() {
  Serial.begin(9600);

  for (int x=0;x<=7;x++) {
 	   pinMode(sensor[x],INPUT);
  }
  pinMode(alarma,OUTPUT);
}

void loop() {
   
    
	if (digitalRead(sensor[0]) && !digitalRead(sensor[1]))  {
 		if (disparo0) {
 			contador[0]++;
 			start0 = millis()+1000UL;
 			disparo0 = false;
 		}
 		if (millis() > start0) {
			presentacion(contador[0], st.No[0], st.ubicacion, st.altura[0]);
			disparo0 = true;
		}
	}
    
	if (digitalRead(sensor[1]) && !digitalRead(sensor[2]))  { 
		if (disparo1) {
			contador[1] = contador[0];
			contador[1]++;
			contador[0] = contador[1];
 			start1 = millis()+1000UL;
 			disparo1 = false;
 		}
 		if (millis() > start1) {
			presentacion(contador[1], st.No[1], st.ubicacion, st.altura[1]);
			disparo1 = true;
		}
	}

	if (digitalRead(sensor[2]) && !digitalRead(sensor[3]))  {
		if (disparo2) {
			contador[2] = contador[1];
			contador[2]++;
			contador[1] = contador[2];
 			start2 = millis()+1000UL;
 			disparo2 = false;
 		}
 		if (millis() > start2) {
			presentacion(contador[2], st.No[2], st.ubicacion, st.altura[2]);	
			disparo2 = true;
		}
    }
}

void presentacion(unsigned int cont, int sensor, char * ubicacion, int altura) {
	char buffer[40];
	sprintf("Tiempo de lluvia %d seg\nSensor No: %d", cont, sensor);
	Serial.println(buffer);
	Serial.println(ubicacion);
	int valormm = altura*cm;
	sprintf("El nivel del agua es de: %d mm de Precipitacion", valormm);
	Serial.print(buffer);
}

Espero que esto refleje tu mismo funcionamiento.

Esto

!digitalRead(sensor[3]

es lo mismo que esto

digitalRead(sensor[3]==0)

solo para que no te asustes.