Example #1
0
int main(void)
{
	init();
	for(;;)
	{
		
		 // Set LED0
		SetLED(ON);
		
		
		// Motor Tests
		SetMotor(L_MOT, FWD);
		SetIR(L_IRLED, ON);
		_delay_ms(2000.0);
		SetMotor(L_MOT, REV);
		_delay_ms(2000.0);
		SetMotor(L_MOT, STOP);
		_delay_ms(2000.0);

		// Clear LED0;
		SetIR(L_IRLED, OFF);
		SetLED(OFF);
		SetIR(C_IRLED, ON);

		// Motor Tests
		SetMotor(R_MOT, FWD);
		_delay_ms(2000.0);
		SetMotor(R_MOT, REV);
		_delay_ms(2000.0);
		SetIR(C_IRLED, OFF);
		SetIR(R_IRLED, ON);
		SetMotor(R_MOT, STOP);
		_delay_ms(4000.0);
		SetIR(R_IRLED, OFF);
  		/*
		// Sensor Tests
		
		// IRLED Tests
		
		SetIR(R_IRLED, ON);
		pause(PAUSE_T);
		while(bit_is_clear(PINA, PA3)) // Right IR RCV
		{
			SetLED(ON);
			pause(PAUSE_T);
			SetLED(OFF);
			pause(PAUSE_T);
		}
		SetIR(R_IRLED, OFF);
		
		
		SetIR(C_IRLED, ON);
		pause(PAUSE_T);
		while(bit_is_clear(PINA, PA2))
		{
			SetLED(ON);
			pause(PAUSE_T/2);
			SetLED(OFF);
			pause(PAUSE_T/2);
		}
		SetIR(C_IRLED, OFF); 

		SetIR(L_IRLED, ON);
		pause(PAUSE_T);
		while(bit_is_clear(PINA, PA1)) // Left IR RCV
		{
			SetLED(ON);
			pause(PAUSE_T/4);
			SetLED(OFF);
			pause(PAUSE_T/4);
		}
		SetIR(L_IRLED, OFF);

		// Bumpers
		while(bit_is_clear(PIND, PD5) ) // || bit_is_clear(PIND, PD5)) // 
		{
			SetLED(ON);
		}
		SetLED(OFF); */

/*	
		// Optical Sensor Test
		
		// Initialize Sensor
		PORTC &= ~_BV(PC3); // Disable Shutdown
		_delay_ms(150.0);  // Wait 1.5 secs
		PORTC |= _BV(PC7); // Enable NCS
		//_delay_us(1.0);
		
		SetLED(ON);
		_delay_ms(100.0);
		SetLED(OFF);	
		// Setup SPI
	        _delay_ms(100.0);	
		SPCR = _BV(SPE) | _BV(MSTR) | _BV(CPOL) | _BV(SPR0) | _BV(SPR1) | _BV(CPHA);
		
		// Initialize Sensor
		SetLED(ON);
		OptSensorWrite(0x3A, 0x5A); // Addr = 0x3A + MSB(WRITE) // POST
		_delay_ms(100.0);
		SetLED(OFF);
		_delay_ms(100.0);
		OptSensorRead(0x02); // Read Motion Status
		OptSensorRead(0x03); // Read Delta_X
		OptSensorRead(0x04); // Read Delta_Y
		//OptSensorWrite(0x01, 0x01); // Self-Test


		SetLED(ON);
		_delay_ms(100.0);
		SetLED(OFF);
		
		
		for(;;)
		{
			data = OptSensorRead(0x02);
			while(data & _BV(7)) // Motion!
			{
				OptSensorRead(0x03);
				OptSensorRead(0x04);
				data = OptSensorRead(0x02);
				SetLED(ON);
			}
			
			SetLED(OFF); 
			//_delay_ms(10.0); 
		} */
		
	}
        return(0);
}
Example #2
-1
bool Run()
{
  	//Main loop - get keypresses and interpret them
  	keystate=GetRemoteKeys();
  	if(keystate != oldKeystate) {
	  	oldKeystate = keystate;

	  	if(keystate & KEY_HOME) {
		  	return false;
	  	}
		if (mode == 1 || mode == 2) { //menu navigation is only relevant to menu modes
			if(keystate & KEY_LEFT_BACK) {
				//Menu down
				if (menuItem<MAXMENU) {
					menuItem++;
					if(menuItem==3 || menuItem==4) {
						menuNum=6;
					} else if (menuItem == 5) {
						menuNum=3;
					} else {
						menuNum=1;
					}
				}
			}

			if(keystate & KEY_LEFT_FORWARD) {
				//Menu up
				if (menuItem>1) {
					menuItem--;
					if(menuItem==3 || menuItem==4) {
						menuNum=6;
					} else if (menuItem == 5) {
						menuNum=3;
					} else {
						menuNum=1;
					}
				}
			}
		}
		if (mode == 1) {
			if(keystate & KEY_RIGHT_FORWARD) {
				//Menu down
				if (menuNum<24) {
					menuNum++;
				}
			}

			if(keystate & KEY_RIGHT_BACK) {
				//Menu up
				if (menuNum>1) {
					menuNum--;
				}
			}

			if(keystate & KEY_INPUT1) {
				//Clear
				PlaySound(SOUND_FIRE);
				steps=0;
				menuItem=1;
				menuNum=1;
				mode=1;
				OpenMotors();
			}

			if(keystate & KEY_INPUT2) {
				//Menu select
				if(steps+1<MAXSTEPS) {
					steps++;
					moveList[steps].cmd=menuItem;
					moveList[steps].num=menuNum;
					PlaySound(SOUND_BEEP);
				}
			}
			if(keystate & KEY_MENU) {
				//Switch to second menu
				mode=2;
				menuItem=1;
				menuNum=1;
				PlaySound(SOUND_BEEP);
			}
		} else if (mode == 2) {
			if(keystate & KEY_INPUT1) {
				//Switch back to first menu
				mode=1;
				menuItem=1;
				menuNum=1;
				PlaySound(SOUND_BEEP);
			}
			if (keystate & KEY_INPUT2) {
				//Menu select
				switch(menuItem) {
					case 1: { //Free Roam
						mode=4;
						PlaySound(SOUND_BEEP);
						CloseMotors();
					} break;
					case 2: { //Load route
						LoadRoute();
						ClearScreen();
						PlaySound(SOUND_BEEP);
						SetTextColor(white);
						DrawText(5, 65, "Loading...");
						Show();
						Sleep(500); //Just so they notice...
						mode=2;
					} break;
					case 3: { //Save route
						PlaySound(SOUND_BEEP);
						SaveRoute();
						ClearScreen();
						SetTextColor(white);
						DrawText(5, 65, "Saving...");
						Show();
						Sleep(500); //Just so they notice...
						mode=2;
					} break;
					case 4: { //Recalibrate
						PlaySound(SOUND_BEEP);
						mode=3;		//Recalibration mode
						menuNum=1;	//Use menuNum as steps throught the process - 1=ready, 2=working
					} break;
					case 5: { //About
						PlaySound(SOUND_GO);
						mode=5;
						CloseMotors();
					} break;
				}
			}

			if(keystate & KEY_MENU) {
				//Switch back to first menu
				mode=1;
				menuItem=1;
				menuNum=1;
				PlaySound(SOUND_BEEP);
			}
		} else if (mode==3) {
			//Recalibrate.
			if(keystate & KEY_INPUT1) {
				//Cancel
				PlaySound(SOUND_BEEP);
				SetMotors(0,0);
				mode=2;
				menuItem=4;
				menuNum=1;
			}
			if (keystate & KEY_INPUT2) {
				//Start/Stop
				PlaySound(SOUND_BEEP);
				switch (menuNum) {
					case 1: { //Start
						menuNum=2;
						ResetTimer();
						SetMotors(10000,-10000);
					}
					break;
					case 2: { //Stop
						rotateSleep = ReadTimer() / 24;
						SetMotors(0,0);
						mode=2;
						menuItem=4;
						menuNum=1;
						SaveCalibration();
					}
				}
			}
		} else if (mode==4 || mode==5) {
			if(keystate & KEY_MENU) {
				//Switch back to first menu
				PlaySound(SOUND_BEEP);
				mode=2;
				menuItem=1;
				menuNum=1;
				OpenMotors();
			}
			if (keystate & KEY_INPUT1) {
				IRState = !IRState;
				SetIR(IRState);
			}

			if (keystate & KEY_INPUT2) {
				PlaySound(SOUND_BEEP);
				mode=2;
				menuItem=1;
				menuNum=1;
				OpenMotors();
			}
		}

	  	if(keystate & KEY_RUN) {
		  	//Go
		  	ClearScreen();
		  	Show();
		  	PlaySound(SOUND_GO);

		  	//Cycle through steps and execute
		  	int count;
		  	SetTextColor(green);
		  	for(count=1; count<=steps;count++) {
				switch(moveList[count].cmd) {
				  	case 1: { //Forward
						ClearScreen();
						DrawText(5, 100, "%d: Forward %d",count, moveList[count].num);
						Show();
						SetMotors(10000,10000);
						Sleep(FORWARDSLEEP * moveList[count].num);
						SetMotors(0,0);
					}
					break;
				  	case 2: { //Back
						ClearScreen();
						DrawText(5, 100, "%d: Back %d",count, moveList[count].num);
						Show();
						SetMotors(-10000,-10000);
						Sleep(FORWARDSLEEP * moveList[count].num);
						SetMotors(0,0);
					}
					break;
				  	case 3: { //Right
						ClearScreen();
						DrawText(5, 100, "%d: Right %d",count, moveList[count].num * 15);
						Show();
						SetMotors(10000,-10000);
						Sleep(rotateSleep * moveList[count].num);
						SetMotors(0,0);
					}
					break;
				  	case 4: { //Left
						ClearScreen();
						DrawText(5, 100, "%d: Left %d",count, moveList[count].num * 15);
						Show();
						SetMotors(-10000,10000);
						Sleep(rotateSleep * moveList[count].num);
						SetMotors(0,0);
					}
					break;
					case 5: { //Fire
						ClearScreen();
						SetTextColor(red);
						DrawText(10, 45, "PEW! PEW! PEW!");
						SetTextColor(green);
						DrawText(5, 100, "%d: Fire %d",count, moveList[count].num);
						Show();
						int fireCount;
						for(fireCount=0; fireCount<moveList[count].num; fireCount++) {
							PlaySound(SOUND_FIRE);
						}
					}
				}
			}
			//reset menu pointer
			menuItem=1;
			menuNum=1;
			PlaySound(SOUND_GO);
	  	}

	  	DrawMenu();
  	}
  	Sleep(50); //to stop the radio being on full time
  	return true;
}