Borsti089
06.10.2017, 20:30
Hallo, ich beschäftige mich gerade das erste Mal mit Arduino und Stepper.
Mein Vorhaben:
Der Stepper soll zu Beginn so lange fahren bis ein Taster gedrückt wird, quasi als Endschalter.
Um danach eigenständig eine Schleife mit vorgegebenen Schritten fahren.
Mein Problem:
ICH!!
Ich raff es einfach nicht.
Ich hab den Sketch bereits mehrfach aufgesetzt, komme aber nie auf das gewünschte Ergebnis.
Langsam aber sicher treibt mich das Ding noch zur Verzweiflung...
Hier einer der Sketche:
https://pastebin.com/embed_js/yzA9bSbi
Um Frustration zu vermeiden und stückweise voranzukommen, kannst du dich an folgende Regeln halten:
1. In setup() sollten nur Initialisierungen stehen. Das ist kein muss, aber allgemeine Konvention.
2. Nutze Funktionen, um kleine Teilabschnitte der Logik abzubilden. Die kann man dann sinnvoll benennen und einzeln testen.
3. In loop() kannst du dann diese Funktion aufrufen und hast dort einen übersichtlichen Code, den man sofort versteht.
Im folgenden habe ich zu Demonstation deinen Code geändert, und die o.g. Punkte umgesetzt. Wie die Servo-Bibliothek funzt, habe ich mir nicht angeschaut, sondern einfach aus deinem Code kopiert.
#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_MS_PWMServoDriver.h"
auto shield = Adafruit_MotorShield();
auto motor = shield.getStepper(200, 1);
enum { ENDSCHALTER = 5 };
bool gedrueckt(int pin) {
return !digitalRead(pin);
}
void warteBisGedrueckt(int pin) {
while(!gedrueckt(pin));
}
void fahreGeradeaus() {
Serial.println("Start geradeaus!");
motor->setSpeed(20); // 3 rpm
motor->step(10, FORWARD, DOUBLE);
}
void fahreManoever() {
Serial.println("Start Manoever!");
motor->step(80, FORWARD, DOUBLE);
Serial.println("1");
delay(2000);
motor->step(40, BACKWARD, DOUBLE);
Serial.println("2");
delay(2000);
motor->step(60, FORWARD, DOUBLE);
Serial.println("3");
delay(2000);
motor->step(60, FORWARD, DOUBLE);
Serial.println("4");
delay(2000);
motor->step(40, FORWARD, DOUBLE);
Serial.println("5");
delay(5000);
}
void macheNixMehr() {
Serial.println("Ende! Reset druecken!");
while(true);
}
void setup() {
pinMode(ENDSCHALTER, INPUT);
shield.begin();
Serial.begin(9600);
Serial.println("Setup fertig!");
}
void loop() {
if (!gedrueckt(ENDSCHALTER)) {
fahreGeradeaus();
}
warteBisGedrueckt(ENDSCHALTER);
fahreManoever();
macheNixMehr();
}
LG
Sisor
Borsti089
07.10.2017, 11:05
Ich sag mal vielen lieben Dank.
So ganz ist es noch nicht das wie ich es mir vorstelle.
Aber ich denke mal das werd ich dann mit ausprobieren hinbekommen.
Und evtl kapier ich dann auch mal die Befehle...
Danke nochmal!
Mein Tipp. Lies die Dokumentation zur Servo Library ?
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.