void app_start(int, char**) { srand(time(NULL)); mbed_trace_init(); tr_info("Application start"); tr_info("Set I2C frequency"); i2c.frequency(400000); tr_info("Initialize user interface module"); oled = new Adafruit_SSD1306_I2c(i2c, YOTTA_CFG_HARDWARE_PINS_D2); mcp_keys = new MCP23008(i2c); for(uint8_t i = 0; i < 4; ++i) { mcp_keys->setup(i, MCP23008::IN); mcp_keys->pullup(i, true); } tr_info("Initialize state object"); state = new State(i2c); tr_info("First screen out"); state->startup_phase = State::STARTUP_CONF; scr = new SplashScreen(*oled, *state); scr->render(); tr_info("Load config"); state->config.load(); state->startup_phase = State::STARTUP_NM; scr->render(); tr_info("Start NetworkManager"); wait_ms(100); nm = new NetworkManager(PIN_ESP_TX, PIN_ESP_RX, 9600); state->nm = nm; state->startup_phase = State::STARTUP_FIN; scr->render(); tr_info("Start ultrasonic measuring"); ultrasonic.start_measure(); tr_info("Hook up routine functions"); minar::Scheduler::postCallback(leave_splash).delay(minar::milliseconds(500)); minar::Scheduler::postCallback(poll_key).period(minar::milliseconds(50)); minar::Scheduler::postCallback(screen_render).period(minar::milliseconds(100)); minar::Scheduler::postCallback(read_distance).period(minar::milliseconds(300)); tr_info("Start process completed"); }