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; }
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 { } }
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; }
ShootingWeapon::ShootingWeapon(ShootingUnit *agent, int power, int range, int frequency) : Actuator(static_cast<Agent*>(agent)) { initSW(power, range, frequency); }
ShootingWeapon::ShootingWeapon(ShootingUnit *agent) : Actuator(agent) { initSW(20, 100, 1); }
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); }