Esempio n. 1
0
void run_led_driver() {
	prep_leds();

	switch(led_state) {

	case led_off:
		break;
	case led_start:
		turn_on(REDLED);
		break;

	case led_setup_start:
		turn_on(REDLED);
		blink_slow(YELLOWLED);
		blink_slow(GREENLED1);
		blink_slow(GREENLED2);
		break;
	case led_setup_slave_assoc:
		turn_on(REDLED);
		blink_slow(YELLOWLED);
		turn_on(GREENLED1);
		blink_slow(GREENLED2);
		break;
	case led_setup_slave_found_master:
		turn_on(REDLED);
		blink_slow(YELLOWLED);
		turn_on(GREENLED1);
		turn_on(GREENLED2);
		break;
	case led_setup_master_assoc:
		turn_on(REDLED);
		blink_fast(YELLOWLED);
		turn_on(GREENLED1);
		turn_on(GREENLED2);
		break;

	case led_main_start:
		turn_on(REDLED);
		blink_slow(YELLOWLED);
		blink_slow_sliding(GREENLED1);
		blink_slow_alternating(GREENLED2);
		break;
	case led_main_assoc:
		turn_on(REDLED);
		turn_on(YELLOWLED);
		blink_slow_alternating(GREENLED1);
		break;
	case led_main_connected:
		turn_on(REDLED);
		turn_on(YELLOWLED);
		turn_on(GREENLED1);
		blink_slow(GREENLED2);
		break;

	case led_error:
		blink_slow(REDLED + YELLOWLED + GREENLED1);
		break;
	}

	update_leds();
}
Esempio n. 2
0
void Craft::loop_vtol() {
	switch (m_current) {
		case STOPPED:
			m_attitude.calibrate();
			m_current = STOPPED_READY;

		case STOPPED_READY:
			blink_slow();

			if (m_userDemand.throttle >= 2000) {
				m_current = STOPPED_STARTUP;
			}
			break;

		case STOPPED_STARTUP:
			if (m_userDemand.throttle <= 48) {
				m_current = NORMAL;
			}
			break;

		case LAUNCH:
			break;

		case NORMAL:
			blink_fast();
			m_currentControl = m_controlSchemes[0];
			m_currentControl->update();

			// TODO check for switch to/from state
			break;

		case HOLD:
			blink_fast();
			m_currentControl = m_controlSchemes[1];
			m_currentControl->update();

			// TODO check for switch from/to state
			break;

		case ACRO:
			blink_fast();
			m_currentControl = m_controlSchemes[2];
			m_currentControl->update();

			// TODO
			break;

		case WAYPOINT:
			blink_fast();

			m_currentControl = m_controlSchemes[3];
			m_currentControl->update();

			// TODO
			break;

		case RETURN_HOME:
			blink_fast();

			// TODO set coords

			m_currentControl = m_controlSchemes[3];
			m_currentControl->update();

			// TODO
			break;

		case LOW_BATTERY:
			// TODO pulse motors, normal control
			break;

		case STOP:
			// TODO
			break;

		case REPLAY:
			// TODO implement these modes
			break;

		case FAULT:
		default:
			// TODO power off
			m_motors.set(0, 0, 0, 0);
			blink_fault();
			break;
	}
}