示例#1
0
文件: test.c 项目: stewdk/pwct
// Test the motor driver
void testMotorDriver(void)
{
	sendMotorCommand(MOTOR_CMD_DRIVE_FORWARD_MOTOR_1, 0);
	sendMotorCommand(MOTOR_CMD_DRIVE_FORWARD_MOTOR_2, 0);
	while (1)
	{
		WDT_Reset();

		int i;
		for (i = 0; i < 20; i++)
		{
			sendMotorCommand(MOTOR_CMD_DRIVE_FORWARD_MOTOR_1, 60);
			_delay_ms(100);
			WDT_Reset();
		}
		for (i = 0; i < 20; i++)
		{
			sendMotorCommand(MOTOR_CMD_DRIVE_FORWARD_MOTOR_1, 0);
			_delay_ms(100);
			WDT_Reset();
		}

		for (i = 0; i <= 60; i++)
		{
			WDT_Reset();
			sendMotorCommand(MOTOR_CMD_DRIVE_FORWARD_MOTOR_1, i);
			sendMotorCommand(MOTOR_CMD_DRIVE_FORWARD_MOTOR_2, i);
			_delay_ms(20);
		}

		WDT_Reset();
		_delay_ms(100);

		for (; i >= 0; i--)
		{
			WDT_Reset();
			sendMotorCommand(MOTOR_CMD_DRIVE_FORWARD_MOTOR_1, i);
			sendMotorCommand(MOTOR_CMD_DRIVE_FORWARD_MOTOR_2, i);
			_delay_ms(20);
		}

		WDT_Reset();
		_delay_ms(450);
		WDT_Reset();
		_delay_ms(450);
		WDT_Reset();
		_delay_ms(450);
		WDT_Reset();
		_delay_ms(450);
	}
}
示例#2
0
void naiboard_delay_us(uint16_t us) {
	uint16_t i;
	for (i = 0; i < us; i++) {
		_delay_us(1);
		WDT_Reset(); // Watchdog reset
	}
}
示例#3
0
void Callback_5ms() {
	if (sonarGetState() == SONAR_TRIGGER) {
			sonarTriggerStop();
			sonarEchoCountStart();
			WDT_Reset(&sonarWDT);
		}

}
示例#4
0
文件: test.c 项目: stewdk/pwct
void testPropJoy(void)
{
	while(1) {
		WDT_Reset();
		printf("Speed: %d Dir: %d\n", getWiredPropJoySpeed(), getWiredPropJoyDirection());
		_delay_ms(200);
	}
}
示例#5
0
文件: menu.c 项目: stewdk/pwct
static void eepromCorrupt()
{
	motorEStop();
	while (1)
	{
		lcdText("EEPROM corrupt", "Ver. " __DATE__, 0);
		WDT_Reset();
	}
}
示例#6
0
/* main function */
int main(void)
{
    /* ============================== */
    /* initialization =============== */
    /* ============================== */
    
    WDT_EnableAndSetTimeout(WDT_PER_512CLK_gc);

    /* set up LED pins */
    init_leds();

    /* set up I2C as slave */
    init_twi();

    /* set up our clocks */
    init_clock();
    
    /* set up sensors */
    init_sensors();

    /* set up motors */
    init_motors();

    /* set up crude digital outputs */
    init_digout();

    /* Flash all the LEDs for two and a half seconds to make sure
     * they're hooked up */
    led_orders->behavior = LED_BEHAVIOR_TIMED;
    led_orders->time = 4000;
    led_error1->behavior = LED_BEHAVIOR_TIMED;
    led_error1->time = 6000;
    led_error2->behavior = LED_BEHAVIOR_TIMED;
    led_error2->time = 8000;
    led_mota->behavior = LED_BEHAVIOR_TIMED;
    led_mota->time = 10000;
    led_motb->behavior = LED_BEHAVIOR_TIMED;
    led_motb->time = 12000;

    /* motA.duty = 4000; */
    /* motA.direction = 1; */
    /* motB.duty = 16000; */
    /* motB.direction = 1; */

    /* enable interrupts - things start ticking now */
    sei();


    /* ============================== */
    /* main loop ==================== */
    /* ============================== */
    for(;;)
    {
        _delay_us(10);
        WDT_Reset();
    }
}
示例#7
0
/*******************************************************************************
 * Function name: main
 * Description  : Main program function. Initializes the peripherals used in the
 *                demo and executes a loop that reads the ADC and updates the
 *                display once for each press of switch 1.
 * Arguments    : none
 * Return value : none
 *******************************************************************************/
void main(void) {
	/* One time initialize instructions */
	Setup();

	/* Endless loop*/
	while (1) {
		if (timers.timer_1mS) {
			timers.timer_1mS = 0;
			Callback_1ms();					//Operations to do every 1ms
			if (timers.timer_5mS) {
				timers.timer_5mS = 0;
				Callback_5ms();				// Operations to do every 5ms
				if (timers.timer_10mS) {
					timers.timer_10mS = 0;
					Callback_10ms();		// Operations to do every 10ms
					if (timers.timer_20mS) {
						timers.timer_20mS = 0;
						Callback_20ms();	// Operations to do every 20ms
					}
					if (timers.timer_50mS) {
						timers.timer_50mS = 0;
						Callback_50ms();
						if (timers.timer_100mS) {
							timers.timer_100mS = 0;
							Callback_100ms();
							if (timers.timer_500mS) {
								timers.timer_500mS = 0;
								Callback_500ms();
								if (timers.timer_1000mS) {
									timers.timer_1000mS = 0;
									Callback_1000ms();
								}
							}
						}

					}
				}
			}
		}
		WDT_Reset(&mainWDT);

//		//result = map(analogRead, 0, 4095, 1000, 2200);
//		Motor_Write_us(MOTOR_UPPER, desiredState.key.avg_motor_us + desiredState.key.motor_diff_us);
//		Motor_Write_us(MOTOR_BOTTOM, desiredState.key.avg_motor_us - desiredState.key.motor_diff_us);
//
//		//result = map(analogRead, 0, 4095, 60, 120);
//		Servo_Write_deg(1, desiredState.key.x_servo_deg + 18); //18° is the trim of the servo
//		Servo_Write_deg(2, desiredState.key.y_servo_deg);
	}
	Fallback();

} /* End function main() */
示例#8
0
文件: test.c 项目: stewdk/pwct
void testJoystickDriveMotors(void)
{
	//range = 1150
	//zero = 2720
	int16_t speed;
	int16_t dir;

	while(1) {
		WDT_Reset();
		speed = getWiredPropJoySpeed();
		dir = getWiredPropJoyDirection();
		speed = (speed - 2715) / 4;
		dir = (dir - 2725) / 4;
		//printf("Speed: %d Dir: %d\n", speed, dir);
		if (speed >= 0) {
			if (speed > 127)
				speed = 127;
			sendMotorCommand(MOTOR_CMD_DRIVE_FORWARD_MIXED_MODE, speed);
		} else {
			speed = -speed;
			if (speed > 127)
				speed = 127;
			sendMotorCommand(MOTOR_CMD_DRIVE_BACKWARDS_MIXED_MODE, speed);
		}
		if (dir >= 0) {
			if (dir > 127)
				dir = 127;
			sendMotorCommand(MOTOR_CMD_TURN_RIGHT_MIXED_MODE, dir);
		} else {
			dir = -dir;
			if (dir > 127)
				dir = 127;
			sendMotorCommand(MOTOR_CMD_TURN_LEFT_MIXED_MODE, dir);
		}
	}
}
示例#9
0
/**
 * Callback function that will reset the WDT
 * @param xTimer
 */
extern "C" void watchdogTimerCallback( xTimerHandle xTimer ) {
    WDT_Reset();
}