Example #1
0
int main(void){
	//int x=0;
	
	init_IO();
	init_Uart();
	startup_flashes_text();
	
	init_Timer2and3();
	init_OC2();
	
	
	while(1){
		PORTBbits.RB3=1;
		if(PORTBbits.RB0==1 && dutyCycle<1065){
			PORTBbits.RB3=0;
			sendString("increased duty cycle to ");
			dutyCycle+=5;
			OC2RS=dutyCycle;
			sendNum(dutyCycle);
			sendString(" \t(counterclockwise)\n\r");
			delay(10);
		}
		if(PORTBbits.RB1==1 && dutyCycle>110){
			PORTBbits.RB3=0;
			sendString(" decreased duty cycle to ");
			dutyCycle-=5;
			OC2RS=dutyCycle;
			sendNum(dutyCycle);
			sendString("\t(clockwise)\n\r");
			delay(10);
		}
	}
}
Example #2
0
void startup_flashes_text(void){
	PORTBbits.RB2=1;
	delay(200);
	PORTBbits.RB2=0;
	delay(200);  
	PORTBbits.RB2=1;
	delay(200);  
	PORTBbits.RB2=0;
	delay(200);  
	PORTBbits.RB2=1;
	
	sendString("\n\rRunning...\n\r\n\r");
	sendString("Starting at duty cycle = ");
	sendNum(dutyCycle);
	sendString("\n\r");
}	
Example #3
0
int main(void)
{
	uint8_t i, j, randomNumber, tempNumber, buttonCount, n = 0;
	
	uint8_t  portState[3] = {0xDF,0xBF,0x7F};
	uint8_t inputState[3] = {0x04,0x08,0x10};
								 
	uint8_t* arr;
	uint8_t* backup_arr;
	
	//Источник энтропии - счетчик задержки нажатия клавиш
	uint16_t delayCounter = eeprom_read_word((uint16_t*)1);
	
	DDRC  = 0xFF;
	DDRB  = 0xFF;
	
	DDRD  = 0xE3;
	PORTD = 0xFF;
	
	initUART();

    while (1) 
    {	
				
		arr = (uint8_t *)malloc((n + 1) * sizeof(uint8_t));
	
		if (n > 0) {
			memcpy(arr, backup_arr, n);
			free(backup_arr);
		}
	
		tempNumber = eeprom_read_byte((uint8_t*)0);
		srand(delayCounter);
		tempNumber ^= (makeRandom(1000)%255);
		eeprom_write_byte((uint8_t*)0, (uint8_t)(tempNumber % 8));
		randomNumber = eeprom_read_byte((uint8_t*)0);
		
		arr[n] = toDisplayNum(randomNumber);
		
		for (i = 0; i < n + 1; i++)
		{
			comboPort(arr[i]);
			_delay_ms(DELAY);
			comboPort(0x00);
			_delay_ms(DELAY);
		}
		buttonCount = 0;
		while(buttonCount < n + 1)
		{
			for(i = 0; i < 3; i++)
			{
				PORTD = portState[i];
				for(j = 0; j < 3; j++)
				{
					if(!(PIND & inputState[j]))
					{
						while((PIND & inputState[j]) != inputState[j]);
						if(display[i][j] == arr[buttonCount]){
							comboPort(display[i][j]);
							buttonCount++;	
						} else {
							sendStr("Game over! Your score: ");
							sendNum(n);
							sendByte(13);
							//Мигаем GG
							while(1) 
							{
								comboPort(0xC2);
								_delay_ms(DELAY);
								comboPort(0x00);
								_delay_ms(DELAY);
							}
						}
					}
					delayCounter++;
				}
			}
		}
		
		backup_arr = (uint8_t*)malloc((n + 1) * sizeof(uint8_t));
		memcpy(backup_arr, arr, n + 1);
		free(arr);

		_delay_ms(DELAY);
		comboPort(0x00);
		_delay_ms(DELAY * 2);
		
		eeprom_write_word((uint16_t*)1, (uint16_t)(delayCounter));
		
		n++;
    }
}