#include "AccelStepper.h"
#include "Keypad.h"
/*-----( Declare objects )-----*/
// Setup of proper sequencing for Motor Driver Pins
// In1, In2, In3, In4 in the sequence 1-3-2-4
AccelStepper stepper(8, 8, 10, 9, 11, false); //erzeugt eine Instanz der Stepper Klasse, was in der Klammer stehen muss sieht man am besten in der Doku zur Bibliothek.
//"false" setzt den Treiber auf ausgeschaltet, so könnte er keinen Strom brauchen bzw. heiß werden, falls das nicht geht, das false löschen und Zeile 21 Kommentar wegmachen.
//die erste 8 setzt die Instanz in den Halbschrittmodus. Zwecks anderer Modi siehe Dokumentation der Bibliothek. Dann kommen die 4 Anschlusspins, und dann noch das Disable Bit.
//Deklarationen Keypad
const byte numRows= 4; //number of rows on the keypad
const byte numCols= 4; //number of columns on the keypad
//keymap defines the key pressed according to the row and columns just as appears on the keypad
char keymap[numRows][numCols]=
{
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
//Hier die richtigen Pins eintragen!!! Anschlussgrafik gibt es z.B. hier http://www.learningaboutelectronics.com/Articles/Arduino-keypad-circuit.php
byte rowPins[numRows] = {9,8,7,6};
byte colPins[numCols]= {5,4,3,2};
//initializes an instance of the Keypad class
Keypad myKeypad= Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);
void setup()
{
//stepper.disableOutputs();
/*Test um zu sehen, ob sich der Treiber damit ausschalten lässt. Beim erzeugen der Instanz oben in Zeile 10 wird er standardmäßig auf enable gesetzt.
Daher hier wieder auf disable, und er soll nur An sein wenn er sich tatsächlich bewegen soll... Kommentar entfernen falls das oben mit dem false nicht funktioniert
Der Versuch ist hier bei den enable und disable Befehlen den Treiber in einen Low Power Modus zu versetzen, keine Ahnung ob das geht...*/
stepper.setMaxSpeed(1000); //In den Beispielen stand die Max Speed Begrenzung immer im Loop, da man das aber nur einmal setzen muss hab ichs hierhin gepackt. Über Tests muss hier noch die richtige Zahl raus gefunden werden.
}
void loop()
{
char keypressed = myKeypad.getKey(); //Tastedruck am Keypad erfassen
if (keypressed == 'A') { //Falls der Tastendruck A war dann Tür öffnen usw... Welche Zeichen da tatsächlich empfangen werden müsste über den Seriellen Monitor rausgefunden werden.
// und ob die Zeichen um das A stimmen bin ich mir grad nicht sicher, könnte auch sein, dass da "" hin muss....
motorLaufen(500, 200);
}
}/* --end main loop -- */
void motorLaufen(int mSpeed, int mDauer){
stepper.enableOutputs();
delay(20); ////delay um dem Treiber Zeit zu geben um einzuschalten, teste mal ob man das weglassen kann.
stepper.setSpeed(mSpeed);
stepper.runSpeed();
delay(mDauer); //ich weiß, ich hab geschrieben, dass delays böse sind... aber um den Code zu testen gehts so viel einfacher und schneller, wenns geht kann man das sauber ohne delay machen
stepper.stop();
stepper.disableOutputs();
delay(20); //delay um dem Treiber Zeit zu geben um auszuschalten, teste mal ob man das weglassen kann.
}