Hallo Zusammen,
dieser Beitrag hat sich erledigt und ist somit geschlossen. Wie kann man ihn nun löschen?
Hallo Zusammen,
dieser Beitrag hat sich erledigt und ist somit geschlossen. Wie kann man ihn nun löschen?
Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.
mfg ein Moderator.
Ich möchte Dich zu der Bibliothek MobaTools überreden, weil diese Dinge für Dich im Hintergrund erledigt. Das Beispiel Stepper_Slider, mit meiner Mitwirkung erstellt, kann Dir einen ersten Eindruck vermitteln. Die Umstellung auf einen Treiber mit STEP und DIR ist kein Problem. Der Autor der Bibliothek ist in diesem Forum aktiv.
Die Bibliothek kennt absolute und relative Bewegungen, merkt sich daher auch Positionen und verwendet eine Rampe zum sanften Bewegen.
Wie ist Deine Meinung?
Mein Versuch.
Was der Code machen soll:
Er fragt die Zahl ab.
Danach wird sofort unterschieden, ob negativ oder Positiv und der Richtungsstatus gesetzt.
Ist die Zahl negativ, wird sie anschliessend zur positiven gewandelt.
Im fahren: Geht nur wenn nicht 0 ist...
Richtung festlegen und einschalten
Danach gehts so weiter wie bei Dir, bis zum schreiben des Taktes.
Im Anschluss zähle ich positionEingegeben runter.
Das Ganze bis 0.
Dan könnte ena abgeschaltet werden... (ist auskommentiert)
Erst dann geht auch eine NeuEingabe.
ungetestet nur nach Logik geschrieben.
volatile bool flag = false;
volatile bool my_flag = false;
int zahl;
int schritte;
const int takt = 3;
#define dir 4 //Legt die Richtung fest
#define ena 6 //Aktiviert den Motor
#define taster 2 //Endschalter
int taktstatus = LOW;
int dirstatus = LOW;
unsigned long int wert = 0; //Speichert die Schritte
/**
Position eingeben in mm
*/
int pos = 100;
/**
*/
int steps = pos * 24.2424; //24.13273 = Schritte für einen mm (laut Datenblatt 66mm/U d.h. faktor von 24.2424)
unsigned long previousMicros = 0;
const unsigned long interval1 = 590; //Geschwindigkeit einstellen in mikrosekunden
double faktor = 0.04125; //Faktor wieviel mm sich der Motor pro Schritt dreht
int i;
int x;
int wegStrecke;
int positionEingegeben;
void setup()
{
pinMode(takt, OUTPUT);
pinMode(dir, OUTPUT);
pinMode(ena, OUTPUT);
pinMode(taster, INPUT_PULLUP);
digitalWrite(ena, HIGH);
digitalWrite(dir, dirstatus);
digitalWrite(taster, HIGH);
//attachInterrupt(digitalPinToInterrupt(taster), kalibrierungsfahrt, LOW);
Serial.begin(9600);
Serial.setTimeout(100);
}
void loop()
{
if ((Serial.available() > 0) && (positionEingegeben == 0))
{
x = Serial.parseInt();
positionEingegeben = x * 24.2424;
Serial.println(positionEingegeben);
if (positionEingegeben < 0)
{
dirstatus = HIGH;// Richtung bei negativer Zahl
positionEingegeben *= -1; // macht ne positive Zahl draus
}
else
{
dirstatus = LOW; // Richtung bei Positiver Zahl
}
}
fahren();
}
void fahren()
{
if (positionEingegeben != 0)
{
digitalWrite(dir, dirstatus);
digitalWrite(ena, HIGH);
unsigned long currentMicros = micros();
if (currentMicros - previousMicros >= interval1)
{
previousMicros = currentMicros;
if (taktstatus == LOW)
{
taktstatus = HIGH;
}
else
{
taktstatus = LOW;
}
digitalWrite(takt, taktstatus);
positionEingegeben--;
}
}
else
{
// digitalWrite(ena, LOW);
}
}
Der orginal-Post ist:
@ brja256
Du bist sehr egoistisch.
Nach Dir die Sintfflut.
Glaubst Du wirklich daß wir nur für Dich antworten und Dein Problem und unsere Antworten nur für Dich sind?
Ein Forum soll allen helfen weil sie das gleiche Problem haben und die Hilfe schnell finden. oder um durch lesen der Beiträge neues zu lernen.
Nein. Ich lösche Diesen Beitrag nicht.
Grüße Uwe
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.