Hallo alle zusammen,
könntet ihr mir bitte kurz bei einem Problem mit der Schrittkette weiterhelfen ?
Meine Schrittkette hat sozusagen 2 Fälle:
Fall 1 :
Durchlauf von Case0 bis Case5 aber ohne case1 (den case 1 brauche ich dann später für den 2-ten Fall) .
Fall 2:
Wenn das Program so oft abgelaufen ist, sodas schlußendlich der Taster 2 gedrückt wird (das ist dann case 6) sollte bei case 1 gestartet werden.
Mein Problem ist, das ich aber mit dem Code gar nicht über den case 0 hinauskomme.
wie müsste der Code aussehen, damit die Schrittkette funktioniert ? => das ist mein erster Versuch eine Schrittkette zu programmieren.
#define MAX8BUTTONS
#include <MobaTools.h>
const int sensorpin = 22; // Kapazitiver Näherungssensor
MoToTimer Schleifverweilzeit;
MoToStepper S1(1600, STEPDIR); // bipolarer Schrittmotor Längsschlitten => Verfahrweg: 0m bis 3m, stoppt ca. alle 10cm bei Klinge durch Kap. Sensor
MoToStepper S3(2000, STEPDIR); // bipolarer Schrittmotor Vertikalschlitten
enum { Taster1, Taster2, Taster3, Taster4, Startknopf, Notaus} ; // 4x Endschalter
const byte tasterPins[] = { 44, 45, 46, 47, 7, 6 };
MoToButtons taster( tasterPins, sizeof(tasterPins), 20, 500 );
String Z_Start;
String Z_Schleifrichtung;
void setup()
{
Serial.begin (115200);
pinMode(sensorpin, INPUT);
S1.attach( 53, 51 ); // STEPpin, DIRpin
S1.setSpeed( 300 ); // = 80 U/Min (motorspezifisch)
S1.setRampLen( 10 ); // Beschleunigung (motorspezifisch)
S3.attach( 52, 50 ); // STEPpin, DIRpin
S3.setSpeed( 300 ); // = 80 U/Min (motorspezifisch)
S3.setRampLen( 50 ); // Beschleunigung (motorspezifisch)
Z_Start = "aus"; // Zustandsvarable für Start des Schleifvorganges
Z_Schleifrichtung = "rechts";
}
void loop()
{
taster.processButtons(); // Taster einlesen und bearbeiten
int sensorstate = digitalRead(sensorpin);
static byte status; // Schrittkettenstatus
if (taster.pressed(Startknopf)) Z_Start = "ein"; // Um zu Starten muss linker Knopt gedrückt werden
switch (status) {
case 0:
if ( sensorstate == 1 && Z_Start == "ein" && Z_Schleifrichtung == "rechts") { // S1 fährt zu nächswter Klinge
S1.rotate(1);
S3.rotate(0);
status++;
}
break;
case 1:
if ( sensorstate == 1 && Z_Start == "ein" && Z_Schleifrichtung == "links") { // S1 fährt zu nächswter Klinge
S1.rotate(-1);
S3.rotate(0);
status++;
}
break;
case 2:
if ( sensorstate == 0 ){ // S1 stoppt bei Klinge, S3 beginnt nach unten zu drehen
S1.rotate(0);
S3.rotate(1);
status++;
}
break;
case 3:
if (taster.pressed(Taster3)) {
S1.rotate(0);
S3.rotate(0);
Schleifverweilzeit.setTime(1500);
status++;
}
break;
case 4:
if ( !Schleifverweilzeit.running() ) {
S1.rotate(0);
S3.rotate(-1);
status++;
}
break;
case 5:
if (taster.pressed(Taster4)) {
S1.rotate(0);
S3.rotate(0);
status++;
}
break;
case 6:
if (taster.pressed(Taster2)) {
Z_Schleifrichtung = "links";
status = 1;
}
break;
default:
status = 0;
}
}
LG
Christian