Schrittmotor soll über Schubstange Taster betätigen

Moin,

Ich möchte wie im Post beschrieben, mit dem Schrittmotor aus dem Starterpack über eine Schubstange einen Taster betätigen.

Habe dazu den "Stepper" sketch benutzt. Funktioniert auch soweit.

Nun würde ich gerne einen Timer dazuschreiben, das gelingt mir aber nicht.
Das ziel wäre das der Motor nach Betätigung 15Minuten Pausiert, um dann wieder zu Betätigen. -.-

Hier der Code den ich nutze.

//www.elegoo.com
//2018.10.25


/*
 Stepper Motor Control - one revolution


 This program drives a unipolar or bipolar stepper motor.
 The motor is attached to digital pins 8 - 11 of the Arduino.


 The motor should revolve one revolution in one direction, then
 one revolution in the other direction.


*/


#include <Stepper.h>


const int stepsPerRevolution = 512;  // change this to fit the number of steps per revolution
const int rolePerMinute = 15;         // Adjustable range of 28BYJ-48 stepper is 0~17 rpm


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


void setup() {
 myStepper.setSpeed(rolePerMinute);
 // initialize the serial port:
 Serial.begin(9600);
}


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


 // step one revolution in the other direction:
 Serial.println("counterclockwise");
 myStepper.step(-stepsPerRevolution);
 delay(500);
}

Hoffe mir kann da wer helfen. Mfg

//www.elegoo.com
//2018.10.25

/*
  Stepper Motor Control - one revolution

  This program drives a unipolar or bipolar stepper motor.
  The motor is attached to digital pins 8 - 11 of the Arduino.

  The motor should revolve one revolution in one direction, then
  one revolution in the other direction.

*/

#include <Stepper.h>

const int stepsPerRevolution = 2048;  // change this to fit the number of steps per revolution
const int rolePerMinute = 15;         // Adjustable range of 28BYJ-48 stepper is 0~17 rpm

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

void setup() {
  myStepper.setSpeed(rolePerMinute);
  // initialize the serial port:
  Serial.begin(9600);
}

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

  // step one revolution in the other direction:
  Serial.println("counterclockwise");
  myStepper.step(-stepsPerRevolution);
  delay(500);
}

diddi76:
Hoffe mir kann da wer helfen.

Bestimmt.
Zuerst setze mal Deinen Code in codetags - also im editor oben das < / > Symbol. Dazu unten rechts auf modify und dann ist das schick.

Dann solltest Du das Beispiel "blink without delay" ansehen. Danach dann die Nachtwächtererklärung BlinkwithoutDelay - Die Nachtwächtererklärung - Deutsch - Arduino Forum und dann bekommst alles delay() aus Deinem code und gleichzeitig hast auch den Einstieg wie das mit dem warten blockadfrei funktioniert. Die Zeit ist dann (fast) egal.

Nun würde ich gerne einen Timer dazuschreiben, das gelingt mir aber nicht.

Nu, nachdem du keinen entsprechenden Code (genau genommen: gar keinen Code) geschrieben hast, wird das auch schwer gehen.

Weil ich gerade Lust hatte, hier ein Beispiel mit meinen MobaTools ( kannste über den Bibliotheksmanager installieren ) und einem kleinen 'endlichen Automaten' bzw. einer Schrittkette ( kann man nach googeln :wink: )

#include <MobaTools.h>

const int stepsPerRevolution = 4096;  // change this to fit the number of steps per revolution
const int rolePerMinute = 15;         // Adjustable range of 28BYJ-48 stepper is 0~17 rpm

const int wiederholrate = 10;      // in Sekunden

// initialize the stepper library on pins 8 through 11:
MoToStepper myStepper( 4096, HALFSTEP );
MoToTimer warteZeit;
enum aktiv : byte { STEHT, VORWAERTS, WARTEN, RUECKWAERTS };
aktiv stepperState = STEHT;   


void setup() {
  myStepper.attach( 8, 9, 10, 11 );
  myStepper.setSpeed(rolePerMinute * 10);
  myStepper.setRampLen( 100 );

  // initialize the serial port:
  Serial.begin(115200);
}


void loop() {
  switch ( stepperState ) {
    case STEHT:
      if ( !warteZeit.running() ) {
        // regelmäßige Wiederholzeit ist abgelaufen.
        myStepper.write( 90 );  // auf 90° drehen
        stepperState = VORWAERTS;
      }
      break;
    case VORWAERTS:
      if ( !myStepper.moving() ) {
        //Stepper vorne angekommen
        warteZeit.setTime( 500 );
        stepperState = WARTEN;
      }
      break;
    case WARTEN:
      if ( warteZeit.expired() ) {
        // Wartezeit abgelaufen, rückwärts drehen
        myStepper.write( 0 );  // wieder auf Stellung 0 drehen
        stepperState = RUECKWAERTS;
      }
      break;
    case RUECKWAERTS:
      // stepper dreht zurück, warten bis am Ausgangspunkt angekommen
      if ( !myStepper.moving() ) {
        //Stepper am Ausgangspunkt angekommen
        warteZeit.setTime( wiederholrate*1000 );
        stepperState = STEHT;
      }
      break;
  }
  // Hier kannst Du noch andere Aktivitäten einfügen
}

Der gesamte Programmablauf ist blockadefrei, auch während der Stepper dreht ( die Stepper.h blockiert während der Stepperbewegung )

Sorry das ich den Code falsch gesetzt habe, kenne mich hier im Forum nicht so aus.

Hoffe nun ist das besser.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.