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);
}
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.
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 )
#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 )