void TIM3_IRQHandler() { // Checks whether the TIM3 interrupt has occurred or not if (TIM_GetITStatus(TIM3, TIM_IT_Update)) { // Read ADC value (10-bit PWM) adcValue = ADC_Read() >> 2; // Add audio effect if (effect & LOW_PASS) { adcValue = low_pass(adcValue); } if (effect & PITCH_UP) { adcValue = pitch_up(adcValue); } if (effect & PITCH_DOWN) { adcValue = pitch_down(adcValue); } // Write to PWM PWM_Write(adcValue); // Clears the TIM3 interrupt pending bit TIM_ClearITPendingBit(TIM3, TIM_IT_Update); } }
//This function writes a speed to the left motor, which operates on PWM1 and PWM2 void LeftMotor_Write(int speed) { speed = 0-speed; if(speed > 0) { PWM_Write(PWM1, speed); PWM_WriteDir(PWM1, FORWARD); } else if(speed < 0) { PWM_WriteDir(PWM1, BACKWARD); PWM_Write(PWM1, 1023 + speed); } else { PWM_Write(PWM1, 0); PWM_WriteDir(PWM1, FORWARD); } }
void RightMotor_Write(int speed) { speed = 0-speed; if(speed > 0) { PWM_Write(PWM2, speed); PWM_WriteDir(PWM2, FORWARD); } else if (speed < 0) { PWM_WriteDir(PWM2, BACKWARD); PWM_Write(PWM2, 1023 + speed); } else { PWM_Write(PWM2, 0); PWM_WriteDir(PWM2, FORWARD); } }
void dutyCycleTest(int testNum) { switch (testNum) { case 1: PWM_Write(PWM2+PWM1, 127); delayUs(2000000); break; case 2: PWM_Write(PWM2+PWM1, 255); delayUs(2000000); break; case 3: PWM_Write(PWM2+PWM1, 511); delayUs(2000000); break; case 4: PWM_Write(PWM2+PWM1, 767); delayUs(2000000); break; case 5: PWM_Write(PWM2+PWM1, 1023); delayUs(2000000); break; } }
void motorsOff() { PWM_Write(PWM1+PWM2, 0); PWM_WriteDir(PWM1+PWM2, FORWARD); }