Exemplo n.º 1
0
Arquivo: Compas.c Projeto: sdajani/sdp
void updateAccelerometerLEDs() {
    if (!useLevel) {
        LED_N = OFF;
        LED_S = OFF;
        LED_E = OFF;
        LED_W = OFF;
        return;
    }
    //printf("Updating LEDS!\n");
    //if (Timer_isExpired(TIMER_ACCELEROMETER)) {
        // X-Axis
        if (Accelerometer_getX() <= (G_X_DESIRED - G_DELTA_HORIZONTAL)) {
            LED_N = ON;
            LED_S = OFF;
        }
        else if (Accelerometer_getX() >= (G_X_DESIRED + G_DELTA_HORIZONTAL)) {
            LED_N = OFF;
            LED_S = ON;
        }
        else {
            LED_N = OFF;
            LED_S = OFF;
        }

        // Y-Axis
        if (Accelerometer_getY() <= (G_Y_DESIRED - G_DELTA_VERTICAL)) {
            LED_E = OFF;
            LED_W = ON;
        }
        else if (Accelerometer_getY() >= (G_Y_DESIRED + G_DELTA_VERTICAL)) {
            LED_E = ON;
            LED_W = OFF;
        }
        else {
            LED_E = OFF;
            LED_W = OFF;
        }

        //Timer_new(TIMER_ACCELEROMETER, LED_DELAY );
    //}
}
Exemplo n.º 2
0
/**********************************************************************
 * Function: Interface_runSM
 * @param None.
 * @return None.
 * @remark Must be called every cycle of the Command Center, checks the
 *  timers and reacts.
 **********************************************************************/
void Interface_runSM(){

   if (Timer_isExpired(TIMER_LIGHT_HOLD)) {
        timerLightOffFunction();
        Timer_clear(TIMER_LIGHT_HOLD);
    }

    if (Timer_isExpired(TIMER_LCD_HOLD)) {
        Interface_clearDisplay();
        if (nextMsgCode != NO_MESSAGE) {
            showMessage(nextMsgCode);
            nextMsgCode = NO_MESSAGE;
        }
        Timer_clear(TIMER_LCD_HOLD);
    }
   //printf("HERE! ");
    if(Timer_isExpired(TIMER_INTERFACE)) {

        #if NUMBER_OF_TIMES_TO_CHECK > 1
        if(OKAY_BUTTON == PRESSED)
            buttonCount.okay += 1;
        if(CANCEL_BUTTON == PRESSED)
            buttonCount.cancel += 1;
        if(STOP_BUTTON == PRESSED)
            buttonCount.stop += 1;
        if(RESCUE_BUTTON == PRESSED)
            buttonCount.rescue += 1;
        if(SETSTATION_BUTTON == PRESSED)
            buttonCount.setStation += 1;
        if (RESET_BUTTON == PRESSED)
            buttonCount.reset += 1;
        
        buttonReadCount++;

        if(buttonReadCount >= NUMBER_OF_TIMES_TO_CHECK){
            buttonReadCount = 0;

            // Clear button flag
            buttonPressed.bytes[0] = false;

            if(buttonCount.okay >= MINIMUM_POSITIVES)
                buttonPressed.flag.okay = true;
            if(buttonCount.cancel >= MINIMUM_POSITIVES)
                buttonPressed.flag.cancel = true;
            if(buttonCount.stop >= MINIMUM_POSITIVES)
                buttonPressed.flag.stop = true;
            if(buttonCount.rescue >= MINIMUM_POSITIVES)
                buttonPressed.flag.rescue = true;
            if(buttonCount.setStation >= MINIMUM_POSITIVES)
                buttonPressed.flag.setStation = true;
            if (buttonCount.reset >= MINIMUM_POSITIVES)
                buttonPressed.flag.reset = TRUE;

            // Reset button counts
            buttonCount.okay = 0;
            buttonCount.cancel = 0;
            buttonCount.stop = 0;
            buttonCount.rescue = 0;
            buttonCount.setStation = 0;
            buttonCount.reset = 0;
        }
        #else
        buttonPressed.flag.okay = (OKAY_BUTTON == PRESSED);
        buttonPressed.flag.cancel = (CANCEL_BUTTON == PRESSED);
        buttonPressed.flag.stop = (STOP_BUTTON == PRESSED);
        buttonPressed.flag.rescue = (RESCUE_BUTTON == PRESSED);
        buttonPressed.flag.setStation = (SETSTATION_BUTTON == PRESSED);
        buttonPressed.flag.reset = (RESET_BUTTON == PRESSED);
        #endif
#ifdef DEBUG_BUTTON_CHECK
        Interface_waitLightOnTimer(1000);
        printf("Ok=%d, C=%d, S=%d, R=%d, SS=%d, Reset=%d\n",
            buttonPressed.flag.okay, buttonPressed.flag.cancel,
            buttonPressed.flag.stop, buttonPressed.flag.rescue,
            buttonPressed.flag.setStation, buttonPressed.flag.reset);
#endif
        Timer_new(TIMER_INTERFACE, WAIT_BETWEEN_CHECKS);
    }

    // Calibration lights
    if (usingPitchLights) {
        READY_LED = OFF;
        if (Accelerometer_isLevel()) {
            CALIBRATE_FRONT_LED = ON;
            CALIBRATE_BACK_LED = ON;
            READY_LED = ON;
        }
        else if (Accelerometer_getX() > Accelerometer_getY()) {
            CALIBRATE_FRONT_LED = OFF;
            CALIBRATE_BACK_LED = ON;
        }
        else if (Accelerometer_getY() > Accelerometer_getX()) {
            CALIBRATE_FRONT_LED = ON;
            CALIBRATE_BACK_LED = OFF;
        }
    }
    else if (usingYawLights) {
        READY_LED = OFF;
        #ifdef USE_MAGNETOMETER
        if (Magnetometer_isNorth() && Accelerometer_isLevel()) {
        #else
        if (Accelerometer_isLevel()) {
        #endif
            CALIBRATE_FRONT_LED = ON;
            CALIBRATE_BACK_LED = ON;
            READY_LED = ON;
        }
        else {
            CALIBRATE_FRONT_LED = OFF;
            CALIBRATE_BACK_LED = OFF;
        }
    }

    if (Timer_isExpired(TIMER_INTERFACE) || !Timer_isActive(TIMER_INTERFACE))
        Timer_new(TIMER_INTERFACE, WAIT_BETWEEN_CHECKS);
    
}

/**********************************************************************
 * Function: Interface_isCancelPressed
 * @param None.
 * @return TRUE if the cancel button was pressed.
 * @remark
 **********************************************************************/
bool Interface_isCancelPressed(){
    return buttonPressed.flag.cancel;
}
/**********************************************************************
 * Function: Interface_isOkPressed
 * @param None.
 * @return TRUE if the ok button was pressed.
 * @remark
 **********************************************************************/
bool Interface_isOkPressed(){
    return buttonPressed.flag.okay;
}
/**********************************************************************
 * Function: Interface_isStopPressed
 * @param None.
 * @return TRUE if the stop button was pressed.
 * @remark
 **********************************************************************/
bool Interface_isStopPressed(){
    return buttonPressed.flag.stop;
}

/**********************************************************************
 * Function: Interface_isRescuePressed
 * @param None.
 * @return TRUE if the rescue button was pressed.
 * @remark
 **********************************************************************/
bool Interface_isRescuePressed(){
    return buttonPressed.flag.rescue;
}

/**********************************************************************
 * Function: Interface_isSetStationPressed
 * @param None.
 * @return TRUE if the set station button was pressed.
 * @remark
 **********************************************************************/
bool Interface_isSetStationPressed(){
    return buttonPressed.flag.setStation;

}

/**********************************************************************
 * Function: Interface_isResetPressed
 * @param None.
 * @return TRUE if the reset button was pressed.
 * @remark
 **********************************************************************/
bool Interface_isResetPressed(){
    return buttonPressed.flag.reset;

}

/**********************************************************************
 * Function: Interface_readyLightOn
 * @param None.
 * @return None.
 * @remark Turns the LED On by
 **********************************************************************/
void Interface_readyLightOn(){
    READY_LED = ON;
}
/**********************************************************************
 * Function: Interface_readyLightOff
 * @param None.
 * @return None.
 * @remark Turns the LED off by
 **********************************************************************/
void Interface_readyLightOff(){
    READY_LED = OFF;
}
/**********************************************************************
 * Function: Interface_waitLightOn
 * @param None.
 * @return None.
 * @remark Turns the LED On by
 **********************************************************************/
void Interface_waitLightOn(){
    WAIT_LED = ON;
}
/**********************************************************************
 * Function: Interface_waitLightOff
 * @param None.
 * @return None.
 * @remark Turns the LED off by
 **********************************************************************/
void Interface_waitLightOff(){
    WAIT_LED = OFF;
}
/**********************************************************************
 * Function: Interface_errorLightOn
 * @param None.
 * @return None.
 * @remark Turns the LED On by
 **********************************************************************/
void Interface_errorLightOn(){
    ERROR_LED = ON;
}
/**********************************************************************
 * Function: Interface_errorLightOff
 * @param None.
 * @return None.
 * @remark Turns the LED off by
 **********************************************************************/
void Interface_errorLightOff(){
    ERROR_LED = OFF;
}


/**********************************************************************
 * Function: Interface_readyLightOnTimer
 * @param amount of time in ms that you want the light to remain on
 * @return None.
 * @remark Turns the LED on for a certain amount of time
 **********************************************************************/
void Interface_readyLightOnTimer(uint16_t ms){
    Timer_new(TIMER_LIGHT_HOLD, ms);
    timerLightOffFunction = &Interface_readyLightOff;
    Interface_readyLightOn();
}