     }
   }
 
+  // Probe screen
+  if (screen.probe) {
+    int v = analogRead(PD_SCREEN_PIN);
+    if ((screen.value == LOW && v > SCREEN_THRESH_HIGH) || (screen.value != LOW && v < SCREEN_THRESH_LOW)) {
+      screen.t = time_us;
+      screen.count++;
+      led_state = !led_state;
+      screen.value = !screen.value;
+    }
+  }
+
   // Send out any triggers with autosend and pending data
   for (int i = 0; i < TRIGGER_COUNT; i++) {
 

  led_state = !led_state;
}

void irq_screen(void) {
  screen.t = time_us;
  screen.value = digitalRead(PD_SCREEN_PIN);
  screen.count++;
  // digitalWrite(LED_PIN_YELLOW, screen.value);
  led_state = !led_state;
}

void send_trigger(struct trigger t) {
  char s[256];
  sprintf(s, "G %c %ld %d %d", t.tag, t.t, t.value, t.count);

      Serial.println(beep_time);
      Serial.send_now();
    } else if (cmd == CMD_AUTO_SCREEN_ON) {
      screen.value = analogRead(PD_SCREEN_PIN) > SCREEN_THRESH_HIGH;
      screen.autosend = true;
      screen.probe = true;
      send_ack(CMD_AUTO_SCREEN_ON);
    } else if (cmd == CMD_AUTO_SCREEN_OFF) {
      screen.autosend = false;
      screen.probe = false;
      send_ack(CMD_AUTO_SCREEN_OFF);
    } else if (cmd == CMD_SEND_LAST_SCREEN) {
      send_trigger(screen);
