int TickFct_USART(int state){
	unsigned char doorClosed = (~PIND & 0x10) >> 4;
	switch(state){
		case usartInit:
			state = usartLocked;
			USART_Send(0x01, 1);
			break;
		case usartLocked:
			if(lockedFlag){
				state = usartLocked;
			}
			else{
				state = usartUnlocked;
				USART_Send(0x00, 1);
				LCD_DisplayString(1, "Unlocking...");
				delay_ms(5000);
				LCD_DisplayString(1, "Press A to Lock C to Change Pin");
			}
			break;
		case usartUnlocked:
			if(lockedFlag){
				state = usartLocked;
				USART_Send(0x01, 1);
				LCD_DisplayString(1, "Locking...");
				delay_ms(5000);
				if(!doorClosed && lockedFlag ){
					LCD_DisplayString(1, "ALARM! Enter Pin: ");
				}
				else{
					LCD_DisplayString(1, "A for Keypad    B for Bluetooth");
				}
			}
			else{
				state = usartUnlocked;
			}
			break;
		default:
			state = usartInit;
			break;
	}
	return state;
}
예제 #2
0
void USART_Echo(void *p_arg)
{
    OS_ERR  err;
    uint32_t recv_length;
    (void)p_arg;

    USART_SetRecvByteDoneISR(onRecvByteDone);
    USART_SetRecvTimeoutISR(onRecvTimeout);
    USART_SetSendDoneISR(onSendDone);

    while(1)
    {
        OSTaskSemPend(0, OS_OPT_PEND_BLOCKING, (void*)0, &err);
        recv_length = FIFO_Length(&USART_FIFO);
        recv_length = FIFO_Get(&USART_FIFO, recv_buffer, recv_length);

        USART_Send(recv_buffer, recv_length);
    }

}
예제 #3
0
static int32_t USART1_Send (const void *data, uint32_t num)
{
    return USART_Send (data, num, &USART1_Resources);
}
예제 #4
0
void sendDir(unsigned char sendValue) {
	if(USART_IsSendReady(1)) {
		USART_Send(sendValue, 1);
	}
}
예제 #5
0
/* Print the string through USART with blocking. */
void USART_Printf(USART_TypeDef* USARTx, char *str) {
	USART_Send(USARTx, str, strlen(str), BLOCKING);
}
예제 #6
0
void mainTick(){
	static unsigned char button;
	static unsigned char pressed; //decrease states for buttonpress
	button = ~PINA;
	switch(gameStatus){
		case intro:
			if(GetBit(button,0)){
				gameStatus = play;
				playTime = 0;
				pressed = 1;
				currScore = 0;
				lcdTick();
				if(USART_IsSendReady())
					USART_Send(0x41);
			}
			else if(USART_HasReceived()){
				tempMessage = USART_Receive();
				if( tempMessage == 0xC1 ){
					gameStatus = highscore;
					playTime = 0;
					lcdTick();
				}
				else if( tempMessage == 0xC2){
					gameStatus = resetHighScore;
					currHighScore = 0;
					eeprom_write_byte ((uint8_t*) 46, currHighScore);
					playTime = 0;
					lcdTick();
				}
			}
			else
				gameStatus = intro;
			break;
		case highscore:
			if(playTime == 500){
				gameStatus = intro;
				lcdTick();
			}
			else
				gameStatus = highscore;
			break;
		case resetHighScore:
			if(playTime == 500){
				gameStatus = intro;
				lcdTick();
			}
			else
				gameStatus = resetHighScore;
			break;
		case play:
			if(!(GetBit(button,0) && !pressed) && playTime < 4000 )
				gameStatus = play;
			else if((GetBit(button,0) && !pressed) || playTime == 4000){
				gameStatus = gameOver;
				lcdTick();
				playTime = 0;
				if(currScore > currHighScore){
					currHighScore = currScore;
					eeprom_write_byte ((uint8_t*) 46, currHighScore);
				}
				if(USART_IsSendReady())
				USART_Send(0x40);
			}
			else
				gameStatus = play;
			break;
		case gameOver:
			if(playTime == 500){
				gameStatus = intro;
				lcdTick();
			}
			else if(playTime < 500)
				gameStatus = gameOver;
			else
				gameStatus = gameOver;
			break;
	}
	switch(gameStatus){
		case intro:
			PORTB = 0;
			currScore = 0;
			break;
		case highscore:
			playTime++;
			break;
		case resetHighScore:
			playTime++;
			break;
		case play:
			if(!GetBit(button,0))
				pressed = 0;
			playTime++;
			if(USART_HasReceived()){
				tempMessage = USART_Receive();
				if(GetBit(tempMessage,7) && !GetBit(tempMessage,6))
				if((tempMessage & 0x3F) != currScore)
					updateScore(tempMessage & 0x3F);
			}
			break;
		case gameOver:
			playTime++;
			break;
	}
}