Motoransteuerung lesbarer gemacht

This commit is contained in:
meyma 2007-02-13 19:43:03 +00:00
parent 5c33efe58d
commit 0dbbdb4db3
2 changed files with 48 additions and 34 deletions

View file

@ -115,46 +115,45 @@ void Board::motor(int i, int speed)
if((i < 0) || (i > 3)) return;
const int OFFSET = 40; // Motor does not work with very low ratio
const int PWM_MAX = 255;
int pwm = 0; // PWM-Speed
int pwm = abs(speed)+OFFSET;
if(speed != 0) pwm = abs(speed)+OFFSET;
if(pwm > PWM_MAX) pwm = PWM_MAX;
if(i == 0)
{
if(i == 0) {
MOTOR0_PWM = pwm;
if(speed > 0)
{
PORTD |= (1 << 5);//In 1 ein
PORTD &= ~(1 << 4);//In 2 aus
MOTOR0_PORT |= MOTOR0_A;//In 1 ein
MOTOR0_PORT &= ~MOTOR0_B;//In 2 aus
}
else if(speed < 0)
{
PORTD |= (1 << 4);//In 2 ein
PORTD &= ~(1 << 5);//In 1 aus
MOTOR0_PORT |= MOTOR0_B;//In 2 ein
MOTOR0_PORT &= ~MOTOR0_A;//In 1 aus
}
else
{
PORTD |= (1 << 4);//In 2 ein
PORTD |= (1 << 5);//In 1 ein
MOTOR0_PORT |= MOTOR0_B;//In 2 ein
MOTOR0_PORT |= MOTOR0_A;//In 1 ein
}
}
else if(i == 1)
{
else if(i == 1) {
MOTOR1_PWM = pwm;
if(speed > 0)
{
PORTD |= (1 << 6);//In 1 ein
PORTD &= ~(1 << 7);//In 2 aus
MOTOR1_PORT |= MOTOR1_A;//In 1 ein
MOTOR1_PORT &= ~MOTOR1_B;//In 2 aus
}
else if(speed < 0)
{
PORTD |= (1 << 7);//In 2 ein
PORTD &= ~(1 << 6);//In 1 aus
MOTOR1_PORT |= MOTOR1_B;//In 2 ein
MOTOR1_PORT &= ~MOTOR1_A;//In 1 aus
}
else
{
PORTD |= (1 << 6);//In 2 ein
PORTD |= (1 << 7);//In 1 ein
MOTOR1_PORT |= MOTOR1_B;//In 2 ein
MOTOR1_PORT |= MOTOR1_A;//In 1 ein
}
}
else if(i == 2)
@ -162,18 +161,18 @@ void Board::motor(int i, int speed)
MOTOR2_PWM = pwm;
if(speed > 0)
{
PORTB |= (1 << 0);//In 1 ein
PORTB &= ~(1 << 1);//In 2 aus
MOTOR2_PORT |= MOTOR2_A;//In 1 ein
MOTOR2_PORT &= ~MOTOR2_B;//In 2 aus
}
else if(speed < 0)
{
PORTB |= (1 << 1);//In 2 ein
PORTB &= ~(1 << 0);//In 1 aus
MOTOR2_PORT |= MOTOR2_B;//In 2 ein
MOTOR2_PORT &= ~MOTOR2_A;//In 1 aus
}
else
{
PORTB |= (1 << 1);//In 2 ein
PORTB |= (1 << 0);//In 1 ein
MOTOR2_PORT |= MOTOR2_B;//In 2 ein
MOTOR2_PORT |= MOTOR2_A;//In 1 ein
}
}
else if(i == 3)
@ -181,18 +180,18 @@ void Board::motor(int i, int speed)
DRIBBLER_PWM = pwm;
if(speed > 0)
{
PORTB |= (1 << 2);//In 1 ein
PORTB &= ~(1 << 3);//In 2 aus
DRIBBLER_PORT |= DRIBBLER_A;//In 1 ein
DRIBBLER_PORT &= ~DRIBBLER_B;//In 2 aus
}
else if(speed < 0)
{
PORTB |= (1 << 3);//In 2 ein
PORTB &= ~(1 << 2);//In 1 aus
DRIBBLER_PORT |= DRIBBLER_B;//In 2 ein
DRIBBLER_PORT &= ~DRIBBLER_A;//In 1 aus
}
else
{
PORTB |= (1 << 2);//In 2 ein
PORTB |= (1 << 3);//In 1 ein
DRIBBLER_PORT |= DRIBBLER_B;//In 2 ein
DRIBBLER_PORT |= DRIBBLER_A;//In 1 ein
}
}
}

View file

@ -10,11 +10,26 @@
#define BEEPER_PIN PG2
// Definiere PWM-Ports für die Motoren/Dribbler
// Definiere Konstanten für die Motoren/Dribbler
#define MOTOR0_PORT PORTD
#define MOTOR0_PWM OCR3A
#define MOTOR0_A (1 << 5)
#define MOTOR0_B (1 << 4)
#define MOTOR1_PORT PORTD
#define MOTOR1_PWM OCR3B
#define MOTOR1_A (1 << 6)
#define MOTOR1_B (1 << 7)
#define MOTOR2_PORT PORTB
#define MOTOR2_PWM OCR1A
#define MOTOR2_A (1 << 0)
#define MOTOR2_B (1 << 1)
#define DRIBBLER_PORT PORTB
#define DRIBBLER_PWM OCR1C
#define DRIBBLER_A (1 << 2)
#define DRIBBLER_B (1 << 3)
#define UART_BAUD_RATE 9600