       players[i]->init();
       players[i]->clock->start();
       players[i]->update_display();
+      //players[i]->display_test_pattern();
     }
   };
 

  };

  void update_display() {
    static char timea[12];
    ltoa(clock->time_remaining_ms/100, timea, 10);
    screen->display_text(timea);
  };

  void tick() {

    }
    last_update_ms = millis();
  };

  char *human_time_remaining() {
    static char text[8];
    unsigned int minutes_left = time_remaining_ms / 1000 / 60;
    unsigned int seconds_left = (time_remaining_ms - (minutes_left * 60000)) / 1000;
    unsigned int tenths_left = (time_remaining_ms - ((minutes_left * 60000) + (seconds_left * 1000))) / 100;
    //serprintf("min %d sec %d tenths %d\r\n", minutes_left, seconds_left, tenths_left);
    snprintf(text, sizeof(text), "%02d:%02d.%d", minutes_left, seconds_left, tenths_left);
    //serprintf("%s\r\n", text);
    return text;
  }

};

class Player {
