Example #1
0
int main(void)
{
    //Initialize new interrupt fix
    SYSTEMConfigPerformance(40000000);
    
   
#ifdef part1
   initSW(); 
   initLED(RUN_LED);
   initLED(STOP_LED);
   initTimer2();
   enableInterrupts();
   
   // initialize the lights         
   state = runToggle; 
   turnOffLED(STOP_LED);
   turnOnLED(RUN_LED);
   
    while(1){
        
        switch(state){
            // the state that toggles the LEDs 
            case runToggle:
                // switch the led's
                toggleAllLEDs();
                prevState = runToggle;
                
                state = waitForPress; //Go to debounce press state
                break;
                
            // wait for user input i.e. button press
            case waitForPress:
                
                while (state == waitForPress);
                
                break;
                
            // once the button has been pressed 
            case dbPress:
                
                delayUs(DBdelayTime); // Delay for 5ms
              
                while(state == dbPress );
               
                break;
            
            // once the button has been released 
            case dbRelease:
                
                delayUs(DBdelayTime); //Delay for 5ms

                 state = runToggle;
                 
                break;
        } 
    }
#endif
    return 0;
}
Example #2
0
void main (void)
{
	int i;
	EAL = 1; //enable all interrupts
    
	/* Testscenario Abschalten des SW und Modul-Rueckmeldung beim SW*/
 	initNOTAUS();
 	initSW();
	stopSW();
	//helloModul(0, 255); // Fehler: 255 ist erste Stausmeldung

	//helloModul(7, 0); // Fehler: ungueltige Modul-ID

	//helloModul(255, 0); // Fehler: ungueltige Modul-ID

	//helloModul(0, 0);
	//helloModul(0, 0); // Fehler: 2 mal die selbe Statusmeldung eines Moduls hintereinander



	//helloModul(0, 0);
	//helloModul(1, 1);
	//helloModul(0, 0); // Fehler: 2 mal die selbe Statusmeldung eines Moduls hintereinander


	helloModul(0, 1);
	helloModul(0, 2);
	helloModul(1, 1);
	helloModul(1, 2);
	helloModul(2, 1);
	helloModul(2, 2);
	helloModul(3, 1);
	helloModul(3, 2);
	helloModul(4, 1);
	helloModul(4, 2);
	helloModul(5, 1);
	helloModul(5, 2);
	helloModul(6, 1);
	helloModul(6, 2);
	helloModul(0, 2); // Fehler: 2 mal die selbe Statusmeldung eines Moduls hintereinander


	// SW sollte jetzt zuschlagen!

	/* ENDE Testscenario Abschalten des SW und Modul-Rueckmeldung beim SW*/

	for(;;)	//Endlosschleife
	{
	}
}
Example #3
0
int main(void)
{
    SYSTEMConfigPerformance(SYS_CLOCK);
    
    enableInterrupts();
    initADC();
    initTimer2(); //for PWM
    initPWM();
    initLCD();
    initTimer4(); //for pwm
    initSW();
    
    int track = 1;
    int SpeedR = 0;
    int SpeedL = 0;
    int ones = 0;
    int dec = 0;
    float voltage = 0;

    //Actual main state machine loop
    while(1)
    {
        Speed = ADC1BUF0;
        
        moveCursorLCD(0,0);
        voltage = Speed * ((double)3.3/1023);
        ones = floor(voltage);
        dec = (voltage - ones) * 10;
        printCharLCD('0'+ones);
        printCharLCD('.');
        printCharLCD('0'+dec);
        printCharLCD('V');
        
       delayUs(10000); //10ms - Just to help the LCD not strobe too much
        
        switch(state)
        {
            case wait_Press: //handled by ISR
                break;
            case debouncePress:
                state = wait_Release;
                break;
            case wait_Release: //handled by ISR
                break;
            case debounceRelease:
                if (track == 1){
                    state = forward;
                }
                if (track == 2){
                    state = idle2;
                }
                if (track == 3){
                    state = reverse;
                }
                if (track == 4){
                    state = idle1;
                }
                break;
            case idle1:
                track = 1;
                motorsOff();
                state = wait_Press;
                break;
            case forward:
                track = 2;       
                if(Speed == 511){
                    SpeedR = 1023;
                    SpeedL = 1023;
                }
                else if(Speed < 511){
                    SpeedR = 1023;
                    SpeedL = (2*Speed);
                }
                else if(Speed > 511){
                    SpeedR = 2*(1023 - Speed);
                    SpeedL = 1023;
                }
                else if (Speed == 1023){
                    SpeedR = 0;
                    SpeedL = 1023;
                }
                else if (Speed == 0){
                    SpeedR = 1023;
                    SpeedL = 0;
                }                
                RightMotor_Write(SpeedR);
                LeftMotor_Write(SpeedL);
                break;
            case idle2:
                track = 3;
                motorsOff();
                state = wait_Press;
                break;
            case reverse:
                track = 4;
                if(Speed == 511){
                    SpeedR = 1023;
                    SpeedL = 1023;
                }
                else if(Speed < 511){
                    SpeedR = 1023;
                    SpeedL = 2*Speed;
                }
                else if(Speed > 511){
                    SpeedR = 2*(1023 - Speed);
                    SpeedL = 1023;
                }
                else if (Speed == 1023){
                    SpeedR = 1023;
                    SpeedL = 0;
                }
                else if (Speed == 0){
                    SpeedR = 0;
                    SpeedL = 1023;
                }

                
                RightMotor_Write(0-SpeedR); //maybe it needs the zero to be interpreted as negative?
                LeftMotor_Write(0-SpeedL);
                break;                       
        }
    }
    
    return 0;
}
Example #4
0
ShootingWeapon::ShootingWeapon(ShootingUnit *agent, int power, int range, int frequency) : Actuator(static_cast<Agent*>(agent))
{
	initSW(power, range, frequency);
}
Example #5
0
ShootingWeapon::ShootingWeapon(ShootingUnit *agent) : Actuator(agent)
{

	initSW(20, 100, 1);
}
Example #6
0
int main(void) {
    
    SYSTEMConfigPerformance(40000000); //System clock is 40MHz
    //Because interrupts are good to have
    enableInterrupts();
    //Because ADC is good to have
    initADC();
    //Because a timer is good to have for PWM
    initTimer2();
    //Because PWM is good to have
    initPWM();
//    initMotorDirPins();
    //Because the delayUs function is typically pretty good to have
    initTimer4();
    //Because UART is good to have for interfacing with our speech chip
    initUART(40000000);
    //Because a talking robot is the absolute best thing to have
    //initSpeakJet();
    
    initSevenSegment();            
    
    initSW();
    
    int HelloBytes[] = {0, 0, 0, 0b01110110, 0b01111001, 0b00111000, 0b00111000, 0b00111111, 0, 0, 0};
    int helloCounter = 2;
    
    int myCounter = 0;    
    int timesInFwd = 0;
    //sendSpeakjet(initByteArray);
    
    while(1) {
                
        if(millis >= 5000) //if it's been some seconds
        {
            millis = 0; //reset the timer    
            //tell speakjet to speak state here                
            sendSpeakjet(AllYour);
        }
            
        if(ScrollMillis >= 600)
        {
            ScrollMillis = 0;
            helloCounter = ((helloCounter + 1) % 8);
            sevenSeg_write(0, HelloBytes[WRAPPOS((helloCounter-3), 8)]);
            sevenSeg_write(1, HelloBytes[WRAPPOS(helloCounter-2,8)]);
            sevenSeg_write(2, HelloBytes[(helloCounter-1) % 8]);
            sevenSeg_write(2, HelloBytes[WRAPPOS((helloCounter-1), 8)]);
            sevenSeg_write(3, HelloBytes[(helloCounter)]);
        }
            
        switch(myState) {
            case idle:
                motorsOff();
                break;
            case init:
                //Wait for a button press to start us up
                motorsOff();
                sendSpeakjet(BiteMy);
                delayUs(3000000);                
                myState = backwards;
                break;
            case backwards:
                timesInFwd = 0;
                LeftMotor_Write(-800);
                RightMotor_Write(-800);
                if(leftPairReading < THRESHOLD && rightPairReading < THRESHOLD)
                    myState = pivot_right;
                else if (rightPairReading < THRESHOLD)
                    myState = turnL_back;
                else if (leftPairReading < THRESHOLD)
                    myState = turnR_back;
                else
                    myState = backwards;
                break;
            case turnR_back:
                turnRight_back(73); //makes the LEFT motor turn at near full power. Yes, it IS the left motor and not the right one.
                turnLeft_back(300);
                sampleIRPairs(&leftPairReading, &rightPairReading, 10);
//                myState = (rightPairReading >= THRESHOLD) ? forward : turnR;
                if (leftPairReading < THRESHOLD && rightPairReading < THRESHOLD) //both dark
                    myState = pivot_right;
                else if (rightPairReading < THRESHOLD) 
                    myState = turnR_back;
                else if (leftPairReading < THRESHOLD) 
                    myState = turnL_back;
                else 
                    myState = backwards;
                break;
            case turnL_back:
                turnRight_back(300); //makes the LEFT motor turn at near full power. Yes, it IS the left motor and not the right one.
                turnLeft_back(73);
                sampleIRPairs(&leftPairReading, &rightPairReading, 10);
//                myState = (rightPairReading >= THRESHOLD) ? forward : turnR;
                if (leftPairReading < THRESHOLD && rightPairReading < THRESHOLD) //both dark
                    myState = pivot_right;
                else if (rightPairReading < THRESHOLD) 
                    myState = turnR_back;
                else if (leftPairReading < THRESHOLD) 
                    myState = turnL_back;
                else 
                    myState = backwards;
                break;
            case pivot_right:
//                if(leftPairReading >= THRESHOLD) //left is light
//                    myState = forward;
//                break;
                RightMotor_Write(-650);
                LeftMotor_Write(700);
                if(rightPairReading > THRESHOLD)
                    myState = forward;
                break;
            case turnR:
//                turnRight(512);
                turnRight(73); //makes the LEFT motor turn at near full power. Yes, it IS the left motor and not the right one.
                turnLeft(800);
                sampleIRPairs(&leftPairReading, &rightPairReading, 10);
//                myState = (rightPairReading >= THRESHOLD) ? forward : turnR;
                if (leftPairReading < THRESHOLD && rightPairReading < THRESHOLD) //both dark
                    myState = turnR;
                else if (rightPairReading < THRESHOLD) 
                    myState = turnR;
                else if (leftPairReading < THRESHOLD) 
                    myState = turnL;
                else 
                    myState = forward;
                break;
            case turnL:
//                turnLeft(512);
                turnLeft(73); //makes RIGHT motor run at near full power. Yes, it IS the right motor, not the left one.
                turnRight(800);
                sampleIRPairs(&leftPairReading, &rightPairReading, 10);
//                myState = (leftPairReading >= THRESHOLD) ? forward : turnL;
                if (leftPairReading < THRESHOLD && rightPairReading < THRESHOLD) 
                    myState = turnR;
                else if (rightPairReading < THRESHOLD) 
                    myState = turnR;
                else if (leftPairReading < THRESHOLD)  
                    myState = turnL;
                else 
                    myState = forward;                
                break;
            case forward:
                if(timesInFwd >= 25000)
                {
                    sendSpeakjet(finishedPhrase);
                    myState = backwards;
//                    myState = idle;
                    break;
                }
                timesInFwd++;
                goForward();
                sampleIRPairs(&leftPairReading, &rightPairReading, 100);
                if (rightPairReading < THRESHOLD) {
                    myState = turnR; 
                    timesInFwd = 0;
                }
                else if (leftPairReading < THRESHOLD) { 
                    myState = turnL;
                    timesInFwd = 0;
                }
                break;
        }
    }
    
    return (EXIT_SUCCESS);
}