Zum Hauptinhalt springen Skip to page footer

Das erste Programm

In deinem ersten Programm (lade es hier herunter) nutzt du eine Abwandlung der Motorklasse dieser Website. Statt eines Ecoders mit zwei Lichtschranken nutzt du einen Encoder mit nur einer Lichtschranke. Dadurch kannst du nicht mehr feststellen, in welche Richtung sich das Rad dreht. Wenn du allerdings davon ausgehst, dass sich bei positiver Motorleistung das Rad vorwärts und bei negativer Motorleistung rückwärts dreht, brauchst du das auch nicht. 

Bei der Konstruktion des Objekts MR (MotorRechts) übergibst du dem Konstruktor die Pins, die für die Motorsteuerung nötig sind (siehe Kommentarzeilen). Für die Steuerung sorgt ab jetzt das Objekt MR.

#include"motor.h"
#include < EnableInterrupt.h >

/*
 * en EnablePin
 * m1 Motorpin1
 * m2 Motorpin2
 * i1 Inputpin1 Lichtschranke
 * mmps Auflösung in mm/Step
 */
Motor MR(6 ,4 ,5 ,3, 5.8119415);
// 2*PI*37mm/40 Schritte = 5,8119415 mm/Schritt

void setup() 
{
  Serial.begin(9600); 
  // Wenn sich Pin3 ändert soll die Methode iRoutineR aufgerufen werden
  enableInterrupt(3,iRoutineR,CHANGE);
}

void loop() 
{ 
  MR.power(100);
  Serial.print(MR.getS());
  Serial.print("; ");
  Serial.println(MR.getV());
  delay(10);
}

void iRoutineR() 
{
  MR.richtung();
}

Das Einzige, was das Objekt MR nicht kann, ist einen sogenannten Interrupt zu programmieren. Das übernimmst du in der Methode void setup(). Das machst du mit enableInterrupt(3,iRoutineR,CHANGE); .

Immer wenn sich die Spannung an Pin 3 ändert wird alles stehen und liegen gelassen und die Methode iRoutineR() ausgeführt.
Sie führt nur MR.richtung() aus. MR.richtung() zählt bei positiver Motorleistung den Schrittzähler um eins hoch, bei negativer Motorleistung um eins runter.

Anschließend macht der Arduino da weiter, wo er unterbrochen wurde.

Im Mainloop wird ständig die Motorleistung auf 100 gesetzt und die zurückgelegte Strecke in mm und die Geschwindigkeit in mm/s ausgegeben.

Falls bei positiver Motorleistung das Rad rückwärts dreht, solltest du die Motorpins m1 und m2 vertauschen. Das kannst du im Programm ganz leicht bewerkstelligen:

Motor MR(6 ,5 ,4 ,3, 5.8119415);