Seite 3 von 7

Re: Hilfe zu Arduino(UNO)Sketch gesucht für FB

Verfasst: Fr 19. Jul 2019, 14:28
von MicroBahner
Hallo Rainer,
na super, dass das so funktioniert.
ts250x hat geschrieben: Fr 19. Jul 2019, 13:38 Jetzt frage ich mich ob es dem Arduino leichter fällt mit HEX oder mit Dezimalzahlen zu arbeiten??
Der Arduino kennt weder HEX noch Dezimalzahlen. Der arbeitet immer mit Binärzahlen. Hex oder Dezimal ist nur eine Schreibweise, die beim Ausgeben erzeugt wird, damit DU das besser lesen kannst.
Ebenso bei der Eingabe: Ob Du im Programm einen Wert in HEX oder dezimal schreibst ist egal. Da gehts nur da drum, was für dich gerade günstiger ist. Der Compiler macht für den Arduino immer eine Binärzahl da draus.

Re: Hilfe zu Arduino(UNO)Sketch gesucht für FB

Verfasst: Fr 19. Jul 2019, 16:32
von ts250x
Hallo Franz-Peter,
Danke fürs erklären..... bleibt also alles bei Nullen und Einsen.

Ich wünschen Allen ein schönes Wochenende :clap:

Re: Hilfe zu Arduino(UNO)Sketch gesucht für FB

Verfasst: Fr 19. Jul 2019, 17:44
von moppe
Ein Vorschlag

If results.value = 16724175 Ausgang 1 schalten
If results.value = 16718022 Ausgang 2 schalten (usw)


Klaus

Re: Hilfe zu Arduino(UNO)Sketch Konzept kann man das so umsetzen ?

Verfasst: Sa 20. Jul 2019, 22:28
von ts250x
Hallo Klaus, Hallo @ All, HALLO Ihr Arduino Spezialisten :mrgreen:
Klaus, du kennst dich auch mit Arduino aus.... Chapeau..

Heute habe ich mal im Netz recherchiert und muss sagen es gibt leider kein fertigen Sketch den ich kopieren könnte.
Also habe ich mal versucht ein Konzept zu entwickeln wie der Sketch ablaufen soll,
Hier meine Gedanken:

Code: Alles auswählen

Einfügen: Liberias
IR remote h     //#include <IRremote.h>
int RECEIVE_PIN = 12; // Pin OUT mit Arduino Pin 3 verbinden;
IRrecv irreceiver (RECEIVE_PIN);
decode_results Ergebnisse;
Stepper ???
void setup () {
  Serial.begin (9600);
  irreceiver.enableIRIn (); // Den Empfänger starten
}

void loop () {
  if (irreceiver.decode (& results)) {
    Serial.println (results.value, DEC);
Festlegung  der PIN Funktionen:
Input Pin für IR Remote                                 // z.B. PIN 12, Signal vom  IR Receiver
Input Pin für Taste 1  = Motor 1 Tor auf    // Wenn Zahl von PIN 12 = 16724175
Input Pin für Taste 2  = Motor1 Tor zu     // Wenn Zahl von PIN 12 =16718055
Input Pin für Taste 3  = Motor2 Tor auf    // Wenn Zahl von PIN 12 =16756815
Input Pin für Taste 4  = Motor 2 Tor zu    // Wenn Zahl von PIN 12 =16716015
Input Pin für Taste 5  = Motor 3 Tor auf  // Wenn Zahl von PIN 12 =16726215
Input Pin für Taste 6  = Motor 3 Tor zu   // Wenn Zahl von PIN 12 =16734885
Input Pin für Taste 7  = Licht an im RLS    // Wenn Zahl von PIN 12 =16728765
Input Pin für Taste 8  = Licht aus im RLS   // Wenn Zahl von PIN 12 =16730805
Input Pin für Taste 9  = Licht an Außen    // Wenn Zahl von PIN 12 =16732845
Input Pin für Taste C+  = Licht aus Außen   // Wenn Zahl von PIN 12 =16753245
LOOP TEIL:
Richtungs Pin für Motor 1 (dir=LOW für Auf)         // PIN  0
Richtungs Pin für Motor 1 (dir=HIGH für ZU)         // PIN  0
Richtungs Pin für Motor 2 (dir=LOW für Auf)        // PIN  1
Richtungs Pin für Motor 2 (dir=HIGH für ZU)        // PIN  1
Richtungs Pin für Motor 3 (dir=LOW für Auf)       // PIN  13
Richtungs Pin für Motor 3 (dir=HIGH für ZU)       // PIN  13
PWM PIN  für Motor 1 TOR Auf    // PIN 11
PWM PIN  für Motor 1 TOR ZU     // PIN 10
PWM PIN  für Motor 2 TOR Auf   // PIN  9
PWM PIN  für Motor 2 TOR ZU   // PIN  6
PWM PIN  für Motor 3 TOR Auf  // PIN  5
PWM PIN  für Motor 3 TOR ZU  // PIN   3
RLS Beleuchtung innen                PIN HIGH     // PIN  2
RLS Beleuchtung innen                PIN LOW     // PIN  4
Außenlicht                                     PIN HIGH     // PIN  7
Außenlicht                                     PIN LOW    // PIN  8
  }
}
-----------------------------------------------------------------------------------------------------------------------------------------------------------
E N D E
Hier noch ein paar Informationen zu der Drehzahl bzw. den Stepps die die Motoren machen sollen:
Die Spindeln haben ein Gewinde M3 = 0,5 mm Pro Umdrehung, 8,5 mm ist der Weg den die Spindeln für "Auf" den Antrieb bewegen sollen
das wären dann 17 Umdrehungen.... da es keine Informationen gibt wie viele Stepps die Motoren pro Umdrehung machen können muss ich das wohl erst noch Testen wenn ich die Motoren habe.... das kann noch gut 1,5 Monate dauern.

Momentan bin ich mir nicht sicher welcher Weg am besten zum Ziel führt. :oops:

Re: Hilfe zu Arduino(UNO)Sketch gesucht für FB

Verfasst: So 21. Jul 2019, 12:57
von MicroBahner
Hallo Rainer,
um ehrlich zu sein - so ganz verstehe ich nicht, was Du da geschrieben hast. Vielleicht solltest Du einfach mal genau beschreiben, was dein Sketch können soll. So in etwas kann ich das aus diesen Zeilen entnehmen:

Code: Alles auswählen

Input Pin für Taste 1  = Motor 1 Tor auf    // Wenn Zahl von PIN 12 = 16724175
Input Pin für Taste 2  = Motor1 Tor zu     // Wenn Zahl von PIN 12 =16718055
Input Pin für Taste 3  = Motor2 Tor auf    // Wenn Zahl von PIN 12 =16756815
Input Pin für Taste 4  = Motor 2 Tor zu    // Wenn Zahl von PIN 12 =16716015
Input Pin für Taste 5  = Motor 3 Tor auf  // Wenn Zahl von PIN 12 =16726215
Input Pin für Taste 6  = Motor 3 Tor zu   // Wenn Zahl von PIN 12 =16734885
Input Pin für Taste 7  = Licht an im RLS    // Wenn Zahl von PIN 12 =16728765
Input Pin für Taste 8  = Licht aus im RLS   // Wenn Zahl von PIN 12 =16730805
Input Pin für Taste 9  = Licht an Außen    // Wenn Zahl von PIN 12 =16732845
Input Pin für Taste C+  = Licht aus Außen   // Wenn Zahl von PIN 12 =16753245
aber was sollen da die Input-Pins bedeuten?

Das mit den PWM-Pins passt auf jeden Fall nicht. Du kannst einen Stepper nicht über PWM ansteuern. Mit dem oben erwähnten Treiber DRV8825 brauchst Du 2 Leitungen pro Motor: Step und Dir ( evtl. noch eine 3. um den Motor im Stillstand ganz abzuschalten ). Die Step-Leitung ist aber kein PWM-Anschluß, sondern da muss jeder Impuls definiert per Software erzeugt werden. Am einfachsten geht das mit einer entsprechenden Lib.

Re: Hilfe zu Arduino(UNO)Sketch gesucht für FB

Verfasst: Mo 22. Jul 2019, 10:17
von ts250x
Hallo Franz-Peter,
Ich Danke dir für deine Antwort, und würde am liebsten schreiben " Du kleiner Schelm" :mrgreen:
Da habe ich gestern mal deinen Fred mit den Moba tools gelesen ... und was sehe ich da die MOBA-TOOLS die auch Schrittmotoren beherrschen.

Das hättest du mir schon früher schreiben können......... :D Ich hatte das als Servo und LED Tools in Erinnerung
Die in der ZIP eingefügte PDF MobaTools -11 habe ich dann mal durchgelesen und versucht für mich da etwas heraus zu ziehen was meinen Anforderungen entspricht:
Leider habe ich noch keine Idee wie ich dem Arduino beibringen soll dass er 3 Motoren unabhängig voneinander steuern soll.
Und hier ein Auszug aus der PDF mit Fragen :

Einrichten des Schrittmotors:
Stepper4 myStepper( int steps360, byte mode );
mode gibt an, ob der Motor im FULLSTEP oder HALFSTEP Modus angesteuert wird. Wird der
Parameter weggelassen, wird FULLSTEP angenommen.
mode=A4988 gibt an, dass der Motor über einen Schrittmotortreiber mit Step- und Direction
Eingang ( z.B. der A4988 ) angeschlossen ist.
steps360 ist die Zahl der Schritte, die der Motor für eine Umdrehung braucht ( im jeweils
angegebenen Mode, bei A4988 ist das eingestellte Microstepping zu berücksichtigen)

Frage zu OBEN
Wie kann ich 3 Motoren definieren?
zB.
Stepper4 my Stepper A (int steps 200 ,byte mode=drv8825);
Stepper4 my Stepper B (int steps 200 ,byte mode=drv8825);
Stepper4 my Stepper C (int steps 200 ,byte mode=drv8825);
Wäre das so Richtig ?



----------------------------------------------------------------------------------------------------------------------------------------------
void myStepper.setZero( );
Die aktuelle Position des Motors wird als Referenzpunkt für den 'write Befehl mit absoluter
Positionierung genommen.

Frage dazu:
Ist die absolute Positionierung als TOR ZU einzurichten ? Also: void my Stepper A set Zero(0),




----------------------------------------------------------------------------------------------------------------------------------------------
void myStepper.doSteps(long stepcount );
Zahl der Schritte, die der Motor ausführen soll. Das
Vorzeichen gibt die Drehrichtung an.

Frage dazu: welches Vorzeichen?

Für meine Motoren würde das dann so aussehen?
200 Stepps pro Umdrehung * 17 Umdrehungen =3400 Stepps

void my StepperA do Steps(3400 stepcount);

wäre das so Richtig ?

________________________________________________________________________________________________________________________________

Nun noch zu deiner Frage aus deiner letzten Antwort :
Wozu die Vielen Input Pins ? das war mein kläglicher Ansatz für PIN 12 die FB Zahlen einzubinden...... :oops:

Ich denke der Weg den Klaus vorgeschlagen hat, ist dann wohl der bessere:
zB. If results.value = 16724175 nur ist mir dabei nicht klar woher der UNO wissen soll dass er auf PIN 12 das Ergebnis vom IR-Reciver
einlesen soll......und die einzelnen Zahlenreihen die er dort ausliest an die richtigen Pins weitergeben soll ...........zum Drehen des Motors und zur Richtung in der sich der Motor drehen soll, das wären schon mal 2 Pins die jeder Motor benötigt.........den 3 ten PIN (SLEEP) den du zum ausschalten des Motorstroms vorgeschlagen hast würde doch über die Moba-Tools entfallen können oder täusche ich mich da......

Wie hier Alle lesen können es gibt noch Viel Fragen ..............hoffentlich auch Antworten :fool:

Re: Hilfe zu Arduino(UNO)Sketch gesucht für FB

Verfasst: Mo 22. Jul 2019, 13:10
von MicroBahner
Hallo Rainer,
Ich habe dich jetzt nicht direkt auf die MobaTools gestoßen, weil ich nicht weis (bzw nicht wusste), ob die sich mit der IRremote-Lib vertragen. Inzwischen habe ich das aber ausprobiert, und es scheint zu funktionieren.

Der Schelm rät dir aber vor allem ganz dringend, dir ein paar Grundlagen in der Programmierung mit C++ zu erarbeiten :wink: . Sonst wird das nichts, wenn Du dir den Sketch selbst schreiben willst ( gut, was fertiges, das zu deinen Anforderungen passt, wirst Du vermutlich nicht finden ). Ich denke, dann verstehst Du auch die Doku der MobatTools besser. Da werden schon ein paar Grundlagen vorausgesetzt.

------------------------------------------
ts250x hat geschrieben: Mo 22. Jul 2019, 10:17 Wie kann ich 3 Motoren definieren?
zB.
Stepper4 my Stepper A (int steps 200 ,byte mode=drv8825);
Stepper4 my Stepper B (int steps 200 ,byte mode=drv8825);
Stepper4 my Stepper C (int steps 200 ,byte mode=drv8825);
Wäre das so Richtig ?
Nein, so funktioniert das nicht. Grundsätzlich ist es schon richtig, dass man da 3 Stepper in jeweils einer Zeile definieren kann, aber die Syntax stimmt so nicht. Das 'mystepper' in der Doku ist ein Beispiel für den Namen des angesteuerten Steppers. Da musst Du dir für jeden einen eigenen Namen ausdenken.
'int steps' und 'byte mode' deklariert, was für eine Art Variable Du dort einsetzen musst. Beim jeweiligen Aufruf steht das nicht mehr dabei. Möglich wäre das z.B. so

Code: Alles auswählen

Stepper4 Tor1Stepper( 200, A4988 );
Stepper4 Tor2Stepper( 200, A4988 );
Stepper4 Tor3Stepper( 200, A4988 );
-------------------------------------------------------
ts250x hat geschrieben: Mo 22. Jul 2019, 10:17 void myStepper.setZero( );
Die aktuelle Position des Motors wird als Referenzpunkt für den 'write Befehl mit absoluter
Positionierung genommen.
Frage dazu:
Ist die absolute Positionierung als TOR ZU einzurichten ? Also: void my Stepper A set Zero(0),
der Aufruf 'setZero' definiert die derzeitige Position des Motors als Referenzpunkt. Einen Parameter kann man da nicht mit übergeben. Das sieht man an der leeren Klammer in der Deklaration.
Wo Du den Referenzpunk hinlegst, ist im Prinzip erstmal egal. Aber es muss ein Punkt sein, Wo Du erkennen kannst, wenn der Motor sich dort befindet. Das wurde hier im Thread am Anfang ja schonmal ein paar mal erwähnt, dass man für einen Schrittmotor einen Referenzpunkt braucht, damit man ihn gezielt zu definierten Positionen verfahren kann. Wenn das Motörchen so schwach ist, das man es problemlos gegen einen Anschlag fahren kann, könnte man das auch als Referenzpunkt hernehmen. Das muss man dann aber mechanisch so gestalten, dass da nichts kaputt gehen kann.

----------------------------------------------------------------------
ts250x hat geschrieben: Mo 22. Jul 2019, 10:17 Das Vorzeichen gibt die Drehrichtung an.

Frage dazu: welches Vorzeichen?
Natürlich das Vorzeichen des übergebenen Zahlenwertes. Dir fehlen wirklich noch die aller- allergrundlegendsten Grundlagen :roll: .

-----------------------------------------------------
ts250x hat geschrieben: Mo 22. Jul 2019, 10:17 nur ist mir dabei nicht klar woher der UNO wissen soll dass er auf PIN 12 das Ergebnis vom IR-Reciver
einlesen soll.
Das gibst Du doch beim Einrichten des IR-Empfaängers an:

Code: Alles auswählen

IRrecv irreceiver (RECEIVE_PIN);
----------------------------------------------------
ts250x hat geschrieben: Mo 22. Jul 2019, 10:17 .und die einzelnen Zahlenreihen die er dort ausliest an die richtigen Pins weitergeben soll ...........zum Drehen des Motors und zur Richtung in der sich der Motor drehen soll
Das musst Du halt programmieren .... (die MobaTools sollten das etwas erleichtern, aber die Auswertung der empfangenen FB-Codes musst Du schon selbst machen)

------------------------------------------------------
ts250x hat geschrieben: Mo 22. Jul 2019, 10:17 den 3 ten PIN (SLEEP) den du zum ausschalten des Motorstroms vorgeschlagen hast würde doch über die Moba-Tools entfallen können oder täusche ich mich da......
Wenn Du im Ruhezustand den Motorstrom abschalten willst, brauchst Du das schon noch, das machen die MobaTools nicht. Im Gegensatz zu einem 'normalen' Motor zieht ein Stepper halt immer Strom, auch wenn er steht. Das ist eines seiner großen Nachteile. Bei den kleinen Motörchen dürfte das nicht viel sein, da musst Du mal sehen, ob und wie warm sie werden.

Re: Hilfe zu Arduino(UNO)Sketch gesucht für FB

Verfasst: Di 23. Jul 2019, 11:30
von ts250x
Hallo Franz-Peter,
auch wenn ich mich wiederhole......... das muss sein:::::: D A N K E !

Und um es vorweg zu nehmen "DEINEN Rat" mich mit C++ auseinander zu setzen versuche ich, habe heute morgen schon ein paar Seiten im www gefunden da geht es zwar Hauptsächlich um PC-Programme aber die Grundlagen sollten da auch vermittelt werden.
---------------------------------------------------------------------------------------------------------------------------------
Das hat mir schon sehr geholfen,

Code: Alles auswählen

Stepper4 Tor1Stepper( 200, A4988 );
Stepper4 Tor2Stepper( 200, A4988 );
Stepper4 Tor3Stepper( 200, A4988 );
Auch deine Erklärung dazu: JA mit der Syntax tue ich mir echt schwer da ich nicht weiß was ich da ändern kann bzw. reinschreiben darf/ muss.

Ich möchte mal bei dem Beispiel bleiben:
Stepper4 = / das worauf der Arduino reagiert und in der entsprechenden LIB darauf zurückgreift
TOR1Stepper könnte auch StepperA geschrieben werden ? Ist "Stepper" dann ebenfalls notwendig oder könnte dort auch Tor1 stehen.

(200 ist mir jetzt klar, da muss man nicht mehr int.steps schreiben da es in der Klammer steht, A4988 sagt nur aus dass es ein Treiber mit DIR+STEP Anschluss ist)

Zum set Zero() ist meine Idee das ich die Motoren jeweils auf Tor ZU stelle>>>>> dann erst die Steuerung einschalte und somit der setZero Punkt festgelegt,<<<<<<<<<<<<<<< umgekehrt bei Abschalten der Steuerung erst Alle Tore schließe und danach die Steuerung abschalte.

Das wars erstmal vom NERD, :oops:
ich werde mich hier wieder melden wenn ich einen Sketch habe der dann hoffentlich funktioniert.

Re: Hilfe zu Arduino(UNO)Sketch gesucht für FB

Verfasst: Sa 27. Jul 2019, 16:09
von MicroBahner
Hallo Rainer,
erstmal Grundlagen lernen ist sicher der richtige Ansatz. Wenn es um die Syntax von C++ geht, ist es erstmal egal ob für den PC oder für den Arduino. Allerdings gibt es in Tutorials für den PC meist Beispiele mit Ausgabefunktionen, die es auf dem Arduino natürlich nicht gibt.
Im ArduinoForum hat sich jemand mal die Mühe gemacht, eine Codereferenz zu schreiben. Sozusagen von Einsteiger zu Einsteiger. Ist sicher nicht in allen Punkten 100% korrekt - speziell was die Begriffe angeht. Ist aber nicht so wesentlich, und alles in allem doch eine sehr gute Übersicht. Vielleicht hilft dir das ja.
ts250x hat geschrieben: Di 23. Jul 2019, 11:30 Stepper4 = / das worauf der Arduino reagiert und in der entsprechenden LIB darauf zurückgreift
TOR1Stepper könnte auch StepperA geschrieben werden ? Ist "Stepper" dann ebenfalls notwendig oder könnte dort auch Tor1 stehen.
ja, Stepper4 ist ein Schlüsselwort aus meiner Lib und sagt dem Compiler, dass Du die dahinter liegende Funktionalität nun verwenden willst ( Im 'Fachchinesisch': es wird ein Objekt der Klasse 'Stepper4' angelegt ;) ).
Den Namen dahinter kannst Du vollkommen frei wählen. Er muss nur den Namenskonventionen von C++ entsprechen ( nur Buchstaben, Ziffern und der '_', und der Name darf nicht mit einer Ziffer beginnen ). Bei den Buchstaben wird Groß/Kleinschreibung unterschieden. Und eindeutig muss der Name natürlich auch sein, darf also noch nicht woanders für einen anderen Zweck verwendet worden sein.
ts250x hat geschrieben: Di 23. Jul 2019, 11:30 Zum set Zero() ist meine Idee das ich die Motoren jeweils auf Tor ZU stelle>>>>> dann erst die Steuerung einschalte
Wie willst Du die Tore stellen, bevor Du die Steuerung einschaltest? Auch wenn das so gebaut ist, dass es mechanisch geht, ist es doch sehr unpraktisch, finde ich. Wenn die Motörchen schwach genug sind, so dass sie den Anschlag von Tor ZU nicht überwinden können, kannst Du nach dem Einschalten einfach solange Richtung 'Tor ZU' fahren, bis sie sicher zu sind. Und das definierst Du dann als set Zero.
ts250x hat geschrieben: Di 23. Jul 2019, 11:30 ich werde mich hier wieder melden wenn ich einen Sketch habe der dann hoffentlich funktioniert.
Du darfst dich auch schon vorher melden, falls es irgendwo klemmt. :redzwinker:

Re: Hilfe zu Arduino(UNO)Sketch gesucht für FB

Verfasst: So 28. Jul 2019, 10:49
von ts250x
Hallo Franz-Peter, Hallo Alle Mitleser,
eigentlich wollte ich mich ja erst hier wieder melden wenn ich was Vorzeigbares habe.
gestern ist es mir gelungen den 1.Teil meines Sketches von der Arduino-Software überprüfen zu lassen mit dem Ergebnis Ohne Fehlermeldung.
Bis dahin war es schon ein steiniger Weg für mich..... Leider ist das gefühlt erst das 1. drittel des Sketches.

@ Franz-Peter,
Dein Link für die Grundlagen ist das was ich gesucht habe, da muss ich mich noch mehr einlesen, da bist du ja auch erwähnt mit einer Danksagung vom Ersteller dieser Dokumentation. Nach dem ersten Überfliegen denke ich das sollte jeder Anfänger für Arduino mal gesehen haben. :gfm:

Wo es bei mir momentan hapert ist die Sache mit der FB bzw. mit deren Ausgelesenen Daten (Zahlen) für z.B. Taste 1
Wenn ich hier die von Klaus vorgeschlagene If results.value = xxxxxxxxxx, nehme, dann muss diese nicht nur stepPin einschalten sondern auch gleichzeitig den SlepPin auf HIGH setzen den dirPin auf entweder HIGH oder LOW setzen...... wie bekomme ich das hin ??

Oder ich verwende das von Dir vorgeschlagene "case" doch da sehe ich die gleichen Probleme......... Ergo ich muss noch Viel lesen und hoffentlich auch Verstehen :oops:

Das nächste was mich noch beschäftigt: welche "Klasse" sollte ich am besten verwenden ? Deine Stepper4 hätte den Charme eventuell sogar die Anfahrrampe - Bremsrampe zu benutzen. Das wäre mein Favorit.......

Als nächste Ungereimtheit die sich mir erstellt: Wenn Motor1 sich per FB dreht benötigt er ja eine gewisse Zeit bis zum Ziel.... das bedeutet es darf in dieser Zeit kein entgegengesetzter Befehl von der FB angewandt werden..... klassisch wäre das eine Verriegelung...... muss oder soll ich da mit Delay arbeiten oder besser break, bzw. else......

Ein paar positive Neuigkeiten gibt es auch zu vermelden: Die Motoren sind bei mir eingetroffen, leider Ohne Soft-Kabel.....inzwischen habe ich isolierte Kupferlitze mit 0,05mm² gekauft diese soll bis 1 A belastbar sein.

Soweit das von mir,........... der sich jetzt weiter mit dem lesen ......... + verstehen beschäftigen wird.....
ich wünsche Allen eine schönen kühlen Sonntag.... :fool:

Re: Hilfe zu Arduino(UNO)Sketch gesucht für FB

Verfasst: Mo 29. Jul 2019, 09:18
von ts250x
Hallo zusammen,
eben habe ich mir mal das Datenblatt vom DRV8825 angeschaut dabei bin ich auf folgendes gestoßen.

Bild

Nun meine Frage: wenn ich die Sleep- Funktion benutzen möchte muss ich diese gelb markierte Zeit von 1,7 ms beachten, also im Sketch diese Zeit mit delay angeben............ oder hat die Klasse Stepper4 das schon berücksichtigt??

Re: Hilfe zu Arduino(UNO)Sketch gesucht für FB

Verfasst: Mo 29. Jul 2019, 14:21
von MicroBahner
Hallo Rainer,
schön, dass dir mein Link auf die Arduino-Referenz gefällt. Der Ersteller hat sich da sehr viel Mühe gemacht, und da er selber Einsteiger war, hat er das sicher auch aus der Sicht eines solchen geschrieben :wink:
ts250x hat geschrieben: So 28. Jul 2019, 10:49 Wo es bei mir momentan hapert ist die Sache mit der FB bzw. mit deren Ausgelesenen Daten (Zahlen) für z.B. Taste 1
Wenn ich hier die von Klaus vorgeschlagene If results.value = xxxxxxxxxx, nehme, dann muss diese nicht nur stepPin einschalten sondern auch gleichzeitig den SlepPin auf HIGH setzen den dirPin auf entweder HIGH oder LOW setzen...... wie bekomme ich das hin ??
Gleichzeitig geht auf einem Arduino gar nichts. Immer nur eins nach dem anderen :D . Da es sehr schnell geht, sieht es zuweilen aus wie gleichzeitig. Ich hatte hier auch mal ein Tutorial geschreiben, wie man 'scheinbar' gleichzeitige Abläufe programmiert. Du kannst ja mal reinschauen, ob das schon was für dich ist. Vermutlich aber jetzt noch nicht relevant.
Mit den MobaTools brauchst Du dich um die 'Step' und 'Dir' Pins auch nicht kümmern, das erledigt die 'Stepper4' Klasse.

Ob Du die FB-Auswertung mit if(... oder case ... machst ist dabei unerheblich. Die Ansteuerung des Stepper ist in beiden Fällen das Gleiche.
ts250x hat geschrieben: So 28. Jul 2019, 10:49 Als nächste Ungereimtheit die sich mir erstellt: Wenn Motor1 sich per FB dreht benötigt er ja eine gewisse Zeit bis zum Ziel.... das bedeutet es darf in dieser Zeit kein entgegengesetzter Befehl von der FB angewandt werden...
Warum? Es kann doch gewünscht sein, das Tor auch wieder schließen zu können, bevor es ganz auf ist.
ts250x hat geschrieben: Mo 29. Jul 2019, 09:18 Frage: wenn ich die Sleep- Funktion benutzen möchte muss ich diese gelb markierte Zeit von 1,7 ms beachten, also im Sketch diese Zeit mit delay angeben............ oder hat die Klasse Stepper4 das schon berücksichtigt??
Ja, das wirst Du dann wohl berücksichtigen müssen. Die Stepper4-Klasse weis nichts vom 'sleep'.

Re: Hilfe zu Arduino(UNO)Sketch gesucht für FB

Verfasst: Mo 29. Jul 2019, 17:05
von ts250x
Hallo Franz-Peter,

Ich Danke Dir für deine Antworten: :gfm: :gfm:

Eventuell denke ich zu kompliziert....... was allerdings auch beweist dass ich mir Mühe gebe das zu verstehen was da im Sketch geschrieben wird.

Wegen dem gleichzeitigen Befehl TOR AUF -----TOR ZU sind meine bedenken dass der Motor das nicht mitmacht.

Vielleicht sollte ich an dieser Stelle mal erwähnen das ich Elektromeister bin.
Aber seit 40 Jahren im Hochspannungsbereich gearbeitet habe, also von 20KV - 400KV Freileitungsbau.

Dein Link vom"Tutorial" verweist auf diese Seite.

Nun hätte ich noch die Frage zum Sleep schalten oder sollte ich besser Enable schalten der ist mit 650ns doch wesentlich schneller ??

Dazu muss ich erst noch im Datenblatt schauen wie der geschaltet wird da er im Normalfall auch weggelassen werden kann ist der Aktiv HIGH oder LOW

Ich lese dann mal.

Re: Hilfe zu Arduino(UNO)Sketch gesucht für FB

Verfasst: Mo 29. Jul 2019, 20:52
von Bodo
Hallo,
ts250x hat geschrieben: Mo 29. Jul 2019, 17:05 Nun hätte ich noch die Frage zum Sleep schalten oder sollte ich besser Enable schalten der ist mit 650ns doch wesentlich schneller ??
also wenn Du den Unterschied von 1, 2 oder sogar 5 Millisekunden bis zum Starten des Torantriebs siehst, bist Du echt gut 😉. Theoretische Überlegungen sind zwar prima, aber einfach mal ausprobieren wäre auch eine Idee ...
VG Bodo

Re: Hilfe zu Arduino(UNO)Sketch gesucht für FB

Verfasst: Mo 29. Jul 2019, 21:00
von MicroBahner
ts250x hat geschrieben: Mo 29. Jul 2019, 17:05 Wegen dem gleichzeitigen Befehl TOR AUF -----TOR ZU sind meine bedenken dass der Motor das nicht mitmacht.
Warum sollte der das nicht mitmachen? Ob die Richtungsumkehr mittendrin erfolgt, oder erst wenn das Tor ganz auf ist, sollte dem Motor ziemlich egal sein.
ts250x hat geschrieben: Mo 29. Jul 2019, 17:05 Dein Link vom"Tutorial" verweist auf diese Seite.
Ups, da ist wohl ein Fehler passiert. 2. Versuch :wink:
ts250x hat geschrieben: Mo 29. Jul 2019, 17:05 Nun hätte ich noch die Frage zum Sleep schalten oder sollte ich besser Enable schalten der ist mit 650ns doch wesentlich schneller ??
Eigentlich sollte das Enable reichen. Den Motor schaltest Du in beiden Fällen ab. Bei sleep geht nur auch der Chip in einen Stromsparmodus. Das dürfte aber eher für Batteriebetrieb interessant sein. die 8mA (maximal) die der Chip im Normalzustand braucht, dürften bei dir wohl nicht stören. Die Logik von Enable ist aber genau anders herum.


@Bodo: Ich denke bei den 1,7ms geht es ihm wohl eher darum, dass der 1 Step nicht verschluckt wird. Bei den MobaTools kann es durchaus auch ein paar ms dauern, bis der 1. Schritt ausgeführt wird. Aber das ist nicht sichergestellt, es kann auch sehr schnell gehen, je nachdem wann der nächste Timer-IRQ nach dem Startbefehl ausgelöst wird.

Re: Hilfe zu Arduino(UNO)Sketch gesucht für FB

Verfasst: Mo 29. Jul 2019, 21:10
von Bodo
Hallo Franz-Peter,

klar - verschluckt werden darf nix. Ich setze bei meiner Schiebebühne momentan 5ms Delay zwischen Aktivieren des Schrittmotors und dem ersten Step - sehen tut man das nicht 😉.
Ein Problem könnte es sein, wenn man eigentlich komplett ohne Delay auskommen und parallel andere Aufgaben wie z.B. Lichteffekte steuern will - die könnten dann minimal aus dem Takt geraten ...

VG Bodo

Re: Hilfe zu Arduino(UNO)Sketch gesucht für FB

Verfasst: Mo 29. Jul 2019, 22:12
von ts250x
Hallo Franz-Peter, Hallo Bodo,
Bodo hat geschrieben: Mo 29. Jul 2019, 20:52
also wenn Du den Unterschied von 1, 2 oder sogar 5 Millisekunden bis zum Starten des Torantriebs siehst, bist Du echt gut 😉. Theoretische Überlegungen sind zwar prima, aber einfach mal ausprobieren wäre auch eine Idee ...
Hallo Bodo, da hast etwas falsch verstanden mit ging es darum wie lange der Treiber braucht bis er weitere Befehle ausführen kann... sozusagen Startklar ist.
Was ich schon schön finde du hast das mit 5 ms schon getestet da hab ich dann schon mal einen Wert.ich war heute bei 20 ms......... einfach so vom Gefühl her
Mit dem Ausprobieren hab ich derzeit einige Probleme
1. mein Sketch ist noch nicht geschrieben
2. die Treiber liegen wohl noch in China bzw. in den USA
3. die Motoren sind noch nicht mit Kabeln versehen bis auf einen den ich heute mal auch durchgemessen habe eine Spule hat 16,5 Ohm die andere 16,7 Ohm
MicroBahner hat geschrieben: Mo 29. Jul 2019, 21:00
ts250x hat geschrieben: Mo 29. Jul 2019, 17:05 Wegen dem gleichzeitigen Befehl TOR AUF -----TOR ZU sind meine bedenken dass der Motor das nicht mitmacht.
Warum sollte der das nicht mitmachen? Ob die Richtungsumkehr mittendrin erfolgt, oder erst wenn das Tor ganz auf ist, sollte dem Motor ziemlich egal sein.
Da ging es mir um mechanische Probleme, die kleinen Motörchen mit Gestänge und den Toren daran von ca. 120 UPM rechts lauf innerhalb von ein paar ms auf links lauf um zu schalten.. das tut mir vom Gedanken her weh :oops:

ts250x hat geschrieben: Mo 29. Jul 2019, 17:05 Nun hätte ich noch die Frage zum Sleep schalten oder sollte ich besser Enable schalten der ist mit 650ns doch wesentlich schneller ??
hat geschrieben: Eigentlich sollte das Enable reichen. Den Motor schaltest Du in beiden Fällen ab. Bei sleep geht nur auch der Chip in einen Stromsparmodus. Das dürfte aber eher für Batteriebetrieb interessant sein. die 8mA (maximal) die der Chip im Normalzustand braucht, dürften bei dir wohl nicht stören. Die Logik von Enable ist aber genau anders herum.


Das habe ich vorhin auch so verstanden und bin zu dem Ergebnis gekommen das ich wohl doch lieber Sleep verwende.

hat geschrieben:@Bodo: Ich denke bei den 1,7ms geht es ihm wohl eher darum, dass der 1 Step nicht verschluckt wird. Bei den MobaTools kann es durchaus auch ein paar ms dauern, bis der 1. Schritt ausgeführt wird. Aber das ist nicht sichergestellt, es kann auch sehr schnell gehen, je nachdem wann der nächste Timer-IRQ nach dem Startbefehl ausgelöst wird.
.

Genau darum ging es mir :fool: Das mit dem auf Zitate Antworten muss ich auch mal Üben :shock:

Re: Hilfe zu Arduino(UNO)Sketch gesucht für FB

Verfasst: Di 30. Jul 2019, 10:41
von MicroBahner
Hallo Rainer,
ts250x hat geschrieben: Mo 29. Jul 2019, 22:12 die kleinen Motörchen mit Gestänge und den Toren daran von ca. 120 UPM rechts lauf innerhalb von ein paar ms auf links lauf um zu schalten.. das tut mir vom Gedanken her weh
Dafür hätte die Stepper4-Klasse ja Anfahr- und Bremsrampe. Da geht das dann sehr Mechanik-schonend 8) :wink:
ts250x hat geschrieben: Mo 29. Jul 2019, 22:12 Das habe ich vorhin auch so verstanden und bin zu dem Ergebnis gekommen das ich wohl doch lieber Sleep verwende.
Die unterschiedliche Logik sollte aber kein Hinderungsgrund sein. Das eine ist so einfach oder schwierig wie das andere.

Ausserdem habe ich mir gedacht, dass es doch ganz nett wäre, wenn sich die Stepper4-Klasse selbst um einen enable-Pin kümmern würde. Ist auch gar nicht so kompliziert ( wenn man die Internas der Klasse kennt :redzwinker: ). Deshalb habe ich jetzt eine neue Methode eingeführt, mit der das aktiviert wird. Ist zwar noch im frühen Entwicklungsstadium, aber da es ja nicht viel ist, sollte das auch flott fertig sein.
Neue Methode:

Code: Alles auswählen

void Stepper4::attachEnable( uint8_t enablePin, uint16_t delay, bool active );
enablePin: Der Pin für das enable-Signal
delay: Verzögerungszeit in ms zwischen Enable Ein/Aus und der Motorbewegung
active: definiert ob enable HIGH activ oder LOW aktiv ist.

Re: Hilfe zu Arduino(UNO)Sketch gesucht für FB

Verfasst: Di 30. Jul 2019, 16:33
von ts250x
Hallo Franz-Peter,
WOW :fool:
Da hast du mal eben schnell deine MobaTools erweitert da bleibt mir nur zu schreiben "Chapeau"

Diese "Neue Erweiterung" muss ich dann ja unbedingt einbauen/Anwenden :gfm:

So dann darf ich meinen Angefangenen Sketch nochmal umschreiben, dafür mach ich das gerne :mrgreen: :mrgreen:

@ Alle Mitleser: ich finde das ist ganz Großes KINO :mrgreen: :idea: :mrgreen:

P.S. die deutsche PDF hat jetzt auch de im Namen

Re: Hilfe zu Arduino(UNO)Sketch gesucht für FB

Verfasst: Mi 31. Jul 2019, 09:37
von ts250x
Hallo Arduino Sketch Kenner
beim Überprüfen von meinem Sketch bekomme ich folgende Fehlermeldung

Code: Alles auswählen

expected initializer before 'TOR1Stepper'
Ich babe schon verschiedene Schreibweisen probiert aber letztendlich kommt immer "expected initializer before" als Fehlermeldung heraus.

Was habe ich da falsche gemacht ????????? :oops:

Oder was kann ich tuen um diesen Fehler zu vermeiden ?? :idea: :?:

Re: Hilfe zu Arduino(UNO)Sketch gesucht für FB

Verfasst: Mi 31. Jul 2019, 09:52
von ts250x
Sorry, die erste Fehlermeldung habe ich wegbekommen .
Nun die 2 te...... Oh Je

Code: Alles auswählen

void T1Stepper.rotate(1);

Dazu diese Fehlermeldung

Code: Alles auswählen

expected initializer before '.' token

Re: Hilfe zu Arduino(UNO)Sketch gesucht für FB

Verfasst: Mi 31. Jul 2019, 11:38
von MicroBahner
Hallo Rainer,
das 'void' muss weg. Das steht nur bei der Deklaration dabei, damit der Compiler ( und der Anwender :wink: ) weis, dass da kein Wert zurückgegeben wird. Beim Aufruf darf das nicht mehr davor stehen.

Re: Hilfe zu Arduino(UNO)Sketch gesucht für FB

Verfasst: Mi 31. Jul 2019, 12:14
von ts250x
Hallo Franz-Peter,
wie immer DANKE für deine Unterstützung :gfm:

Jetzt habe ich den Sketch ohne Fehlermeldung hin bekommen ABER der kann so nicht stimmen.

uint16_t myStepper.setSpeedSteps Bei dieser Zeile hat er den Punkt nicht akzeptiert unterstrich hat dann zwar keine Fehlermeldung mehr gebracht aber ich denke das das dann falsch ist.

HIER mal der Sketch, der Ohne Fehlermeldung ist

Code: Alles auswählen

#include <IRremote.h>
#include <Arduino.h>
#include <DRV8825.h>
#include <MobaTools.h>
int irPin = 13; //Pin am Arduino Nano für den IR Receiver
Stepper4 T1Stepper(200, A4988);
Stepper4 T2Stepper(200, A4988);
Stepper4 T3Stepper(200, A4988);
Stepper4 unit16_t_T1Stepper_setSpeed(200.50);
byte T1Stepper_attach(10, 11);
byte T2Stepper_attach(7, 8);
byte T3Stepper_attach(4, 5);
int ledPin1 = 3;
int ledPin2 = 2;
int ledPin3 = 1;
int ledPin4 = A5;
int ledPin5 = A4;
int ledPin6 = A3;
int ledPin7 = A2;
int ledPin8 = A1;
int ledPin9 = A0;
IRrecv irrecv(irPin);                                                          //Objekt initialisieren für die IR Übertragung
decode_results results;
void setup() {
  pinMode(irPin, INPUT);                                        //Den IR Pin als Eingang deklarieren.
                                                               //uint16_t myStepper.setSpeedSteps( uint16_t speed10 uint16_t rampLen )
  
  int T1Stepper_attachEnable(12, 2, 0); // LOW oder  0 eintragen ??
  int T2Stepper_attachEnable(9, 2, 0);
  int T3Stepper_attachEnable(6, 2, 0);
  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT);
  pinMode(ledPin3, OUTPUT);
  pinMode(ledPin4, OUTPUT);
  pinMode(ledPin5, OUTPUT);
  pinMode(ledPin6, OUTPUT);
  pinMode(ledPin7, OUTPUT);
  pinMode(ledPin8, OUTPUT);
  pinMode(ledPin9, OUTPUT);
  Serial.begin(9600);         //Serielle kommunikation mit 9600 Baud beginnen.

}                                                     // Ende void setup
void loop() {
  if (irrecv.decode(&results)) 
Serial.println (results.value, DEC);
if (results.value == 16724175)                                //  Wenn der Infrarotempfanger die Zahl
                                                   // uint16_t myStepper.setSpeedSteps( uint16_t speed10 uint16_t rampLen )
  Stepper4 unit16_t_T1Stepper_setSpeedSteps(200,50);              // fehlt hier ein Komma zwischen den Eingaben ??
  Stepper4 T1Stepper_doSteps(+ 8);    // statt 8 sollten hier 1700 stepps gemacht werden  
                                                                       //void myStepper.rotate( int direction )
  Stepper4 T1Stepper_rotate(1);                                                   // muss hier "int" vor der 1 oder 0 stehen ??
}
ich denke mit diesem Sketch kann ich nichts anfangen :bigeek: Sagt mir mein Bauchgefühl

Re: Hilfe zu Arduino(UNO)Sketch gesucht für FB

Verfasst: Mi 31. Jul 2019, 17:16
von MicroBahner
Hallo Rainer,
man soll auf sein Bauchgefühl hören :redzwinker: .
Ich denke, es macht nicht viel Sinn, einfach ins kalte Wasser zu springen, um schwimmen zu lernen. Meistens geht man dabei einfach unter :( .
ts250x hat geschrieben: Mi 31. Jul 2019, 12:14 uint16_t myStepper.setSpeedSteps Bei dieser Zeile hat er den Punkt nicht akzeptiert unterstrich hat dann zwar keine Fehlermeldung mehr gebracht aber ich denke das das dann falsch ist.
richtig gedacht. Die Tatsache, dass der Compiler nicht mehr meckert, bedeutet nicht, dass der Sketch irgendwas sinnvolles tut.
Die DRV8825.h brauchst Du nicht, die Ansteuerung des DRV8825 erledigen die MobaTools

Versuch es erstmal mit einfacheren Sketchen - auch mit den Beispielen aus den Libs. Bei den MobaTools ist auch ein Stepper-Beispiel dabei. Und dann versuche die Beispiele zu verstehen aund nachzuvollziehen. Wenn da was unklar ist, kannst Du ja hier fragen. Und Du must klar unterscheiden zwischen Deklarationen/Definitionen und ausführbaren Anweisungen. Ausführbare Anweisungen dürfen nur innerhalb von Funktionen ( z.B. setup() oder loop() ) benutzt werden. Da fehlen einfach noch ein paar Grundlagen von C/C++. Ohne die geht es nicht.

Edit:Und dann fange mit ganz kleinen Sketchen an, z.B. sowas:

Code: Alles auswählen

#include <MobaTools.h>

Stepper4 myStepper(200, A4988);

void setup()
{
  myStepper.attach( 6,5 );		// Step und Dir-Pin
  myStepper.setSpeedSteps( 2000 );
  //myStepper.rotate(1);		// würde endlos drehen
  myStepper.writeSteps( 200);	// macht 200 Schritte
}

void loop()
{
}
Dreht sich der Stepper? Erst wenn das tut - weitermachen.

Re: Hilfe zu Arduino(UNO)Sketch gesucht für FB

Verfasst: Do 1. Aug 2019, 20:35
von ts250x
Hallo Franz-Peter,
tja das liebe gute Bauchgefühl :mrgreen:

Ganz ehrlich , mir war klar das das so nie und nimmer stimmen kann :bigeek:

ich habe heute versucht etwas weiter zu kommen, dabei habe ich deinen " Sketch" mal als Grundlage genommen um etwas mehr Logik in meinen Sketch zu bekommen.
Dabei habe ich myStepper umbenannt, und auch andere Vorgaben aus deinem Sketch geändert und jeweils geprüft ob es stimmt.
Bei einem Punkt bin ich fast verzweifelt:
es geht um das: uint16_t myStepper.setSpeedSteps( uint16_t speed10 uint16_t rampLen);

ich weis nicht mehr genau wieviele Internetseiten ich aufgerufen habe um dieses unit16_t zu finden bzw. eine Erklärung dazu zu finden ....

zum Schluß habe ich dann im Sketch das geschrieben: T1Stepper.setSeedStepps(20 50);
Das hat dann ohne Fehlermeldung geklappt. ich frage mich dann ob da nicht ein Komma dazwischen müsste ?

Also so : T1Stepper.setSeedStepps(20, 50); // 20*10=200rpm in 10 sec,50 = Stepps Rampenlänge

Wenn das jetzt wieder Falsch ist dann gebe ich langsam auf.... :oops: