Schritt 9: Macht es ein wenig besser
Während ich verbessern werde ich am Ende von diesem instructable Schritte hinzufügen.
11.10.09
Der vorige Code verfolgt den Ball ziemlich gut aber die Stepper sind in einen sehr steinigen Weg getrieben.
In dieser aktualisierten Code Signal die Verarbeitung Skizze nur ein für den Arduino wenn es eine Änderung in Richtung. So die Schrittmotoren nur in welcher Richtung laufen waren sie zuletzt auf, festgelegt, wenn sie aufgefordert werden, ändern. Dadurch werden die Motoren sehr viel schneller und reibungsloser laufen.
Aber es gibt noch etwas ein bisschen ab. Der Arduino scheint einige der Signale, damit die RepStrap mit der X-Y-Phase bis hin zur Seite geschoben landet nicht verpassen sollten.
Ich werde versuchen, dieses Problem zu beheben.
Der Arduino und Verarbeitung Code ist unten. Ich habe mehr Kommentare zu helfen, Dinge klar zu halten.
/////////////////////////////////////////////////
Arduino Code:
Lesen Sie Daten von der seriellen
Daten verwenden, um festzustellen, Richtung von X und Y Stepper
#define XstepPin 10
#define XdirPin 7
#define YstepPin 2
#define YdirPin 3
Int Val; Daten von der seriellen Schnittstelle
void setup() {}
PinMode (XstepPin, OUTPUT);
PinMode (XdirPin, OUTPUT);
PinMode (YstepPin, OUTPUT);
PinMode (YdirPin, OUTPUT);
Serial.Begin(9600); Starten Sie die serielle Kommunikation bei 9600 Bit/s
}
void loop() {}
Int DirX;
Int DirY;
Wenn (Serial.available()) {/ / wenn Daten zu lesen,
Val = Serial.read(); dann lesen Sie es und speichern Sie Wert in val
}
Wenn (Val == 'H') {//set die Richtung von X und Y, basierend auf Daten von Verarbeitung gesendet
DirX = hoch;
}
Wenn (Val == 'L') {}
DirX = LOW;
}
Wenn (Val == 'h') {}
DirY = hoch;
}
Wenn (Val == 'l') {}
DirY = LOW;
}
digitalWrite(XdirPin,dirX); Set X-Richtung
digitalWrite(YdirPin,dirY); Y-Richtung festlegen
digitalWrite(XstepPin,HIGH); Maßnahmen ergreifen
digitalWrite(YstepPin,HIGH);
delayMicroseconds(2);
digitalWrite(XstepPin,LOW);
digitalWrite(YstepPin,LOW);
delayMicroseconds(2);
delayMicroseconds(1000); <<<<<< Mit ÄNDERUNGSGESCHWINDIGKEIT <<<<<<<<
}
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
Verarbeitung von Code:
Dies gibt die Bewegung des springenden Balls der RepRap X und Y Achse
Import processing.serial.*;
Serielle MyPort; Serienklasse Objekt erstellen
Int Val;
Float X = 50,0;
Float y = 50,0;
SpeedX schweben = 1.0;
Schnelle Schwimmer =. 4;
Float Radius = 15,0;
Int DirectionX = 1;
Int directionY = 1;
Int Old_directionX = 1;
Int Old_directionY = 1;
void setup() {}
Größe (100, 100);
Smooth();
noStroke();
ellipseMode(RADIUS);
PortName String = Serial.list() [0];
MyPort = neue Seriennummer (diese, PortName, 9600);
}
void draw() {}
Fill(0,12);
Rect (0,0, Breite, Höhe);
Fill(255);
Ellipse (X, y, Radius, Radius);
X += SpeedX * DirectionX;
Wenn ((X > Breite-Radius) || (x < Radius)) {//change X Richtung wenn der Ball die Seite der box
DirectionX = - DirectionX;
}
y += schnelle * directionY;
Wenn ((y > Höhe-Radius) || (y < Radius)) {//change Y Richtung wenn der Ball die Seite der box
directionY = - directionY;
}
Wenn ((DirectionX! = Old_directionX) & & (DirectionX == 1)) {//if X Richtungswechsel print H
myPort.write('H');
Print('H');
Delay(100);
}
Wenn ((DirectionX! = Old_directionX) & & (DirectionX == -1)) {//if X Richtungswechsel print h
myPort.write('h');
Print('h');
Delay(100);
}
Wenn ((directionY! = Old_directionY) & & (directionY == 1)) {//if Y-Richtung geändert print L
myPort.write('L');
Print('L');
Delay(100);
}
Wenn ((directionY! = Old_directionY) & & (directionY == -1)) {//if Y-Richtung geändert print l
myPort.write('l');
Print('l');
Delay(100);
}
Old_directionX = DirectionX; speichert die Richtungen, die wir gerade, als die alte Richtung verwendet
Old_directionY = directionY;
Delay(100); kommentieren Sie um die ganze Sache für die Problembehandlung zu verlangsamen
}