Hallo zusammen
Ich bin neu hier und hab auch noch nicht viel Erfahrung mit Arduino programmieren. Daher wäre ich echt froh um eure Hilfe.
Ich arbeite in meiner Freizeit an einem Uhrenbeweger, gesteuert durch einen Schrittmotor. Dieser ist an einem TMC2100 angeschlossen. Im Moment bin ich soweit, dass über eine Startfläche auf dem Touchscreen (touch == 2) der Motor startet und endlos hin und her schwappt. Nach jeweils zwei Umdrehungen wechselt er die Richtung, das Ganze mit Beschleunigung und Entschleunigung. Den Lauf kann stoppe ich durch eine Stoppfläche auf dem Touchscreen (touch == 1). Soweit alles ok.
Ich hätte aber gerne eine weitere Schaltfläche (hier als Touch == 3 definiert), wo der Schrittmotor die Arbeit wie oben beschrieben aufnimmt und nach 500 Wechsel selbständig stoppt. Danach soll ich die Auswahl haben, entweder diese Funktion nochmals zu starten und wieder 500 mal hin- und her schwappen oder über die Startfläche (touch ==2) den Endlosbetrieb wieder zu starten.
Ich hab alles mögliche probiert, bin schon seit ein paar Wochen hier blockiert und finde einfach keinen Weg. Könnt ihr mir bitte helfen?
Hier der Code den ich soweit mal habe. Zur besseren Übersicht hab ich mal alles herausgelöscht, was nicht direkt mit dem Schrittmotor zu tun hat.
#include <AccelStepper.h>
// Define a stepper and the pins it will use
AccelStepper stepper(AccelStepper::DRIVER, 24, 26);
const int POWER_PIN = 28; //Stromversorgung für TMC2100
int i;
void setup() {
pinMode(POWER_PIN, OUTPUT);
digitalWrite(POWER_PIN, HIGH);
{
stepper.setMaxSpeed(400);
stepper.setAcceleration(200);
stepper.moveTo(800);
}
}
void loop() {
TSPoint p = ts.getPoint();
pinMode(XM, OUTPUT);
pinMode(YP, OUTPUT);
if (p.z > MINPRESSURE && p.z < MAXPRESSURE) {
p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);
Serial.print("("); Serial.print(p.x);
Serial.print(", "); Serial.print(p.y);
Serial.println(")");
if (p.x > 130 && p.x < 250) {
if (p.y > 70 && p.y < 150) {
touch = 1;
}
}
if (p.x > 130 && p.x < 250) {
if (p.y > 200 && p.y < 280) {
touch = 2;
}
}
if (p.x > 280 && p.x < 400) {
if (p.y > 70 && p.y < 150) {
touch = 3;
}
}
}
if (touch == 1) {
motoroff();
}
if (touch == 2) {
motor();
}
for (int i = 0; i <= 2; i++) {
Serial.println(i);
}
if ((touch == 3) && (i <= 500)) {
motor();
}
else {
motoroff();
}
}
void motor() {
// If at the end of travel go to the other end
if (stepper.distanceToGo() == 0)
stepper.moveTo(-stepper.currentPosition());
stepper.run();
}
void motoroff() {
// If at the end of travel go to the other end
if (stepper.distanceToGo() == 0)
stepper.moveTo(800);
stepper.run();
}
Vielen Dank im Voraus, Grüsse aus der Schweiz!
Mauro