Zuerst einmal ein Hallo an alle,
Ich würde mir gerne einen Kameraschlitten bauen welcher über einen Schrittmotor angesteuert wird. Das ganze will ich dabei so simpel wie möglich halten. Der Schrittmotor soll dabei einfach in eine Richtung fahren und wenn er an einem Ende angekommen einen Taster auslösen und so wieder in die andere Richtung fahren.
Ich bin soweit, dass ich den Motor mit einem Starttaster starten kann und durch einen Interrupt mittels Taster bleibt er stehen. Wenn ich den Starttaster danach wieder drücke tut sich nichts. Hab mir schon viele Videos etc. darüber angeschaut wo Interrupts verwendet werden und wo das Programm danach wieder weiterläuft.
Ich bin mir nicht sicher ob Interrupts für mein Problem überhaupt die beste Lösung wären und wäre auch für andere mögliche Möglichkeiten sehr dankbar. Ich weiß nicht ob ich irgendwas essentielles dabei übersehe oder falsch mache aber ich glaube mit eurer Hilfe komm ich am schnellsten zu meinem Ziel.
Wenn alles funktioniert, sollte hier drunter noch mein derzeitiger Code sein. Dieser ist aufgrund einiger Tests nicht gerade schön und übersichtlich, doch ich denke ihr könnt damit gut erkennen was für Sachen ich bereits ausprobiert habe.
LG Lukas
EDIT: Hat nicht so funktioniert wie erwartet. Kopiere den Code hier hinein, damit ihr ihn nicht downloaden müsst. Hoffe das ist Okay.
#include <Stepper.h>
//int inlPin = 13;
const int stepsU = 200;
//Taster Start-Stop
const int pin_start = 2;
const int interrupt_stop = 3;
//Variablen
volatile bool taster_start = LOW;
volatile bool taster_stop = LOW;
int i, k = 0;
Stepper myStepper(stepsU,9,10,11,12);
void setup()
{
//pinMode(inlPin, OUTPUT);
myStepper.setSpeed(100);
pinMode(pin_start, INPUT_PULLUP);
pinMode(interrupt_stop, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interrupt_stop), STOP, CHANGE);
}
void loop()
{
taster_start = !digitalRead(pin_start);
taster_stop = !digitalRead(interrupt_stop);
i = 0;
if (taster_start){
do{
myStepper.step(HIGH);
//if (taster_stop){
// return 0;
// }
i++;
} while (i < 1000);
i = 0;
}
/*if (interrupt_stop){
myStepper.step(-HIGH);
}*/
}
void STOP(){
myStepper.step(HIGH);
}
start_stop.ino (989 Bytes)