示例#1
0
文件: main.cpp 项目: krchan/uvicquad
void task2(void) {
	for (;;) {
		digitalWrite(ONBOARD_LED, LOW);
		Serial.println("off");
		servoSet(900);

		Task_Next();
	}
}
示例#2
0
/**
 * UART 3 - for wifi
 */
void uart3InturruptHandle(void) {
	unsigned long ulStatus;
	unsigned char ble[15];
	ble[14] = '\0';
	unsigned long val;
	bool msg = false;

//
// Get the interrrupt status.
//
	ulStatus = ROM_UARTIntStatus(UART3_BASE, true);

//
// Clear the asserted interrupts.
//
	ROM_UARTIntClear(UART3_BASE, ulStatus);

//
// Loop while there are characters in the receive FIFO.
//
	while (UARTCharsAvail(UART3_BASE)) {
		//
		// Read the next character from the UART and write it back to the UART.
		//
		val = UARTCharGetNonBlocking(UART3_BASE);
		ble[i] = val;
		if (val == '\n' || val == '\r' || i == 13) {
			i = -1;
			msg = true;
		}

//		UARTCharPutNonBlocking(UART3_BASE, val);
		i++;
	}
	if (msg) {
		if (strncmp((char*) ble, "gps", 3) == 0) {// && (strncmp((char*) ble, "accl", 4) == 0)
//					UARTCharPutNonBlocking(UART3_BASE, 'p');
			sendGPSData();
			msg = false;
//
		} else if (strncmp((char*) ble, "accl", 4) == 0) {
			sendAcclData();
			msg = false;
		} else if (strncmp((char*) ble, "mag", 3) == 0) {
			//sendMagnetoData();
			sendHeading();
			msg = false;
		} else if (strncmp((char*) ble, "ser", 3) == 0) {
			if (ble[3] == '+') {
				servoSet(servo, 1800);
			} else if (ble[3] == '-') {
				servoSet(servo, 1388);
			} else {
				GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, GPIO_PIN_2);

				//Delay for 1 millisecond.  Each SysCtlDelay is about 3 clocks.

				SysCtlDelay(SysCtlClockGet() / (1000 * 3));

				//Turn off the LED

				GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0);

				servoSet(servo, 1500);
			}

		}
		msg = false;
	}

}
int main(void) {
    // Enable FPU for interrupt routines
    // ROM_FPULazyStackingEnable();
    // ROM_FPUEnable();

    // Set clock to 80MHz
    SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);

    // Turn off LEDs
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
    ROM_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
    ROM_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2|GPIO_PIN_3, 0);

    // Setup buttons
    ButtonsInit();

    // Initialize the UART.
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
    ROM_GPIOPinConfigure(GPIO_PA0_U0RX);
    ROM_GPIOPinConfigure(GPIO_PA1_U0TX);
    ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
    UARTStdioInit(0);

    // Setup servos and start the timer for them
    setupServos();

    uint16_t servoPosition = SERVO_MIN_PULSE;

    // Continually check which button is pressed and move the servo position that direction
    while(1) {
        switch(ButtonsPoll(0, 0) & ALL_BUTTONS) {
            case LEFT_BUTTON:
                servoPosition -= 10;

                if(servoPosition < SERVO_MIN_PULSE) {
                    servoPosition = SERVO_MIN_PULSE;

                    // Too far, blink red
                    ROM_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, GPIO_PIN_1);
                } else {
                    // Valid position, blink green
                    ROM_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, GPIO_PIN_2);
                }
                break;

            case RIGHT_BUTTON:
                servoPosition += 10;

                if(servoPosition > SERVO_MAX_PULSE) {
                    servoPosition = SERVO_MAX_PULSE;
                    
                    // Too far, blink red
                    ROM_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, GPIO_PIN_1);
                } else {
                    // Valid position, blink blue
                    ROM_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, GPIO_PIN_3);
                }
                break;
        }

        // Update servo positions
        servoSet(servo, servoPosition);
        servoSet(servo2, servoPosition);

        // Wait .002s
        SysCtlDelay((SysCtlClockGet() / 3) / 500);

        // Turn off all LEDs
        ROM_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 0);
    }
}
示例#4
0
void portAIntHandler(void) {
	GPIOPinIntClear(GPIO_PORTA_BASE, GPIO_PIN_5);

	unsigned char irq = 0;
	nRF24L01_IRQ(&irq, recDataBuffer);
	if (irq & (1 << RX_DR)) {

		delay_ms(1); //IMPORTANT, delay > max retransmission delay

		if (strncmp((char*) recDataBuffer, "gps", 3) == 0) { // && (strncmp((char*) ble, "accl", 4) == 0)

			//nrf24l01p_send((unsigned char*) "lablala");
			//					UARTCharPutNonBlocking(UART3_BASE, 'p');
			sendGPSData();

			//
		} else if (strncmp((char*) recDataBuffer, "accl", 4) == 0) {
			sendAcclData();

		} else if (strncmp((char*) recDataBuffer, "mag", 3) == 0) {
			//sendMagnetoData();
			sendHeading();

		} else if (strncmp((char*) recDataBuffer, "ser", 3) == 0) {
			if (recDataBuffer[3] == '+') {
				servoSet(servo, 1800);
			} else if (recDataBuffer[3] == '-') {
				servoSet(servo, 1388);
			} else {
				GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, GPIO_PIN_2);

				//Delay for 1 millisecond.  Each SysCtlDelay is about 3 clocks.

				SysCtlDelay(SysCtlClockGet() / (1000 * 3));

				//Turn off the LED

				GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0);

				servoSet(servo, 1500);
			}

		}

	}

	//UARTprintf("irq %x", irq);
	GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3, GPIO_PIN_3);
	SysCtlDelay(SysCtlClockGet() / (1000 * 2));
	GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3, 0);

#ifdef DEBUG
	if (irq & (1 << MAX_RT)) {
		UARTprintf("Max_RT.\n");
	}
	if (irq & (1 << TX_DS)) {
		//UARTprintf("TX_DS.\n");
	}
	if (irq & (1 << RX_DR)) {
		UARTprintf("RX_DR\n");
	}
#endif

}