Mats2006
31.01.2013, 14:35
Hey,
ich habe ein Problem.
Ich möchte über die H Brücke L293D zwei DC Motoren ansteuern.
Hierbei ist wichtig, dass ich die Geschwindigkeit vorher angeben kann. Sie muss NICHT währenddessen geändert werden.
Nach meinem Code kann ich nur dem einem Motor die Geschwindigkeit vorgeben, der andere bleibt ganz aus.
Wenn ich den Teil mit der Geschwindigkeitssteuerung weglasse, laufen beide auf Höchstgeschwindigkeit.
Hier ist mein Code:
#define STATE_IDLE 0
#define STATE_INIT 1
#define STATE_RUNNING 2
#define STATE_EXITING 3
const int in1Pin = 5; // H-Brücken-Eingangspins
const int in2Pin = 4;
const int in3Pin = 3; // H-Brücken-Eingangspins
const int in4Pin = 2;
const int en1Pin = 6;
const int en2Pin = 7;
const int buttonPin = 8;
int buttonState = 0;
int Zustand;
void setup()
{
Zustand = STATE_IDLE;
pinMode(buttonPin, INPUT);
pinMode(in1Pin, OUTPUT);
pinMode(in2Pin, OUTPUT);
pinMode(in3Pin, OUTPUT);
pinMode(in4Pin, OUTPUT);
}
void loop()
{
switch( Zustand )
{
case STATE_IDLE: Idle();
break;
case STATE_INIT: Init();
break;
case STATE_RUNNING: Run();
break;
case STATE_EXITING: Exiting();
break;
}
}
void Idle()
{
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
Zustand = STATE_INIT;
}
}
void Init()
{
delay(1000);
Zustand = STATE_RUNNING;
}
void Run()
{
analogWrite(en1Pin,70);
analogWrite(en2Pin,100);
digitalWrite(in1Pin,LOW);
digitalWrite(in2Pin,HIGH);
delay(1500);
digitalWrite(in1Pin,LOW);
digitalWrite(in2Pin,LOW);
digitalWrite(in3Pin,HIGH);
digitalWrite(in4Pin,LOW);
delay(5000);
digitalWrite(in3Pin,LOW);
digitalWrite(in4Pin,LOW);
digitalWrite(in2Pin,LOW);
digitalWrite(in1Pin,HIGH);
delay(1500);
digitalWrite(in1Pin,LOW);
digitalWrite(in2Pin,LOW);
Zustand = STATE_EXITING;
}
void Exiting()
{
delay(1000);
Zustand = STATE_IDLE;
}
Ich hoffe, ihr könnt mir helfen :)
Gruß,
Mathis
ich habe ein Problem.
Ich möchte über die H Brücke L293D zwei DC Motoren ansteuern.
Hierbei ist wichtig, dass ich die Geschwindigkeit vorher angeben kann. Sie muss NICHT währenddessen geändert werden.
Nach meinem Code kann ich nur dem einem Motor die Geschwindigkeit vorgeben, der andere bleibt ganz aus.
Wenn ich den Teil mit der Geschwindigkeitssteuerung weglasse, laufen beide auf Höchstgeschwindigkeit.
Hier ist mein Code:
#define STATE_IDLE 0
#define STATE_INIT 1
#define STATE_RUNNING 2
#define STATE_EXITING 3
const int in1Pin = 5; // H-Brücken-Eingangspins
const int in2Pin = 4;
const int in3Pin = 3; // H-Brücken-Eingangspins
const int in4Pin = 2;
const int en1Pin = 6;
const int en2Pin = 7;
const int buttonPin = 8;
int buttonState = 0;
int Zustand;
void setup()
{
Zustand = STATE_IDLE;
pinMode(buttonPin, INPUT);
pinMode(in1Pin, OUTPUT);
pinMode(in2Pin, OUTPUT);
pinMode(in3Pin, OUTPUT);
pinMode(in4Pin, OUTPUT);
}
void loop()
{
switch( Zustand )
{
case STATE_IDLE: Idle();
break;
case STATE_INIT: Init();
break;
case STATE_RUNNING: Run();
break;
case STATE_EXITING: Exiting();
break;
}
}
void Idle()
{
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
Zustand = STATE_INIT;
}
}
void Init()
{
delay(1000);
Zustand = STATE_RUNNING;
}
void Run()
{
analogWrite(en1Pin,70);
analogWrite(en2Pin,100);
digitalWrite(in1Pin,LOW);
digitalWrite(in2Pin,HIGH);
delay(1500);
digitalWrite(in1Pin,LOW);
digitalWrite(in2Pin,LOW);
digitalWrite(in3Pin,HIGH);
digitalWrite(in4Pin,LOW);
delay(5000);
digitalWrite(in3Pin,LOW);
digitalWrite(in4Pin,LOW);
digitalWrite(in2Pin,LOW);
digitalWrite(in1Pin,HIGH);
delay(1500);
digitalWrite(in1Pin,LOW);
digitalWrite(in2Pin,LOW);
Zustand = STATE_EXITING;
}
void Exiting()
{
delay(1000);
Zustand = STATE_IDLE;
}
Ich hoffe, ihr könnt mir helfen :)
Gruß,
Mathis