Spielbandsäge (gelöst)

Hallo Gemeinde,

ich hatte mich mal weit aus dem Fenster gelehnt und eine automatische Bandsäge versprochen. Die Mechanik ist fertig und ich dachte, da ich noch ein UNO mit easydriver rumfliegen habe, alles kein Problem. Falsch. Hat jemand einen Ansatz für einen Sketch, bei dem sich der NEMA solange dreht, bis ein Microtaster das beendet?

Bin jetzt schon dankbar :slight_smile:

... versprochen

Dumm gelaufen :stuck_out_tongue_closed_eyes:

Ansatz für einen Sketch

Na klar, aber nur zum Selberdenken, besteht aus 2 Teilen:

  • Motor drehen lassen
  • Taster einlesen
  • Wenn Taster gedrückt > Motor anhalten

Ganz ehrlich, das kannste Dir aus den mitgelieferten Demos zusammensetzen, da ist kein großes Hirnschmalz nötig. Und wenn das Zusammenstückeln nicht funktioniert, dann zeig was Du hast und dann wird konkret geholfen.

in loop():
kontrolliere ob der Taster gedrückt ist
wenn ja gibst Du einen Schritt aus
wenn nein dann machst Du nichts.

Fürs Timing kannst Du sogar ohne Probleme delay() verwendsen weil der Sketch nichts anderes Macht.

Ob Motor, Easydriver und Netzteil zusammenpassen kann ich Dir nicht sagen.

Grüße Uwe

Danke erstmal.

das hab ich hochgeladen

void setup() {               
 pinMode(8, OUTPUT);
 pinMode(9, OUTPUT);
 digitalWrite(8, LOW);
 digitalWrite(9, LOW);
}

void loop() {
 digitalWrite(9, HIGH);
 delay(10);         
 digitalWrite(9, LOW);
 delay(10);         
}

gnd, pin 8 an dir, pin 9 an step, 12v an den easy dirver und usb an den uno, der nema17 ruckelt aber nur, kann man da soviel verkehrt machen?

Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
Das kannst Du auch noch nachträglich ändern.

Gruß Tommy

Soweit gut; und wo ist der Taster/Schalter?

Du befiehlst in deinem Code ja auch ein Ruckeln, oder was erwartest du von Ein- und wieder Ausschalten im 10 Millisekundentakt? :wink:

Mahimus:
Du befiehlst in deinem Code ja auch ein Ruckeln, oder was erwartest du von Ein- und wieder Ausschalten im 10 Millisekundentakt? :wink:

Was meinst Du damit?
Grüße Uwe

Hi

@Mahimus
Das ist nur der PULS für den Stepper-Treiber - bei jedem 0->1 Wechsel macht der Stepper einen Schritt (oder Mikroschritt), siehe A4988/DRV8825 (z.B. hier, Pololu)

MfG

Welche Bedeutung hat denn

pinMode(8, OUTPUT);

?
Im restlichen Sketch wird der nicht mehr angesprochen.

Hi

Das ist das Problem, bei 'magic numbers' - möchte fast drauf wetten, daß Das der DIR-Pin ist.
Damit wird also die Richtung des Steppers festgelegt.

byte const PinDir=8;
byte const PinStep=9;
...
pinMode(PinDir,OUTPUT);
pinMode(PinStep,OUTPUT);
...

MfG

PS: Eine Petition gegen magic numbers ...

Moin,

postmaster-ino:
Das ist das Problem, bei 'magic numbers' - möchte fast drauf wetten, daß Das der DIR-Pin ist.

Über Magic numbers konnte ich im C++ einmaleins nichts finden :wink:

Damit wird also die Richtung des Steppers festgelegt.

Ah okay, wusste ich noch nicht, hab mir mal in ner Kaufwut Stepper bestellt, aber noch nie getestet :smiley:
Also z.B. LOW = Uhrzeigersinn und HIGH = Gegenuhrzeigersinn?

Gruß
Jörg

PS: War das Forum down?

Hi

'magic numbers' werden Zahlen genannt, Die einfach so im Code stehen, ohne großartige weitere Informationen.
Die harmloseste Variante sind Pin-Nummern, Die bekommt man beim Studium des Sketch wohl noch raus.
Besser ist hier aber, sprechende Variable-Namen zu benutzen - eben PinDir.
Da sich diese Pins NIE ändern (also zumindest nicht zur Laufzeit), macht man Diese const - also konstant - ab jetzt darf man den Variable-Namen auch mit großem Anfangsbuchstaben schreiben - geht zwar vorher auch, ist aber nicht 'nach gutem Ton'.
Weiter kann man, wenn die Pin-Nummern oben 'am Stück' aufgelistet sind, Diese ohne große Probleme anpassen.

Irgend welche Wartezeiten, statt irgendwo im Code zwei Sekunden abzuwarten
if (millis()-lastrun>=2000){...
packt man diese 2000 oben zu den Pins - eben als
uint32_t wartezeit=2000; //Wartezeit für ...
und setzt einen Kommentar dahinter, was diese Wartezeit bezweckt.

oha ... sehe erst jetzt den Zwinker-Smilie ... dann lasse ich hier 'Mal Gut sein' :wink:

MfG

postmaster-ino:
Hi

'magic numbers' werden Zahlen genannt, Die einfach so im Code stehen, ohne großartige weitere Informationen.
Die harmloseste Variante sind Pin-Nummern, Die bekommt man beim Studium des Sketch wohl noch raus.
Besser ist hier aber, sprechende Variable-Namen zu benutzen - eben PinDir.
Da sich diese Pins NIE ändern (also zumindest nicht zur Laufzeit), macht man Diese const - also konstant - ab jetzt darf man den Variable-Namen auch mit großem Anfangsbuchstaben schreiben - geht zwar vorher auch, ist aber nicht 'nach gutem Ton'.
Weiter kann man, wenn die Pin-Nummern oben 'am Stück' aufgelistet sind, Diese ohne große Probleme anpassen.

Irgend welche Wartezeiten, statt irgendwo im Code zwei Sekunden abzuwarten
if (millis()-lastrun>=2000){...
packt man diese 2000 oben zu den Pins - eben als
uint32_t wartezeit=2000; //Wartezeit für ...
und setzt einen Kommentar dahinter, was diese Wartezeit bezweckt.

oha ... sehe erst jetzt den Zwinker-Smilie ... dann lasse ich hier 'Mal Gut sein' :wink:

MfG

Hehe^^ Ich bin mit C++ noch am Anfang, aber solche Dinge sind ja das A und O in jeder Programmiersprache :wink:

Testgelaende:
Danke erstmal.

das hab ich hochgeladen

void setup() {               

pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
}

void loop() {
digitalWrite(9, HIGH);
delay(10);       
digitalWrite(9, LOW);
delay(10);       
}




gnd, pin 8 an dir, pin 9 an step, 12v an den easy dirver und usb an den uno, der nema17 ruckelt aber nur, kann man da soviel verkehrt machen?

Setze die beiden delay(10) mal auf (100) dann wird sich der Motor zumindest drehen. Und dann spiele mal mit diesen Zeiten. Damit bestimmt du das Tempo des Motors. Je kleiner desto schneller. Zu klein, dann geht nicht mehr.

Dank an Alle,

hab das ganze jetzt etwas gerafft und einen anderen motor driver genommen. Es dreht jetzt.

Grüße

postmaster-ino:
Da sich diese Pins NIE ändern (also zumindest nicht zur Laufzeit), macht man Diese const - also konstant - ab jetzt darf man den Variable-Namen auch mit großem Anfangsbuchstaben schreiben - geht zwar vorher auch, ist aber nicht 'nach gutem Ton'.

Nö, das sehe ich anders.

Es gibt eine Konvention Objekt/Typ-Bezeichner mit großem Anfangsbuchstaben zu versehen,
nicht konstante Werte.

Für per #define definierte Konstanten werden zumeist Namen aus nur Großbuchstaben benutzt,
zum Erhöhen der Lesnbarkeit werden dann oft '_' als Trennung benutzt.

Für nur konstante Werte ist mir keine Notation über die Groß- oder Kleinschreibung bekannt.

Ich persönlich benutze zumeist Camel-Case für die Benennung.

Zusammengefasst also

class Test {
  byte dummy;
} testObjekt;

#define NUM_LEDS 23

const byte pinLED = 5;

Whandall:
Es gibt eine Konvention Objekt/Typ-Bezeichner mit großem Anfangsbuchstaben zu versehen,
nicht konstante Werte.

Diese „Konvention“ gibt es wohl nur hier. Anderswo ist mir das noch nicht begegnet.

Großbuchstaben kenne ich sonst nur bei Konstanten - die üblicherweise vollständig in Großbuchstaben geschrieben werden.

Gruß

Gregor

gregorss:
Diese „Konvention“ gibt es wohl nur hier. Anderswo ist mir das noch nicht begegnet.

Dann waren wir anscheinend an anderen Stellen unterwegs.

gregorss:
Großbuchstaben kenne ich sonst nur bei Konstanten - die üblicherweise vollständig in Großbuchstaben geschrieben werden.

Wie ich schon ausführte gilt das (für mich) ausschließlich für #define,
nicht für Konstanten allgemein.

Sind aber alles letztlich Stilfragen, Geschmacksache.
Zum Glück gibt es ja keinen C++ Pabst der so etwas für alle beschließen könnte.

Whandall:
Sind aber alles letztlich Stilfragen, Geschmacksache.
Zum Glück gibt es ja keinen C++ Pabst der so etwas für alle beschließen könnte.

Die unterschiedlichen Stile sind manchmal sehr unterschiedlich. Das kann einen Anfänger ganz schön verwirren. Je nach Tageszeit und Blutschokoladepegel kann ich mich auch nach rund 10 Jahren C++-Praxis durchaus wie ein Anfänger fühlen.

Heißa, es ist Freitag!

Gregor