Para eso lo ideal sería usar un timer con una interrupción.
En cuanto a tu programa:
1.- ¿ de donde sale presion_baja ?, ni se define, ni cambia en ningún momento.
2.- t no tiene asignado ningún valor la primera ver que se consulta con el IF
3.- t no lo debes de cargar constantemente con millis(), solo cuando se alcancen los 1000ms
4.- ¿ Para que creas y cargas top si le asignas siempre un valor de 1000 ?.
5.- No tiene sentido poner digitalWrite(motor_d,0); en las dos condiciones del IF
Prueba estos cambios:
#define BIG = 1000;
unsigned long t;
void setup()
{
t = millis();
}
void loop()
{
if (presion_baja < 2.4)
{
if ( millis()-t >= BIG)
{
digitalWrite(motor_i,0);
t = millis();
} else digitalWrite(motor_i,1);
digitalWrite(motor_d,0);
}
}