with the tof code
Dependencies: mbed Servo ros_lib_kinetic
Motors/Motor.cpp
- Committer:
- Stumi
- Date:
- 2019-12-10
- Revision:
- 8:262c6c40bff9
- Parent:
- 7:8248af58df5a
- Child:
- 9:326b8f261ef0
File content as of revision 8:262c6c40bff9:
/*-------------------------------------------------------------------------------- Filename: main.cpp Description: Main program loop --------------------------------------------------------------------------------*/ #include "Buzzer.h" #include "Motor.h" #include "LED.h" #include <ros.h> #include <std_msgs/UInt8.h> cMotor MotorL(M1_PWM, M1_IN1, M1_IN2); //Left motor class and pin initialisation cMotor MotorR(M2_PWM, M2_IN1, M2_IN2); //Right motor class and pin initialisation //Class definitions cBuzzer cBuzzer(Buzz); cRGB_LED cRGB_LED(DIAG_RED, DIAG_BLU, DIAG_GRN); void keySub(const std_msgs::UInt8 &keyPress) { printf("%d", keyPress.data); if (keyPress.data == 8) { MotorR.Forwards(1.0f); MotorL.Forwards(1.0f); wait(0.5); } else if (keyPress.data == 4) { MotorR.Forwards(1.0f); MotorL.Backwards(1.0f); wait(0.5); } else if (keyPress.data == 6) { MotorR.Backwards(1.0f); MotorL.Forwards(1.0f); wait(0.5); } else if (keyPress.data == 2) { MotorR.Backwards(1.0f); MotorL.Backwards(1.0f); wait(0.5); } else if (keyPress.data == 5) { MotorR.Stop(); MotorL.Stop(); wait(0.5); } else { MotorR.Stop(); MotorL.Stop(); } } /*-------------------------------------------------------------------------------- Function name: update_power_levels Input Parameters: vBatt Output Parameters: N/A Description: Function used to send the battery level over to the LED class locally from global source files ----------------------------------------------------------------------------------*/ void update_power_levels(float vBatt) { cRGB_LED.record_power(vBatt); } /*-------------------------------------------------------------------------------- Function name: Check_for_obstacles Input Parameters: cMotor - MotorL (left motor) cMotor MotorR (right motor) TOFrange[4] - sensor measurements Output Parameters: N/A Description: Simple obstacle avoidance functionality ----------------------------------------------------------------------------------*/ void Check_for_obstacles(uint8_t TOFRange[4]) { //If top right sensor(6) detects something if (TOFRange[2]<200) { if(TOFRange[2]>150) { //Provided its 15cm away... cBuzzer.Beep(); cRGB_LED.blue_led(); wait(0.02); cRGB_LED.display_power(); if(TOFRange[3]<200) { //...and the back sensor detects something //Smooth turn right MotorR.Forwards(0.8f); MotorL.Forwards(0.2f); } else if(TOFRange[1]<200) { //...and the top left sensor detects something //Smooth turn left MotorR.Forwards(0.2f); MotorL.Forwards(0.8f); } else { MotorR.Forwards(0.8f); MotorL.Forwards(0.2f); } } else { if(TOFRange[3]<200) { MotorR.Backwards(0.1f); MotorL.Backwards(0.9f); } else if(TOFRange[1]<200) { MotorR.Backwards(0.9f); MotorL.Backwards(0.1f); } else { MotorR.Backwards(0.1f); MotorL.Backwards(0.9f); } } } else if(TOFRange[3]<200) { cBuzzer.Beep(); cRGB_LED.blue_led(); wait(0.02); cRGB_LED.display_power(); if(TOFRange[1]<200) { MotorR.Forwards(1.0f); MotorL.Forwards(1.0f); } else { MotorR.Forwards(0.9f); MotorL.Forwards(0.1f); } } else if(TOFRange[1]<200) { cBuzzer.Beep(); cRGB_LED.blue_led(); wait(0.02); cRGB_LED.display_power(); MotorR.Forwards(0.1f); MotorL.Forwards(0.9f); } else if(TOFRange[0]<200) { cBuzzer.Beep(); cRGB_LED.blue_led(); wait(0.02); cRGB_LED.display_power(); MotorR.Forwards(1.0f); MotorL.Forwards(1.0f); } else { MotorR.Forwards(1.0f); MotorL.Forwards(1.0f); } } /*-------------------------------------------------------------------------------- Function name: cMotor Input Parameters: PwmOut pwm - Motor PWM, DigitalOut fwd - Motor input1, DigitalOut rev - Motor Input2 Output Parameters: N/A Description: Class constructor (Initialisation upon creating class) ----------------------------------------------------------------------------------*/ cMotor::cMotor(PwmOut pwm, DigitalOut fwd, DigitalOut rev):_pwm(pwm), _fwd(fwd), _rev(rev) { // Set initial condition of PWM _pwm.period(0.001); //1KHz _pwm = 0; // Initial condition of output enables _fwd = 0; _rev = 0; } /*-------------------------------------------------------------------------------- Function name: Forwards Input Parameters: float speed - PWM duty between 0-1 Output Parameters: N/A Description: Drives the motor forwards at a designated speed ----------------------------------------------------------------------------------*/ void cMotor::Forwards(float speed) { _fwd = 1; _rev = 0; _pwm = speed; } /*-------------------------------------------------------------------------------- Function name: Backwards Input Parameters: float speed - PWM duty between 0-1 Output Parameters: N/A Description: Drives the motor backwards at a designated speed ----------------------------------------------------------------------------------*/ void cMotor::Backwards(float speed) { _fwd = 0; _rev = 1; _pwm = speed; } /*-------------------------------------------------------------------------------- Function name: Stop Input Parameters: N/A Output Parameters: N/A Description: Drives the motor backwards at a designated speed ----------------------------------------------------------------------------------*/ void cMotor::Stop() { _fwd = 0; _rev = 0; _pwm = 0; }