Sensor that gives PWM reading in pulse train

I would use an interrupt, with mode CHANGE so that you get an interrupt on both edges. In the interrupt service routine, get the current time by calling micros(). If the pin is low, then you are at the start of T1, T2 or T3, so just store the value you read (in an 'unsigned long' variable). If the pin is high, subtract the value you stored earlier, that gives you the T1, t2 or T3 value in microseconds. Use micros() rather than millis(), because millies() is less accurate and is subject to jitter - it sometimes advances by 2 instead of 1.

Something like this (warning: untested code!):

unsigned long lastFallingTime;
volatile unsigned long lettura[3];
byte index = 0;

void setup()
{
  attachInterrupt(2, isr, CHANGE);
  Serial.begin(19200);
}

void isr()
{
  unsigned long now = micros();
  if (digitalRead(2) == LOW)
  {
    // falling edge seen
    if (now - lastFallingTime > 2000000UL)
    {
       index = 0;   // we've seen the pause, so reset the counter
    }
    lastFallingTime = now;
  }
  else
  {
    // rising edge seen
    if (index < 3)
    {
      lettura[index] = now - lastFallingTime;
      ++index;
    }
  }
}

void loop()
{
  delay(5000);
  for (int i = 0; i < 3; ++i)
  {
    noInterrupts();
    unsigned long t = lettura[i];
    interrupts();
    Serial.print("Lettura ");
    Serial.print(i);
    Serial.print('=');
    Serial.println(t);
  }
}

[EDIT: corrected code so that it at least compiles without warnings]