Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Fork of Robocode by
source/movement.cpp
- Committer:
- cittecla
- Date:
- 2017-03-04
- Revision:
- 24:6c2fec64f890
- Parent:
- 23:4ddc4216f335
- Child:
- 25:08ee4525155b
File content as of revision 24:6c2fec64f890:
/**
* Movement function library
* Handels Movement of the Robot
**/
#include "mbed.h"
#include "move.h"
static double time_counter = 0.0f;
static double timer0 = 0.0f;
static float PID_correction_value = 1.0f;
static float power_value_slow = 0.6f;
static float power_value_medium = 0.7f;
static float power_value_fast = 0.8f;
static float ludicrous_value = 1.0f;
//motor stuff
DigitalOut enableMotorDriver(PB_2);
PwmOut pwmL(PA_8);
PwmOut pwmR(PA_9);
DigitalIn motorDriverFault(PB_14);
DigitalIn motorDriverWarning(PB_15);
//DigitalOut led(LED1); // Board LED
static int EncoderCounterLeft = 0;
static int EncoderCounterRight = 0;
void move_init()
{
pwmL.period(0.00005f); // Setzt die Periode auf 50 μs
pwmR.period(0.00005f);
pwmL.write(0.5f); // Setzt die Duty-Cycle auf 50%
pwmR.write(0.5f);
enableMotorDriver = 1;
EncoderCounterLeft = 0;
EncoderCounterRight = 0;
PID_correction_value = 1.0f;
}
void move_forward_slow(float correction_value)
{
pwmL.write(power_value_slow);
pwmR.write(1-power_value_slow*correction_value);
}
void move_forward_medium(float correction_value)
{
pwmL = power_value_medium;
pwmR = 1-power_value_medium*correction_value;
}
void move_forward_fast(float correction_value)
{
pwmL = power_value_fast;
pwmR = 1-power_value_fast*correction_value;
}
void move_backward_slow(float correction_value)
{
pwmL = 1-power_value_slow*correction_value;
pwmR = power_value_slow;
}
void move_backward_medium(float correction_value)
{
pwmL = 1-power_value_slow*correction_value;
pwmR = power_value_slow;
}
void move_backward_fast(float correction_value)
{
pwmL = 1-power_value_slow*correction_value;
pwmR = power_value_slow;
}
void stop_movement()
{
pwmL = 0.5f;
pwmR = 0.5f;
}
void highPulseDetectedL()
{
EncoderCounterLeft += 1;
//led = 1;
}
void highPulseDetectedR()
{
EncoderCounterRight +=1;
}
void sync_movement(bool speed, bool direction)
{
/* if(EncoderLeftA) {
led = 1;
} else {
led = 0;
}*/
// PID correction Value calcualtion
if(EncoderCounterLeft > EncoderCounterRight) {
PID_correction_value += 0.0001f;
printf("Left higher");
} else {
if(EncoderCounterLeft < EncoderCounterRight) {
PID_correction_value -= 0.0001f;
printf("Right higher");
} else {
printf("Even");
}
}
/* if(PID_correction_value < 0.0f) {
PID_correction_value = 0;
}
if(PID_correction_value > 2.0f) {
PID_correction_value = 2;
}*/
// Call movement:
// direction 0 = backward, direction 1 = forward
// speed 0 = slow, speed 1 = medium
if(direction && speed) {
move_forward_medium(PID_correction_value);
}
if(direction && !speed) {
move_forward_slow(PID_correction_value);
}
if(!direction && speed) {
move_backward_medium(PID_correction_value);
}
if(!direction && !speed) {
move_backward_slow(PID_correction_value);
}
}
void termiante_sync_movement()
{
PID_correction_value = 1.0f;
}
