// Drehscheibe TimeWaster, Frank Becker 2017
// Version 1.4 while-Abfrage der Step-Tasten hinzugefügt
// UNO R3 Com6, Motor Shield v2.0
// For use with the Adafruit Motor Shield v2
// ----> http://www.adafruit.com/products/1438
#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_MS_PWMServoDriver.h"
#include <MobaTools.h>
// Create the motor shield object with the default I2C address
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
// Or, create it with a different I2C address (say for stacking)
// Adafruit_MotorShield AFMS = Adafruit_MotorShield(0x61);
// Connect a stepper motor with 200 steps per revolution (1.8 degree)
// to motor port #1 (M1 and M2)
Adafruit_StepperMotor *myMotor = AFMS.getStepper(200, 1);
const byte buttonFullTurnClockwise = 8 ; //Taster 180Grad Uhrzeigersinn
const byte buttonFullTurnCounterClockwise = 9 ; //Taster 180Grad gegen Uhrzeigersinn
const byte buttonStepClockwise = 10 ; //Taster Step Uhrzeigersinn
const byte buttonStepCounterClockwise = 11 ; //Taster Step gegen Uhrzeigersinn
const byte buttonRelease = 12 ; //Taster um Motor stromlos zu schaltem
byte buttonStatusFullTurnClockwise = 0 ;
byte buttonStatusFullTurnCounterClockwise = 0 ;
byte buttonStatusStepClockwise = 0 ;
byte buttonStatusStepCounterClockwise = 0 ;
byte buttonStatusRelease = 0 ;
EggTimer myTimer2sec ; //Timer für 2 Sekunden
byte i; //Zählvariable
void setup() {
Serial.begin(9600); // set up Serial library at 9600 bps
Serial.println("Stepper test!");
pinMode(buttonFullTurnClockwise, INPUT);
pinMode(buttonFullTurnCounterClockwise, INPUT);
pinMode(buttonStepClockwise, INPUT);
pinMode(buttonStepCounterClockwise, INPUT);
pinMode(buttonRelease, INPUT);
AFMS.begin(1600); // create with the default frequency 1.6KHz
//AFMS.begin(1000); // OR with a different frequency, say 1KHz
myMotor->setSpeed(10); // original 10 rpm
}
void loop() {
// Stati der Taster einlesen
buttonStatusFullTurnClockwise = digitalRead(buttonFullTurnClockwise);
buttonStatusFullTurnCounterClockwise = digitalRead(buttonFullTurnCounterClockwise);
buttonStatusStepClockwise = digitalRead(buttonStepClockwise);
buttonStatusStepCounterClockwise = digitalRead(buttonStepCounterClockwise);
buttonStatusRelease = digitalRead(buttonRelease);
if (buttonStatusFullTurnClockwise == LOW) // Wenn Taster gedrückt...
{
FullTurnClockwise(); // ... Funktion ausführen
}
if (buttonStatusFullTurnCounterClockwise == LOW) // Wenn Taster gedrückt...
{
FullTurnCounterClockwise(); // ... Funktion ausführen
}
if (buttonStatusStepClockwise == LOW) // Wenn Taster gedrückt...
{
StepClockwise(); // 1 Step machen
myTimer2sec.setTime(2000) ; // Timer auf 2 Sek setzen
while (digitalRead(buttonStepClockwise)==LOW) // solange Taste gedrückt ist
{
if (myTimer2sec.running()==false) // Wenn die 2 Sekunden abgelaufen sind und immernoch die Taste gedrückt ist...
{
StepClockwise(); // so lange drehen, bis Taste losgelassen wird.
}
}
}
if (buttonStatusStepCounterClockwise == LOW) // Wenn Taster gedrückt...
{
StepCounterClockwise(); // 1 Step machen
myTimer2sec.setTime(2000) ; // Timer auf 2 Sek setzen
while (digitalRead(buttonStepCounterClockwise)==LOW) // solange Taste gedrückt ist
{
if (myTimer2sec.running()==false) // Wenn die 2 Sekunden abgelaufen sind und immernoch die Taste gedrückt ist...
{
StepCounterClockwise(); // so lange drehen, bis Taste losgelassen wird.
}
}
}
if (buttonStatusRelease == LOW) // Wenn Taster gedrückt...
{
myMotor->release(); // ... Schrittmotor stromlos schalten
}
}
void FullTurnClockwise() { // Definition als Funktion
Serial.println("180 Grad Drehung (733 steps)im Uhrzeigersinn");
myMotor->setSpeed(1); // original 10 rpm
myMotor->step(10, FORWARD, MICROSTEP);
myMotor->setSpeed(10); // original 10 rpm
myMotor->step(10, FORWARD, MICROSTEP);
myMotor->setSpeed(30); // original 10 rpm
myMotor->step(10, FORWARD, MICROSTEP);
myMotor->setSpeed(40); // original 10 rpm
myMotor->step(10, FORWARD, MICROSTEP);
myMotor->setSpeed(255); // original 10 rpm
myMotor->step(653, FORWARD, MICROSTEP);
myMotor->setSpeed(40); // original 10 rpm
myMotor->step(10, FORWARD, MICROSTEP);
myMotor->setSpeed(30); // original 10 rpm
myMotor->step(10, FORWARD, MICROSTEP);
myMotor->setSpeed(10); // original 10 rpm
myMotor->step(10, FORWARD, MICROSTEP);
myMotor->setSpeed(1); // original 10 rpm
myMotor->step(15, FORWARD, MICROSTEP);
myMotor->step(8, BACKWARD, MICROSTEP);
myMotor->step(3, FORWARD, MICROSTEP);
}
void FullTurnCounterClockwise() { // Definition als Funktion
Serial.println("180 Grad Drehung gegen Uhrzeigersinn");
myMotor->setSpeed(255); // original 10 rpm
myMotor->step(733, BACKWARD, MICROSTEP);
}
void StepClockwise() { // Definition als Funktion
Serial.println("1 Step im Uhrzeigersinn");
myMotor->setSpeed(1); // original 10 rpm
myMotor->step(1, FORWARD, MICROSTEP);
delay(100);
}
void StepCounterClockwise() { // Definition als Funktion
Serial.println("1 Step im Uhrzeigersinn");
myMotor->setSpeed(1); // original 10 rpm
myMotor->step(1, BACKWARD, MICROSTEP);
delay(100);
}