Exemplo n.º 1
0
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");
}