Hallo zusammen.
Vorweg ich bin ein Neuling was das programmieren von µC und Arduinos betrifft.
Eine Verwandte hat mich gebeten für ihr Kind ein Puppentheater zu bauen und ich hab mich jetzt dazu entschieden dieses mit einem Arduino Mega2560, 6 EasyDriver v44 und 6 dazupassenden Schrittmotoren zu bauen.
Beim Programmieren bin ich jetzt aber auf erste Schwierigkeiten gestoßen. Und zwar hab ich einmal 3 Funktionen definiert in denen die Schrittmotoren angesteuert werden.
Leider hat sich das Problem ergeben, dass sich immer alle Motoren drehen, bzw. alle drei Funktionen ausgeführt werden, obwohl immer nur eine Funktion nach der anderen abgearbeitet werden sollte.
Ich hoffe ihr könnt mir helfen
int Distance_1_1 = 0;//Record the number of steps motor 1 has taken
int Distance_2_1 = 0;//Record the number of steps motor 2 has taken
int Distance_3_1 = 0;//Record the number of steps motor 3 has taken
void setup() {
pinMode(0, OUTPUT);//Direction Motor 1
pinMode(1, OUTPUT);//Step Motor 1
pinMode(2, OUTPUT);//Direction Motor 2
pinMode(3, OUTPUT);//Step Motor 2
pinMode(4, OUTPUT);//Direction Motor 3
pinMode(5, OUTPUT);//Step Motor 3
digitalWrite(0, LOW);//
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
}
void pause(){
digitalWrite(1, LOW);
digitalWrite(3, LOW);
digitalWrite(5, LOW);
delayMicroseconds(100);
}
void schritt_1(){
digitalWrite(1, HIGH);
//digitalWrite(3, HIGH);
//digitalWrite(5, HIGH);
delayMicroseconds(100);
digitalWrite(1, LOW);
//digitalWrite(3, LOW);
//digitalWrite(5, LOW);
delayMicroseconds(100);
Distance_1_1 = Distance_1_1 + 1; // record this step
//Distance_2_1 = Distance_2_1 +1;
//Distance_3_1 = Distance_3_1 +1;
// Check to see if we are at the end of our move
if (Distance_1_1 == 900)
{
// We are! Reverse direction (invert DIR signal)
if (digitalRead(0) == LOW)
{
digitalWrite(0, HIGH);
}
else
{
digitalWrite(0, LOW);
}
// Reset our distance back to zero since we're
// starting a new move
Distance_1_1 = 0;
// Now pause for half a second
delay(500);
}
//if (Distance_2_1 == 900)
//{
// We are! Reverse direction (invert DIR signal)
//if (digitalRead(2) == LOW)
//{
//digitalWrite(2, HIGH);
//}
//else
//{
//digitalWrite(2, LOW);
//}
// Reset our distance back to zero since we're
// starting a new move
//Distance_2_1 = 0;
// Now pause for half a second
//delay(500);
//}
//if (Distance_3_1 == 900)
//{
// We are! Reverse direction (invert DIR signal)
//if (digitalRead(4) == LOW)
//{
//digitalWrite(4, HIGH);
//}
//else
//{
//digitalWrite(4, LOW);
//}
// Reset our distance back to zero since we're
// starting a new move
//Distance_3_1 = 0;
// Now pause for half a second
//delay(500);
//}
}
void schritt_2(){
//digitalWrite(1, HIGH);
digitalWrite(3, HIGH);
//digitalWrite(5, HIGH);
delayMicroseconds(100);
//digitalWrite(1, LOW);
digitalWrite(3, LOW);
//digitalWrite(5, LOW);
delayMicroseconds(100);
//Distance_1_1 = Distance_1_1 + 1; // record this step
Distance_2_1 = Distance_2_1 +1;
//Distance_3_1 = Distance_3_1 +1;
// Check to see if we are at the end of our move
//if (Distance_1_1 == 1800)
//{
// We are! Reverse direction (invert DIR signal)
//if (digitalRead(0) == LOW)
//{
//digitalWrite(0, HIGH);
//}
//else
//{
//digitalWrite(0, LOW);
//}
// Reset our distance back to zero since we're
// starting a new move
//Distance_1_1 = 0;
// Now pause for half a second
//delay(500);
//}
if (Distance_2_1 == 1800)
{
// We are! Reverse direction (invert DIR signal)
if (digitalRead(2) == LOW)
{
digitalWrite(2, HIGH);
}
else
{
digitalWrite(2, LOW);
}
// Reset our distance back to zero since we're
// starting a new move
Distance_2_1 = 0;
// Now pause for half a second
delay(500);
}
//if (Distance_3_1 == 1800)
//{
// We are! Reverse direction (invert DIR signal)
//if (digitalRead(4) == LOW)
//{
//digitalWrite(4, HIGH);
//}
//else
//{
//digitalWrite(4, LOW);
//}
// Reset our distance back to zero since we're
// starting a new move
//Distance_3_1 = 0;
// Now pause for half a second
//delay(500);
//}
}
void schritt_3(){
digitalWrite(5, HIGH);
delayMicroseconds(100);
digitalWrite(5, LOW);
delayMicroseconds(100);
Distance_3_1 = Distance_3_1 +1;
// Check to see if we are at the end of our move
if (Distance_3_1 == 3600)
{
// We are! Reverse direction (invert DIR signal)
if (digitalRead(4) == LOW)
{
digitalWrite(4, HIGH);
}
else
{
digitalWrite(4, LOW);
}
// Reset our distance back to zero since we're
// starting a new move
Distance_3_1 = 0;
// Now pause for half a second
delay(500);
}
}
void loop() {
schritt_1();
//delayMicroseconds(100);
pause();
schritt_2();
pause();
schritt_3();
pause();
//delayMicroseconds(100);
}