Schrittmotor programm

hi leute, ich steuer meinen schrittmotor über 3 taster an. alle über einen pin auf masse verbunden.

#include <Stepper.h>

  int StepPin=7;
  int DirPin=6;
  int up_button=2;
  int down_button=3;
  int start_button=4;
  
void setup() {
  // put your setup code here, to run once:

  pinMode(StepPin,OUTPUT);
  pinMode(DirPin,OUTPUT);
  digitalWrite(DirPin,HIGH);
  digitalWrite(StepPin,LOW);
  pinMode(up_button, INPUT_PULLUP);
  pinMode(down_button, INPUT_PULLUP);
  pinMode(start_button, INPUT_PULLUP);
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:

if(digitalRead(up_button==LOW)) //auwickeln
{
    digitalWrite(DirPin, HIGH);
    digitalWrite(StepPin, HIGH);
    delay(10); //bsp mit microdelay
    digitalWrite(StepPin, LOW);
    delay(10);  
    Serial.println("13 HIGH");
}

if(digitalRead(down_button==LOW))//abwickeln
{

    digitalWrite(DirPin, LOW);
    digitalWrite(StepPin, HIGH);
    delay(10); //bsp mit microdelay
    digitalWrite(StepPin, LOW);
    delay(10);
    Serial.println("2 LOW");

}

if (digitalRead(start_button==LOW))
{
for(int i = 0; i < 10; i++)
  {
    // Trigger the motor to take one step.
    digitalWrite(StepPin, HIGH);
    delay(10); //bsp mit microdelay
    digitalWrite(StepPin, LOW);
    delay(10);
    Serial.println("3_DIR_HIGH");
    Serial.println(i);
  }
  delay(2000);
  for(int i=0; i >0 ; i--)
  {
    // Trigger the motor to take one step.
    digitalWrite(DirPin,LOW);
    digitalWrite(StepPin, HIGH);
    delay(10); //bsp mit microdelay
    digitalWrite(StepPin, LOW);
    delay(10);
    Serial.println("4_DIR_LOW");
}
}
}

aber er läuft nur in der schleife wo der starttaster aneblich gedrückt ist. Obwohl ich gar keinen betätigt habe. ich bin ein bisschen am verzweifeln. Wo ist mein fehler??

mfg steff

Die Klammersetzung ist falsch

Statt:

if (digitalRead(start_button==LOW))

So:

if (digitalRead(start_button) ==LOW)

Du willst nicht die Pin-Nummer mit LOW vergleichen, sondern den Rückgabewert der Funktion

Das ist bei den anderen Abfragen auch falsch!

WOOW TOPPP! danke daruf wäre ich nicht gekommen...falsche klammern omg.

jetzt rennt er ...nur ein is komisch ...ich mach ja bei allesn 4 sachen (manuell runter, manuell rauf, automatisch runter und automatisch rauf) ein delay von 1ms...d.h. ja 1ms high und 1ms low...so jetz macht er aber NUR bei automatisch runter was komisches: bei fast jedem durchlauf rattert er kurz an der selben stelle..und kommt dann an eine falsche endposition (alles ohne last). das sind doch schrittfehler oder?? was kann man da machen...am delay rumschrauben bis das passt? mein motor hat max 63rpm
danke schon mal

mfg steff

Am Anfang sehe ich #include <Stepper.h>, danach scheint diese Bibliothek nicht mehr genutzt zu werden. Da gäbe es die Geschwindigkeitseinstellung myStepper.setSpeed();.

Bei mir hat mal Serial.println() den Motorrhythmus gestört, besonders im Zusammenhang mit blockierendem Code (for-Schleifen). Soweit ich es verstanden habe, wird der Ausgabepuffer nur zwischen loop-Ende und loop-Anfang verschickt und damit geleert.

Hallo, TOP das mit serial.printlin() weggeben hat hingehaut. Jetz hab ich aber ein anderes problem: ich hab das ganze dann zur probe mit der stepper.h angesteuert.

#include <Stepper.h>

const int stepsPerRevolution = 200;  // change this to fit the number of steps per revolution
// for your motor

// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8, 9);

void setup() {
  // set the speed at 60 rpm:
  myStepper.setSpeed(60);
  // initialize the serial port:
  Serial.begin(9600);
}

void loop() {
  // step one revolution  in one direction:
  myStepper.step(stepsPerRevolution);
  delay(500);

  // step one revolution in the other direction:

  myStepper.step(-stepsPerRevolution);
  delay(500);
}

mein stepper hat 1,8° also 200 steps pro umdrehung. Meiner hat aber noch ein 1:51Getriebe vorne drauf. Aber das hauptproblem ist, dass er bei 200 steps (der motor, nicht das getriebe) nur eine viertel umdrehung macht. Was ist denn hier los?4
mfg steff

Hast du ggf. bei deinem Motortreiber den Microstep-Modus auf 1/4 stehen?
Dann braucht der Motor 4 x 200 (Micro-)Steps, um sich genau einmal zu drehen.
Also: entweder Microsteps auf 1/1 (=Full Steps) oder:
const int stepsPerRevolution = 800; // ...

mfg
Raimund

hallo raimund,

ich habe bei meinem pololu8825 die eingänge M1, M2 und M3 nicht beschalten, sie sind also alle drei auf LOW und laut datenblatt damit auf full step.

wenn ich meinen motor mit der for-schleife "manuell" steppen lasste macht er brav eine umdrehung mit 200step.

Was kann hier los sein??

mfg steff