Hallo Forum,
ich habe einen Schrittmotor 28BYJ48/ ULN2003APC (Steckchip, Treiberboard mit den 4 roten LEDs) am Arduino. Den möchte ich eigentlich nur ganz trivial per Druck auf den Taster nach rechts drehen und mit erneutem Druck nach links drehen lassen. Ob das Zeit- oder Umdrehungsbasierend ist, ist mir nicht wichtig. Ich muss dann, wenn alles klappt sowieso herumprobieren. Nun sind meine Programmierkenntnisse miserabel... sagen wir einfach, ich hab so gut, wie keine.
Ich hab natürlich ein paar Test- Sketche gefunden. Ich hab aber kein Plan, wie ich das umschreiben soll. Kann mir dabei jemand helfen?
Also ganz simpel: Druck auf Taster, Motor dreht rechts (n Sekunden oder n RPM). Erneuter Druck: entgegengesetzt das Ganze.
Ich will die Nummer ja hier nicht so verkaufen, wie "hier habt Ihr, jetzt kümmert Euch", aber mit einem "das musste dich mal hinsetzten und Grundsachen lernen", ist auch irgendwie doof.
Hier mal der Test Sketch:
const int motorPin1 = 8; // Blue - In 1
const int motorPin2 = 9; // Pink - In 2
const int motorPin3 = 10; // Yellow - In 3
const int motorPin4 = 11; // Orange - In 4
// Red - pin 5 (VCC)
unsigned int lowSpeed = 10000; // Notabene: nicht über 16000
unsigned int highSpeed = 1000;
void setup() {
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
}
void loop()
{ unsigned long n = millis() / 3000; // 3 Sekunden
switch(n % 8)
{ case 0: stop(); break;
case 1: rechtsrum(lowSpeed); break;
case 2: stop(); break;
case 3: linksrum(lowSpeed); break;
case 4: stop(); break;
case 5: rechtsrum(highSpeed); break;
case 6: stop(); break;
case 7: linksrum(highSpeed); break;
}
}
void rechtsrum(unsigned int motorSpeed)
{ // 1
digitalWrite(motorPin4, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, LOW);
delayMicroseconds(motorSpeed);
// 2
digitalWrite(motorPin4, HIGH);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, LOW);
delayMicroseconds(motorSpeed);
// 3
digitalWrite(motorPin4, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, LOW);
delayMicroseconds(motorSpeed);
// 4
digitalWrite(motorPin4, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin1, LOW);
delayMicroseconds(motorSpeed);
// 5
digitalWrite(motorPin4, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin1, LOW);
delayMicroseconds(motorSpeed);
// 6
digitalWrite(motorPin4, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin1, HIGH);
delayMicroseconds(motorSpeed);
// 7
digitalWrite(motorPin4, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, HIGH);
delayMicroseconds(motorSpeed);
// 8
digitalWrite(motorPin4, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, HIGH);
delayMicroseconds(motorSpeed);
}
void linksrum(unsigned int motorSpeed)
{ // 1
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delayMicroseconds(motorSpeed);
// 2
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delayMicroseconds(motorSpeed);
// 3
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delayMicroseconds(motorSpeed);
// 4
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delayMicroseconds(motorSpeed);
// 5
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delayMicroseconds(motorSpeed);
// 6
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, HIGH);
delayMicroseconds(motorSpeed);
// 7
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delayMicroseconds(motorSpeed);
// 8
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delayMicroseconds(motorSpeed);
}
void stop()
{ digitalWrite(motorPin4, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, LOW);
}
Im Anhang ist der zweite Test- Sketch
test.ino (2.8 KB)