Code:
/* ich habe deine, vorher angegebene Pinbelegung übernommen (sind nur andere Namen, weiter nix),
wenn du die Verkabelung änderst, musst du die entsprechenden Pin-Nummern bei den defines eintragen!
Die Variable "gasVorgabe" stellt die Motoren auf Halbgas, du kannst, indem du sie veränderst (zwischen
0 und 255) testen, ab wann der Roboter überhaupt los fährt, und auch, wie schnell er werden kann.
Drehen hab ich jetzt nicht eingebaut, da ich nicht weiss, welche Motornummer an welcher Stelle des
Roboters verbaut ist. */
#define M1aPin 52 // Motor1,Kabel a
#define M1bPin 50 // Motor1 Kabel b
#define M1GasPin 11 // PWM Motor1
#define M2aPin 48 // Motor2 Kabel a
#define M2bPin 46 // Motor2 Kabel b
#define M2GasPin 10 // PWM Motor2
#define M3aPin 53 // Motor3 Kabel a
#define M3bPin 51 // Motor3 Kabel b
#define M3GasPin 8 // Motor3 PWM
#define M4aPin 49 // Motor4 Kabel a
#define M4bPin 47 // Motor4 Kabel b
#define M4GasPin 9 // Motor4 PWM
int gasVorgabe=128; // hier legen wir fest, wie schnell die Motoren laufen, wenn du den Wert erhöhst
// laufen sie schneller, max. 255
void setup() // hier legen wir lediglich alle Motorenpins als Ausgänge fest und stellen sicher, dass die Motoren
{ // nicht einfach los laufen
pinMode(M1aPin, OUTPUT); //Motor1
pinMode(M1bPin,OUTPUT);
pinMode(M1GasPin,OUTPUT); //PWM Motor1
pinMode(M2aPin, OUTPUT); // Motor2
pinMode(M2bPin,OUTPUT);
pinMode(M2GasPin,OUTPUT); //PWM Motor2
pinMode(M3aPin, OUTPUT); //Motor3
pinMode(M3bPin,OUTPUT);
pinMode(M3GasPin,OUTPUT); // PWM Motor3
pinMode(M4aPin, OUTPUT); //Motor4
pinMode(M4bPin,OUTPUT);
pinMode(M4GasPin,OUTPUT);// PWM Motor4
analogWrite(M1GasPin,0);
analogWrite(M2GasPin,0);
analogWrite(M3GasPin,0);
analogWrite(M4GasPin,0);
delay(2000); // 2 Sekunden, um die Fingr vom Roboter zu nehmen, ehe.....
}
void vorwaerts() //******** vorwärts fahren für ungefähr 2 Sekunden ******************
{
//Motor_1 & 2 vorwärts
digitalWrite(M1aPin, LOW); // Motor1 Richtung festlegen
digitalWrite(M1bPin, HIGH);
digitalWrite(M2aPin, LOW); // Motor2 Richtung festlegen
digitalWrite(M2bPin, HIGH);
digitalWrite(M3aPin, LOW); // Motor3 Richtung festlegen
digitalWrite(M3bPin, HIGH);
digitalWrite(M4aPin, LOW); // Motor4 Richtung festlegen
digitalWrite(M4bPin, HIGH);
analogWrite(M1GasPin, gasVorgabe); //und hier schalten wir die PWM auf alle vier Motoren
analogWrite(M2GasPin,gasVorgabe);
analogWrite(M3GasPin,gasVorgabe);
analogWrite(M4GasPin,gasVorgabe);
delay(2000); // zwei Sekunden fahren,
analogWrite(M1GasPin,0); //Dann alle vier Motoren stoppen (schont die Getriebe ;) )
analogWrite(M2GasPin,0);
analogWrite(M3GasPin,0);
analogWrite(M4GasPin,0);
}
void rueckwaerts() //***Rückwärts gehts genauso, nur dass jeweils die A-undB-Pins "umgedreht" werden***
{
digitalWrite(M1aPin, HIGH); // Motor1 Richtung festlegen
digitalWrite(M1bPin, LOW);
digitalWrite(M2aPin, HIGH); // Motor2 Richtung festlegen
digitalWrite(M2bPin, LOW);
digitalWrite(M3aPin, HIGH); // Motor3 Richtung festlegen
digitalWrite(M3bPin, LOW);
digitalWrite(M4aPin, HIGH); // Motor4 Richtung festlegen
digitalWrite(M4bPin, LOW);
analogWrite(M1GasPin, gasVorgabe); //und hier schalten wir die PWM auf alle vier Motoren
analogWrite(M2GasPin,gasVorgabe);
analogWrite(M3GasPin,gasVorgabe);
analogWrite(M4GasPin,gasVorgabe);
delay(2000); // zwei Sekunden fahren,
analogWrite(M1GasPin,0); //Dann alle vier Motoren stoppen (schont die Getriebe ;) )
analogWrite(M2GasPin,0);
analogWrite(M3GasPin,0);
analogWrite(M4GasPin,0);
}
void loop() //******* das Hauptprogramm, in dem es rund geht... ***********
{
for (int i=0; i<3; i++) //machen wir das Ganze einfach dreimal...
{
vorwaerts();
delay(500); //halbe Sekunde warten, zum "bremsen"
rueckwaerts();
delay(500); // das selbe nochmal, damit wir nicht aus voller Fahrt rückwärts auf volle Fahrt vorwärts gehn
}
while(1); //stoppt das Programm, da stehende roboter leichter einzufangen sind ;)
}
Lies bitte die Kommentare im Programm auch und spiel mal mit der PWM-Variable etwas rum.
Lesezeichen