Hallo Zusammen,
Mein Code hat die Funktion so dass die Schritte vom Motor mit einem Tastatur eingegeben werden, alles funktioniert super ;
aber (
das Problem bei der Initialisierung (Reset ) oder bei aus und einstecken von der Spannung der Motor zittert und macht paar schritte und ab der Position wird die Initiale Position gerechnet ... also bei paar Initialisierungen wird die Null Position komplet verstellt !!! );
Bitte wie kann ich bei der Initialisierung (Reset )oder beim Wiederstellen unter Spannung immer zur bestimmten ( Null ) Position hinfahren lassen ???
Vielen Dank
#include "AccelStepper.h" // AccelStepper Library
#include <Keypad.h> // Keypad Library
#include <LiquidCrystal.h> // includes the LiquidCrystal Library
LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // Creates an LC object. Parameters: (rs, enable, d4, d5, d6, d7)
// defines pins numbers
// Variablen, die die eingegebene Nummer auf der Tastatur halten sollen
volatile int Zahl1=99; // wird verwendet, um zu ermitteln, wie viele Nummern auf der Tastatur eingegeben wurden
volatile int Zahl2=99;
volatile int Zahl3=99;
// Variablen zum Halten von Entfernung und Aktl Position
int Gesamtzahl=0; // wird verwendet, um den endgültigen berechneten Abstandswert zu speichern
String Aktuelleposition = ""; //
// Keypad Setup
const byte ROWS = 4; // Vier Reihen
const byte COLS = 3; // Vier Spalten
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[ROWS] = {22, 24, 26, 28}; //Arduino-Pins, die mit den Reihenpins der Tastatur verbunden sind
byte colPins[COLS] = {31, 33, 35}; // Arduino-Pins, die mit den Säulenpins der Tastatur verbunden sind
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); // Definition der Tastaturbibliothek
// AccelStepper Setup
AccelStepper stepper(1, 3, 10); // 1 = Easy Driver interface
// Arduino A0 verbunden mit STEP pin von Easy Driver
// Arduino A1 verbunden mit DIR pin von Easy Driver
void setup(void) {
lcd.begin(16,2);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Gib Wert:");
// AccelStepper speed and acceleration setup
lcd.setCursor(14,0);
lcd.print("MM");
lcd.setCursor(0,1);
lcd.print("Min:0mm Max:5mm");
stepper.setMaxSpeed(400); // Nicht zu schnell, oder werden Schritte verpasst
stepper.setAcceleration(50); // das gleiche
}
void loop(){
char keypressed = keypad.getKey(); // Ruft den Wert der Tastaturtaste ab, wenn gedrückt
if (keypressed != NO_KEY){ // Wenn die Tastentaste gedrückt wird, prüfen Sie, welche Taste es war
switch (keypressed) {
case '1':
checknumber(1);
break;
case '2':
checknumber(2);
break;
case '3':
checknumber(3);
break;
case '4':
checknumber(4);
break;
case '5':
checknumber(5);
break;
case '6':
checknumber(6);
break;
case '7':
checknumber(7);
break;
case '8':
checknumber(8);
break;
case '9':
checknumber(9);
break;
case '0':
checknumber(0);
break;
case '*':
deletenumber();
break;
case '#':
Entfernung();
break;
}
}
}
void checknumber(int x){
if (Zahl1 == 99) { // wird geprüft, ob dies die erste eingegebene Zahl wurde
Zahl1=x;
String displayvalue = String(Zahl1); // Verwandle int in einen String für display
lcd.setCursor(0,0);
lcd.print("Gib Wert:");
lcd.setCursor(9,0);
lcd.print(displayvalue);
lcd.setCursor(14,0);
lcd.print("MM");
} else {
if (Zahl2 == 99) { // wird geprüft, ob es sich um die zweite eingegebene Zahl handelt
Zahl2=x;
String displayvalue = String(Zahl2);
lcd.setCursor(0,0);
lcd.print("Gib Wert:");
lcd.setCursor(10,0);
lcd.print(displayvalue);
lcd.setCursor(14,0);
lcd.print("MM");
} else { // Es muss die dritte eingegebene Zahl sein
Zahl3=x;
String displayvalue = String(Zahl3);
lcd.setCursor(0,0);
lcd.print("Gib Wert:");
lcd.setCursor(11,0);
lcd.print(displayvalue);
lcd.setCursor(14,0);
lcd.print("MM");
}
}
}
void deletenumber() { // Wird verwendet, um eingegebene Zahlen zurückzusetzen
if (Zahl1 != 99 || Zahl2 != 99 || Zahl3 !=99) {
lcd.clear( );
lcd.setCursor(0,0);
lcd.print("Gib Wert:");
lcd.setCursor(14,0);
lcd.print("MM");
lcd.setCursor(0,1);
lcd.print("Min:0mm Max:5mm");
resetnumbers();
checknumber;
}
}
void Entfernung() { // Dient zum Erstellen einer vollständigen Nummer aus den eingegebenen Nummern
if (Zahl3 == 99 && Zahl2 == 99 && Zahl1 != 99) {
Gesamtzahl=Zahl1;
movestepper(Gesamtzahl);
}
if (Zahl2 != 99 && Zahl3 == 99) {
Gesamtzahl=Zahl1*10 + Zahl2;
movestepper(Gesamtzahl);
}
if (Zahl3 != 99) {
Gesamtzahl=Zahl1*100 + Zahl2*10 +Zahl3;
movestepper(Gesamtzahl);
}
resetnumbers(); // Zahlen zurücksetzen, um sich für einen neuen Eintrag vorzubereiten
}
void movestepper(int z) { // stepper wird bewegt
if ( z <= 5) {
int calculatedmove=(z*10); // Anzahl der Schritte in mm berechnen
stepper.runToNewPosition(calculatedmove);
Aktuelleposition = String(z);
lcd.clear();
lcd.setCursor(0,1);
lcd.print("Oeffnung: ");
lcd.setCursor(9,1);
lcd.print(Aktuelleposition);
lcd.setCursor(14,1);
lcd.print("MM"); }
else {
lcd.clear();
lcd.setCursor(0,1);
lcd.print("Falscher Wert");
}
}
void resetnumbers() { // Zahlen für den nächsten Eintrag zurücksetzen
Zahl1=99;
Zahl2=99;
Zahl3=99;
}