RE: Hilfe zu Arduino(UNO)Sketch gesucht für FB gefunden/ Danksagungen

#126 von volkerS , 15.08.2019 22:17

Hallo Rainer,
hast du
SLEP
RST gebrückt und an 5V vom Arduino angeschlossen?
Wenn nein,
dann ist dein DRV8825 sowohl im Reset- als auch Sleep-Mode.
Beim Stromeinstellen hast du am DRV8825 ja nur den Takt angehalten (High an Drv).
Das Blinken der Led ist typisch für eine Beschleunigung, dann Bewegung und am Ende abbremsen. Allerdings sind 1,5min wohl zu lang für ein Toröffnen, oder?
Volker


volkerS  
volkerS
ICE-Sprinter
Beiträge: 5.958
Registriert am: 14.10.2014


RE: Hilfe zu Arduino(UNO)Sketch gesucht für FB gefunden/ Danksagungen

#127 von ts250x , 16.08.2019 07:51

Hallo Volker,

Zitat

hast du
SLEP
RST gebrückt und an 5V vom Arduino angeschlossen?
Wenn nein,
dann ist dein DRV8825 sowohl im Reset- als auch Sleep-Mode.


NEIN da habe ich nichts angeschlossen. Bist du dir mit RST an 5V sicher ? denn das habe ich so verstanden dass man dort mit 5 V das Reset einleitet..
Versuchen kann ich das ja mal....

Zitat

Allerdings sind 1,5min wohl zu lang für ein Toröffnen, oder?


JA das ist eindeutig zu lange ein 10tel der Zeit wäre noch OK

die 1700 Steps habe ich so berechnet: 200 Steps für eine Umdrehung * 8,5 mm Weg = 1700, aber jetzt beim schreiben fällt mir noch ein,
die Welle bewegt sich Pro Umdrehung = Gewindesteigung 0,5 mm, dann müssten 17 Umdrehungen gemacht werden. das wären dann
17*200 = 3400 Steps

Aber soweit bin ich ja leider noch nicht ops:


Gruß Rainer bleibt gesund


 
ts250x
InterRegioExpress (IRE)
Beiträge: 475
Registriert am: 11.03.2017
Ort: Vorderpfalz
Gleise ROCO-Line ohne
Spurweite H0
Steuerung z21,Tablet, Multimaus
Stromart Digital


RE: Hilfe zu Arduino(UNO)Sketch gesucht für FB gefunden/ Danksagungen

#128 von volkerS , 16.08.2019 08:29

Hallo Rainer,
ja ich bin mir da ganz sicher.
1. hattest du es ja bei der Stromeinstellung auch, und da konntest du einen Strom messen.
2. hier ein Auszug aus den Datenblatt:
Reset Input: Active-low reset input initializes the indexer logic and disables the H-bridge outputs. Internal pulldown.
Sleep mode Input: Logic high to enable device, logic low to enter low-power sleep mode. Internal pulldown.
3. Google mal nach Bildern des DRV8825. In allen Bildern mit Arduino sind Reset und Sleep an High.
4. Lies noch mal Beitrag #113.
Volker


volkerS  
volkerS
ICE-Sprinter
Beiträge: 5.958
Registriert am: 14.10.2014


RE: Hilfe zu Arduino(UNO)Sketch gesucht für FB gefunden/ Danksagungen

#129 von ts250x , 16.08.2019 09:00

Hallo Volker,
Sorry.............. das ich das in Frage gestellt habe ops:
Du hast natürlich RECHT.
Nun werde ich den Nächsten Versuch angehen....
Danke das du dir die Zeit genommen hast mir zu Antworten


Gruß Rainer bleibt gesund


 
ts250x
InterRegioExpress (IRE)
Beiträge: 475
Registriert am: 11.03.2017
Ort: Vorderpfalz
Gleise ROCO-Line ohne
Spurweite H0
Steuerung z21,Tablet, Multimaus
Stromart Digital


RE: Hilfe zu Arduino(UNO)Sketch gesucht für FB gefunden/ Danksagungen

#130 von ts250x , 16.08.2019 09:21

Hallo @ ALL
Hallo Volker, Franz-Peter
E R F O L G
ER Dreht sich..............zwar noch Viel zu weit............aber das ist jetzt eine Sache der Eingabe im Sketch


Gruß Rainer bleibt gesund


 
ts250x
InterRegioExpress (IRE)
Beiträge: 475
Registriert am: 11.03.2017
Ort: Vorderpfalz
Gleise ROCO-Line ohne
Spurweite H0
Steuerung z21,Tablet, Multimaus
Stromart Digital


RE: Hilfe zu Arduino(UNO)Sketch gesucht für FB gefunden/ Danksagungen

#131 von ts250x , 16.08.2019 12:34

Hallo @ All,
zwischen Bericht mit Fragen...
Der Motor wird warm bzw. Heiß auch im Stillstand...
Also habe ich im Sketch den Pin 12 zum Einschalten der Treiberplatine genommen.
Das funktioniert auch soweit..... doch bis dahin war es ein weiter Weg mit mir unerklärlichen Verhalten.
Am besten Zeige ich Euch mal den Sketch so wie er jetzt funktioniert.

Die Delay Zeiten mit 20000 waren notwendig damit der Motor auch seine jetzt 300 Steps machen kann, das wundert mich doch sehr .... müssen da eventuell { geschweifte klammern gesetzt werden damit das nacheinander abläuft ??
Eigentlich wollte ich das folgender Maßen Programmieren:
Wenn FB 1 gedrückt dann Treiber Pin 12 Einschalten ca.2ms warten bis der Treiber hochgefahren ist dann den Motor 300 Stepps machen lassen etwas warten dass er auch zur Ruhe kommt =delay 20ms dann den Treiber ausschalten..

Das funktioniert so überhaupt nicht da der Treiber nur ganz kurz eingeschaltet wird und dann gleich wieder ausgeschaltet somit kann der Motor sich nicht bewegen....???

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
#include <MobaTools.h>
#include <IRremote.h>
#include <Arduino.h>
Stepper4 T1Stepper(200, A4988);
int T1Slp_PIN = 12;
int RECV_PIN = 13; //Pin am Arduino Nano für den IR Receiver
IRrecv irrecv(RECV_PIN); //Objekt initialisieren für die IR Übertragung
decode_results results;
 
void setup()
{
T1Stepper.attach( 10, 11 ); // Step und Dir-Pin
T1Stepper.setSpeedSteps( 200, 50 );
irrecv.enableIRIn(); //Dieser Befehl initialisiert den Infrarotempfänger.
pinMode(T1Slp_PIN, OUTPUT);
pinMode(RECV_PIN, INPUT); //Den IR Pin als Eingang deklarieren.
Serial.begin(9600); //Serielle kommunikation mit 9600 Baud beginnen.
}
 
void loop()
{
 
if (irrecv.decode(&results)) {
Serial.println (results.value, DEC);
irrecv.resume();
}
 
if (results.value == 16724175) { // wenn der Infrarot Empfänger die Zahl erkennt
digitalWrite(12, HIGH);
//digitalWrite(T1Slp_PIN, HIGH);
//delay(20);
T1Stepper.doSteps(300); // Taste 1 macht 300 Schritte nach „rechts“
delay(20000);
digitalWrite(T1Slp_PIN, LOW);
}
if (results.value == 16718055) { // Taste 2
digitalWrite(12, HIGH);
// digitalWrite(T1Slp_PIN, HIGH);
//delay(20);
T1Stepper.doSteps(-300); // macht 300 Schritte nach „links“
delay(20000);
digitalWrite(T1Slp_PIN, LOW);
}
}
 
 


Hat jemand eine Idee wie das Programmiert werden muss ==??? ops:


Gruß Rainer bleibt gesund


 
ts250x
InterRegioExpress (IRE)
Beiträge: 475
Registriert am: 11.03.2017
Ort: Vorderpfalz
Gleise ROCO-Line ohne
Spurweite H0
Steuerung z21,Tablet, Multimaus
Stromart Digital


RE: Hilfe zu Arduino(UNO)Sketch gesucht für FB gefunden/ Danksagungen

#132 von volkerS , 16.08.2019 13:38

Hallo Rainer,
sehe ich das richtig?
delay 20 für hochfahren (20ms; derzeit aus, so hat der Treiber keine Zeit zum hochfahren)
delay 20000 für runterfahren? (20sec)
Wenn ja, dann vertauscht.
Ich würde beide delay auf 1000 setzen (1sec).
Volker
Edit: drehe während der Testzeit den Strom zurück, der Motor muss sich ja nur selbst bewegen, da reicht 30%.


volkerS  
volkerS
ICE-Sprinter
Beiträge: 5.958
Registriert am: 14.10.2014


RE: Hilfe zu Arduino(UNO)Sketch gesucht für FB gefunden/ Danksagungen

#133 von ts250x , 16.08.2019 17:27

Hallo Volker,

Zitat

sehe ich das richtig?
delay 20 für hochfahren (20ms; derzeit aus, so hat der Treiber keine Zeit zum hochfahren)


Du hast bestimmt auch die beiden Slash// gesehen. Das mit den 20ms hat ja nicht funktioniert, Meine Annahme für dieses ist dass die Taste der FB kürzer ihr Signal sendet somit kommt es nicht zum Steppen.
Was meinst du mit (20ms;derzeit??aus,so hat der Treiber keine Zeit zum hochfahren)

Die 20sec, benötigt der Lauf vom Motor vom 1 Stepp bis zum letzten Stepp, wenn ich das kürzer mache
also z.B. 10 sec dann hält der Motor zu früh an macht dann nur ca. 150 Stepps.

Deshalb meine Frage ob da { } Klammern eingefügt werden sollten/ müssen ?? oder gibt es eine andere Methode wie das Letzte Delay auch erst nach den getanen Stepps sich einschaltet und den Pin 12 auf LOW setzt.

Zitat

drehe während der Testzeit den Strom zurück, der Motor muss sich ja nur selbst bewegen, da reicht 30%.


Durch das Abschalten des Treibers wird der Motor nicht mehr warm... somit brauche ich den Strom nicht weiter zu begrenzen


Gruß Rainer bleibt gesund


 
ts250x
InterRegioExpress (IRE)
Beiträge: 475
Registriert am: 11.03.2017
Ort: Vorderpfalz
Gleise ROCO-Line ohne
Spurweite H0
Steuerung z21,Tablet, Multimaus
Stromart Digital


RE: Hilfe zu Arduino(UNO)Sketch gesucht für FB gefunden/ Danksagungen

#134 von volkerS , 16.08.2019 21:01

Hallo Rainer,
Arduino ist nicht meine Welt, ich löse meine Schaltungen mit Pic`s.
Deine Aufgabenstellung würde ich so lösen:
Initialisierung:
Lese EEProm (so weiß der Controller wie die Tore stehen)
alternativ
Referenzfahrt aller Tore (zur Sicherheit auf, falls eine Lok im Tor steht)
Hauptroutine:
Warte auf Tasteneingabe an der FB-Schleife
FB-Tastendruck erkannt
springe zur entsprechender Subroutine x
Subroutine x:
Abfrage, die prüft ob es sich um eine Tastendruckwiederholung handelt.
(2x oder mehr gleiche Richtung fürs Tor ist Unfug. )
Wenn ja zurück zur FB-Schleife sonst weiter
Wecke Motortreiber (T1Slp_PIN, High)
Pause z.B. 100ms (delay 100)
Lege Drehrichtung fest (T1Dir, High or Low)
Takte Motor z.B. 300 Schritte (T1stepper,do.steps 300)
Pause z.B. 50ms (delay 50)
schicke Motortreiber schlafen (T1Slp_PIN, LOW)
Option:
(schreibe aktuelle Torposition in EEProm), so weiß der Controller beim Initiallisieren (PowerUp) durch EEProm-Lesen wie die Tore stehen.
Zurück zur FB-Schleife (Hauptroutine)
Solange sich der Controller in der Subroutine befindet werden weitere FB-Befehle ignorriert.
Volker


volkerS  
volkerS
ICE-Sprinter
Beiträge: 5.958
Registriert am: 14.10.2014


RE: Hilfe zu Arduino(UNO)Sketch gesucht für FB gefunden/ Danksagungen

#135 von MicroBahner , 17.08.2019 08:03

Hallo Rainer,
erstmal schön, dass sich bei dir was dreht .

Zu deinen Problemen:
Zum einen darfst Du den Stepper nur starten wenn auch wirklich ein Befehl empfangen wurde. Also in dem if-Block mit der Abfrage auf einen erkannten Tastendruck
Dann: wie reagiert deine FB auf längere Tastendrücke? Wenn sie da einen eigenen 'Wiederholcode' sendet ( den Du dann ja ignorierst ) ist alles ok.
Und das Abschalten des enable solltest Du nicht über die Zeit machen. Du kannst abfragen, ob sich der Motor noch dreht, und wenn nicht, dann abschalten.
Etwa so:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 
#include <MobaTools.h>
#include <IRremote.h>
#include <Arduino.h>
Stepper4 T1Stepper(200, A4988);
int T1Slp_PIN = 12;
int RECV_PIN = 13; //Pin am Arduino Nano für den IR Receiver
IRrecv irrecv(RECV_PIN); //Objekt initialisieren für die IR Übertragung
decode_results results;
 
void setup()
{
T1Stepper.attach( 10, 11 ); // Step und Dir-Pin
T1Stepper.setSpeedSteps( 200, 50 );
irrecv.enableIRIn(); //Dieser Befehl initialisiert den Infrarotempfänger.
pinMode(T1Slp_PIN, OUTPUT);
pinMode(RECV_PIN, INPUT); //Den IR Pin als Eingang deklarieren.
Serial.begin(9600); //Serielle kommunikation mit 9600 Baud beginnen.
}
 
void loop()
{
 
if (irrecv.decode(&results)) {
Serial.println (results.value, DEC);
if (results.value == 16724175) { // wenn der Infrarot Empfänger die Zahl erkennt
digitalWrite(12, HIGH);
//digitalWrite(T1Slp_PIN, HIGH);
//delay(20);
T1Stepper.doSteps(300); // Taste 1 macht 300 Schritte nach „rechts“
}
if (results.value == 16718055) { // Taste 2
digitalWrite(12, HIGH);
// digitalWrite(T1Slp_PIN, HIGH);
//delay(20);
T1Stepper.doSteps(-300); // macht 300 Schritte nach „links“
}
irrecv.resume();
}
if (!T1Stepper.moving() ) {
digitalWrite(T1Slp_PIN, LOW);
}
}
 

Testen kann ich das z.Z. aber leider nicht. Tippfehler sind möglich

P.S. Arduino.h musst Du nicht einbinden, das wird automatisch gemacht.


viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'


 
MicroBahner
Metropolitan (MET)
Beiträge: 2.832
Registriert am: 28.11.2012
Ort: Mittelfranken
Gleise Tillig Elite
Steuerung Eigenbau
Stromart Analog


RE: Hilfe zu Arduino(UNO)Sketch gesucht für FB gefunden/ Danksagungen

#136 von ts250x , 17.08.2019 11:10

Hallo Volker, Hallo Franz-Peter, Hallo alle Mitleser,

@ Volker,

Zitat

ich löse meine Schaltungen mit Pic`s.


Das ist für mich glaube ich zumindest nicht durchführbar..... da fehlen mir die Kenntnisse und vermutlich auch ein Programmer
Klar hätte das den Vorteil das sich der E-Prom die Torstellungen merken kann.

Dennoch DANKE für den TIPP

@ Franz-Peter,
ich dachte du bist im Urlaub Dann ein Extra DANKE das du dir die Zeit nimmst

Zitat

Zum einen darfst Du den Stepper nur starten wenn auch wirklich ein Befehl empfangen wurde. Also in dem if-Block mit der Abfrage auf einen erkannten Tastendruck


Da dachte ich das ich das so Programmiert habe

Zitat

wie reagiert deine FB auf längere Tastendrücke? Wenn sie da einen eigenen 'Wiederholcode' sendet ( den Du dann ja ignorierst ) ist alles ok.


Ja die sendet nach der ersten Zahlenreihe weitere immer gleiche die nicht berücksichtigt werden, also alles OK

Zitat

das Abschalten des enable solltest Du nicht über die Zeit machen.


An Pin 12 ist momentan der RST+SLP vom Treiber angeschlossen, deshalb die Pin Bezeichnung: T1Slp_PIN.... auf das ENable wollte ich warten bis das bei deinen MOBA TOOLS freigeschaltet wird...Im 1 Versuch habe ich das mit den delay Zeiten diese 1,7 ms Versucht da hatte ich auch 20ms eingetragen wollte aber 2 ms haben = Tippfehler von mir Mit den 20ms kam es aber zu keiner Bewegung des Motors...
Deshalb meine Frage ob da nicht geschweifte Klammern gesetzt werden müssen damit er nach der delay Zeit den Motor mit Stepps versorgt...??
Das nächste komische Verhalten war das am SlpPIN nur ganz kurz ein Signal vorhanden war, ich hatte mal eine LED dazu parallel angeschlossen.
Da dachte ich dass das Signal auf HIGH bleibt bis ein Neuer Befehl wieder LOW Schaltet...HMM komisch ist das schon...

Zitat

Du kannst abfragen, ob sich der Motor noch dreht


Wird da geprüft ob am Stepp PIN Signale ausgesendet werden ? Oder wie funktioniert das ?

Deinen Sketch werde ich mal ausprobieren, auch Ohne Arduino.h, und dann hier wieder Berichten.....
Ach ja : hätte ich doch fast vergessen:
Falls du schon in Urlaub bist, wünsche ich Dir eine schöne Zeit....

Und JA es war richtig Toll das sich mal was bewegt hat.....Dazu möchte ich nochmals Volker Danken!


Gruß Rainer bleibt gesund


 
ts250x
InterRegioExpress (IRE)
Beiträge: 475
Registriert am: 11.03.2017
Ort: Vorderpfalz
Gleise ROCO-Line ohne
Spurweite H0
Steuerung z21,Tablet, Multimaus
Stromart Digital


RE: Hilfe zu Arduino(UNO)Sketch gesucht für FB gefunden/ Danksagungen

#137 von Bodo , 17.08.2019 11:47

Hallo,

Zitat

Klar hätte das den Vorteil das sich der E-Prom die Torstellungen merken kann.

Ist nun nicht so, dass der Arduino das nicht könnte

Zitat

Wird da geprüft ob am Stepp PIN Signale ausgesendet werden ? Oder wie funktioniert das ?

Wenn die Lib nicht wüsste, dass noch Steps fehlen, würde sie ja keine senden - das braucht nicht separat geprüft zu werden . Eine Lib, die mit absoluten Positionen arbeiten kann, muss das "wissen".

Viele Grüße, Bodo


Die Freiheit des Menschen liegt nicht darin, dass er tun kann, was er will, sondern dass er nicht tun muss, was er nicht will. (Jean-Jacques Rousseau)

Meine Anlage - Meine Dauerbaustelle
Platinen für Modellbahn- und Arduino-Anwendungen


 
Bodo
InterCityExpress (ICE)
Beiträge: 2.471
Registriert am: 28.04.2005
Homepage: Link
Gleise C-Gleis, Lenz 0
Spurweite H0, 0
Steuerung MS2 & CS2
Stromart Digital


RE: Hilfe zu Arduino(UNO)Sketch gesucht für FB gefunden/ Danksagungen

#138 von ts250x , 17.08.2019 12:13

Hallo Bodo, Hallo Franz-Peter und Hallo an alle Mitleser,

@ Bodo, ich glaube bei Franz-Peters Moba-Tools ist da eine Einstellung mit set.Zero.
Falls du da einen anderen Vorschlag hast wie das Programmiert werden kann ....ich würde mich freuen das zu sehen

So nun noch ein kleiner Zwischenbericht zum Sketch.
Ich habe noch beim Öffnen die Abfrage eingebaut ... dann noch ein paar geschlossene Klammern gegen schließende Klammern getauscht......
Jetzt gibt der Compiler keine Fehlermeldung mehr aus.....
Zum Testen komme ich allerdings erst Heute Nachmittag....

Ich werde Berichten....


Gruß Rainer bleibt gesund


 
ts250x
InterRegioExpress (IRE)
Beiträge: 475
Registriert am: 11.03.2017
Ort: Vorderpfalz
Gleise ROCO-Line ohne
Spurweite H0
Steuerung z21,Tablet, Multimaus
Stromart Digital


RE: Hilfe zu Arduino(UNO)Sketch gesucht für FB gefunden/ Danksagungen

#139 von Bodo , 17.08.2019 12:52

Hallo,

Zitat

@ Bodo, ich glaube bei Franz-Peters Moba-Tools ist da eine Einstellung mit set.Zero.
Falls du da einen anderen Vorschlag hast wie das Programmiert werden kann ....ich würde mich freuen das zu sehen


set.Zero hat aber nichts mit dem EProm zu tun - set.zero setzt den Stepper-Nullpunkt während der Programmlaufzeit. Im EProm werden Werte gespeichert, die nach einem Neustart des Arduino wieder zur Verfügung stehen sollen. Eine Stepper-Position ins EProm zu schreiben, ist nur bedingt sinnvoll, da man den Motor im stromlosen Zustand verdrehen kann. Zum Speichern von CV-Werten von DCC-Dekodern ist es aber zum Beispiel sehr sinnvoll . Darüber nachzudenken lohnt sich aber erst, wenn Deine Tore so funktionieren, wie sie sollen. Ich wollte nur darauf hinweisen, dass es (auch auf dem Arduino) geht …

Viele Grüße, Bodo


Die Freiheit des Menschen liegt nicht darin, dass er tun kann, was er will, sondern dass er nicht tun muss, was er nicht will. (Jean-Jacques Rousseau)

Meine Anlage - Meine Dauerbaustelle
Platinen für Modellbahn- und Arduino-Anwendungen


 
Bodo
InterCityExpress (ICE)
Beiträge: 2.471
Registriert am: 28.04.2005
Homepage: Link
Gleise C-Gleis, Lenz 0
Spurweite H0, 0
Steuerung MS2 & CS2
Stromart Digital


RE: Hilfe zu Arduino(UNO)Sketch gesucht für FB gefunden/ Danksagungen

#140 von ts250x , 17.08.2019 13:55

Hallo Bodo,Hallo @ All,

Zitat

Im EProm werden Werte gespeichert, die nach einem Neustart des Arduino wieder zur Verfügung stehen sollen


Das wäre doch Sinnvoll

Zitat

Eine Stepper-Position ins EProm zu schreiben, ist nur bedingt sinnvoll, da man den Motor im stromlosen Zustand verdrehen kann.


Verdrehen wäre Theoretisch möglich Praktisch geht das nicht. Wegen der Spindel die ist so starr dass du da mit einem Werkzeug ran musst um da etwas zu verdrehen..

Zitat

Darüber nachzudenken lohnt sich aber erst, wenn Deine Tore so funktionieren, wie sie sollen.



Da hast Du meine Volle Zustimmung, aber wie schon zu Anfang geschrieben will ich nichts mit DCC Schalten .
Das soll bzw. MUSS absolut getrennt bleiben..

Zitat

ch wollte nur darauf hinweisen, dass es (auch auf dem Arduino) geht …


Ja OK , verstanden.... Danke dafür


Gruß Rainer bleibt gesund


 
ts250x
InterRegioExpress (IRE)
Beiträge: 475
Registriert am: 11.03.2017
Ort: Vorderpfalz
Gleise ROCO-Line ohne
Spurweite H0
Steuerung z21,Tablet, Multimaus
Stromart Digital


RE: Hilfe zu Arduino(UNO)Sketch gesucht für FB gefunden/ Danksagungen

#141 von ts250x , 17.08.2019 17:41

Hallo@ All,
wie versprochen die Rückmeldung.
Es funktioniert nicht
Zur Kontrolle ob der Treiber Ein -Aus geschaltet wird habe ich eine LED mit angeschlossen.
Beim 1. Tasten druck der FB geht die LED an der Motor dreht sich mit Anfahrrampe und Endrampe aber die LED bleibt an sprich der Treiber wird nicht abgeschaltet und der Motor wird Heiß
Hier mal der Sketch:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
 
#include <MobaTools.h>
#include <IRremote.h>
Stepper4 T1Stepper(200, A4988);
int T1Slp_PIN = 12;
int RECV_PIN = 13; //Pin am Arduino Nano für den IR Receiver
IRrecv irrecv(RECV_PIN); //Objekt initialisieren für die IR Übertragung
decode_results results;
 
void setup()
{
T1Stepper.attach( 10, 11 ); // Step und Dir-Pin
T1Stepper.setSpeedSteps( 200, 50 );
irrecv.enableIRIn(); //Dieser Befehl initialisiert den Infrarotempfänger.
pinMode(T1Slp_PIN, OUTPUT);
pinMode(RECV_PIN, INPUT); //Den IR Pin als Eingang deklarieren.
Serial.begin(9600); //Serielle kommunikation mit 9600 Baud beginnen.
}
 
void loop()
{
 
if (irrecv.decode(&results)) {
Serial.println (results.value, DEC);
if (results.value == 16724175) { // wenn der Infrarot Empfänger die Zahl erkennt
digitalWrite(12, HIGH);
//digitalWrite(T1Slp_PIN, HIGH);
//delay(20);
T1Stepper.doSteps(300); // Taste 1 macht 300 Schritte nach „rechts“
}
irrecv.resume(); {
if (!T1Stepper.moving() ) {
digitalWrite(12, LOW);
}
 
if (results.value == 16718055) { // Taste 2
digitalWrite(12, HIGH);
// digitalWrite(T1Slp_PIN, HIGH);
//delay(20);
T1Stepper.doSteps(-300); // macht 300 Schritte nach „links“
}
irrecv.resume(); {
if (!T1Stepper.moving() ) {
digitalWrite(12, LOW);
}
}
}
}
}
 



Die Vielen Klammern am Schluß waren Notwendig damit es keine Fehlermeldung gibt


Gruß Rainer bleibt gesund


 
ts250x
InterRegioExpress (IRE)
Beiträge: 475
Registriert am: 11.03.2017
Ort: Vorderpfalz
Gleise ROCO-Line ohne
Spurweite H0
Steuerung z21,Tablet, Multimaus
Stromart Digital


RE: Hilfe zu Arduino(UNO)Sketch gesucht für FB gefunden/ Danksagungen

#142 von volkerS , 17.08.2019 19:39

Hallo Rainer,
mit irrecv.resume(); wartet der Arduino doch auf die nächste Eingabe an der FB. Wieso steht der Befehl hinter dem Fahrbefehl des Steppers?
Dann kann doch nie
if (!T1Stepper.moving() ) {
digitalWrite(12, LOW);

ausgeführt werden.
Warum überhaupt if (!T1Stepper.moving() ) { ? Wenn diese Zeile abgearbeitet wird ist der Stepper doch mit seinen 300 Schritten längst fertig.
Volker


volkerS  
volkerS
ICE-Sprinter
Beiträge: 5.958
Registriert am: 14.10.2014


RE: Hilfe zu Arduino(UNO)Sketch gesucht für FB gefunden/ Danksagungen

#143 von MicroBahner , 17.08.2019 21:14

Hallo Rainer,
die Klammern muss man schon gezielt und bewusst setzen. Die beeinflussen den Programmablauf sehr wesentlich. Und so wie ich das in meinem Vorschlag gesetzt habe, solltest Du das auch übernehmen. Es stimmt schon was Volker sagt, das irrecv.resume(); gehört nur einmal an das Ende des Blockes.

Zitat

Warum überhaupt if (!T1Stepper.moving() ) { ? Wenn diese Zeile abgearbeitet wird ist der Stepper doch mit seinen 300 Schritten längst fertig.

Nein, die doSteps Anweisung ist nicht blockierend. Der Sketch läuft sofort weiter - parallel zur Bewegung des Steppers. Deshalb darf die ' if (!T1Stepper.moving() )' Anweisung auch nicht innerhalb des FB-Blockes stehen, sondern muss bei jedem loop-Durchlauf ausgeführt werden. So kann sie immer prüfen, ob die Bewegung abgeschlossen ist, und dann den Ausgang abschalten.

Insofern sollte Rainer sich schon an die Struktur meines obigen Sketch-Vorschlages halten.


viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'


 
MicroBahner
Metropolitan (MET)
Beiträge: 2.832
Registriert am: 28.11.2012
Ort: Mittelfranken
Gleise Tillig Elite
Steuerung Eigenbau
Stromart Analog


RE: Hilfe zu Arduino(UNO)Sketch gesucht für FB gefunden/ Danksagungen

#144 von ts250x , 18.08.2019 14:23

Hallo Franz-Peter, Hallo Volker,
Entschuldigt Bitte dass ich mich so spät melde, mein Rechner hat sich verabschiedet..... jetzt schreibe ich von dem Rechner meiner Frau..

Zitat

die Klammern muss man schon gezielt und bewusst setzen.


Ja absolute Zustimmung von mir, ich schreibe es mal so: Denn sie wissen nicht was sie tun.... das trifft es wohl am besten...

Zitat

Es stimmt schon was Volker sagt, das irrecv.resume(); gehört nur einmal an das Ende des Blockes.


OK, allerdings habe ich da ein Verständnis Problem: Wo fängt der BLOCK an und wo hört er auf.
Meine Erklärung für die beiden if (!T1Stepper.moving() )' abfragen war: das 1. Tor öffnet sich dann bleibt das für eine längere zeit offen.Deshalb soll der Treiber abgeschaltet werden..ich hoffe das einigermaßen verständlich ist um was es mir ging...

Zitat

nicht innerhalb des FB-Blockes stehen,


OK, aber wenn nur ein Tor einmal bewegt wird dann soll doch der Treiber ausgeschaltet werden... ich habe das so gelesen (den Sketch) dass erst abgeschaltet wird wenn beide Befehle (Tor auf und Tor zu) durchlaufen sind schaltet sich der Treiber ab......
Da habe ich wohl einen Denkfehler....

Ich wünsche allen einen schönen Sonntag.
Jetzt werde ich mich mal weiter um meinen Rechner kümmern müssen..


Gruß Rainer bleibt gesund


 
ts250x
InterRegioExpress (IRE)
Beiträge: 475
Registriert am: 11.03.2017
Ort: Vorderpfalz
Gleise ROCO-Line ohne
Spurweite H0
Steuerung z21,Tablet, Multimaus
Stromart Digital


RE: Hilfe zu Arduino(UNO)Sketch gesucht für FB gefunden/ Danksagungen

#145 von MicroBahner , 19.08.2019 17:34

Hallo Rainer,

Zitat

Denn sie wissen nicht was sie tun.... das trifft es wohl am besten...

Das solltest Du dringend ändern . Das richtige Setzen der Klammern ist essentiell für das richtige Funktionieren des Programms. Der Compiler prüft nur, ob es zu einer öffnenden auch die passende schließende Klammer gibt. Ob das auch sinnvoll und so gewollt ist, kann er nicht feststellen.

Zitat

Wo fängt der BLOCK an und wo hört er auf.

Da sind wir genau wieder bei unseren geschweiften Klammern. Der Block fängt bei der öffnenden an, und hört bei der zugehörigen schließenden auf. Natürlich musst Du von der Progrannlogik her festlegen, was ein Block ist und dementsprechend die Klammern setzen ( nicht andersherum ).
Welche Klammern rein formal zusammengehören, kannst Du feststellen, wenn Du den Cursor unmittelbar vor oder hinter eine Klammer setzt. Dann wird die zugehörige Klammer mit einem Kästchen umrandet. Ob die dann an der logisch richtigen Stelle steht, sagt dir die IDE allerdings nicht ...

Zitat

das 1. Tor öffnet sich dann bleibt das für eine längere zeit offen.Deshalb soll der Treiber abgeschaltet werden.

Das ist schon klar...

Zitat

ich habe das so gelesen (den Sketch) dass erst abgeschaltet wird wenn beide Befehle (Tor auf und Tor zu) durchlaufen sind schaltet sich der Treiber ab......
Da habe ich wohl einen Denkfehler....

Das mit dem Denkfehler ist wohl so .. . Ich vermute mal, dein Denkfehler ist, das Du meinst das Programm bliebe da stehen, wenn es die Anweisung an den Stepper abgesetzt hat. Dem ist aber nicht so. Das Programm läuft einfach weiter.
Es wird dann sofort die if-Abfrage nach Taste 2 ausgeführt. Die schlägt aber fehl ( weil Du ja Taste 1 gedrückt hast ) und der Block ( für Taste 2 ) hinter dem if wird nicht ausgeführt. Dann erreichst Du das Ende des Blockes von der Abfrage ob überhaupt eine Taste erkannt wurde ( da muss dann das resume stehen ). Im weiteren Verlauf kreist der Prozessor dann immer im loop, und solange Du keine weitere Taste an der Fernbedienung drückst, wird der gesamte Block von 'if (irrecv.decode(&results)) {....}' übersprungen. Der Stepper bewegt sich da aber noch, während das Programm im Kreis läuft. Deshalb muss die Abfrage, ob der Motor noch läuft außerhalb dieses Blockes ( mit den Tastenabfragen ) gemacht werden - sonst kommt die Abfrage gar nicht mehr dran.

Hast Du dir mein Tutorial mal angeschaut? Du musst dir das so vorstellen, dass der Prozessor ständig von einer Anweisung zur nächsten hüpft. Wenn eine If-Anweisung abgearbeitet wird, und das Ergebnis ist 'false' dann wird der ganze folgende Block {...} übersprungen und mit der Anweisung danach weitergemacht. Erreicht er das Ende von loop() wird wieder von vorne begonnen. Und das geht immer ohne Pause so weiter. Nur wenn Du ein delay() einfügst, bleibt er an der Stelle tatsächlich für die angegebene Zeit stehen.

P.S. was macht dein Rechner, geht er wieder?


viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'


 
MicroBahner
Metropolitan (MET)
Beiträge: 2.832
Registriert am: 28.11.2012
Ort: Mittelfranken
Gleise Tillig Elite
Steuerung Eigenbau
Stromart Analog


RE: Hilfe zu Arduino(UNO)Sketch gesucht für FB gefunden/ Danksagungen

#146 von ts250x , 20.08.2019 13:21

Hallo Franz-Peter, Hallo alle Mitleser,
Mein Rechner läuft wieder
Über den Grund des Ausfalls könnte ich viel schreiben, nur soviel,man sollte nach deinstallieren von Windows Updates unbedingt den Neustart durch führen!!

So nun geht es hier weiter:
Franz-Peter, ganz herzlichen Dank für deine Erklärungen
in der zwischen zeit habe ich auch meinen Gedankenfehler erkannt wegen der " if (!T1Stepper.moving() )" und deren Platzierung im Sketch..

Zitat

Das richtige Setzen der Klammern ist essentiell für das richtige Funktionieren des Programms


Wissen tue ich das, doch leider habe ich da so meine Fehlerhaften Gedanken wie das Programm abläuft.

Zitat

Welche Klammern rein formal zusammengehören, kannst Du feststellen, wenn Du den Cursor unmittelbar vor oder hinter eine Klammer setzt. Dann wird die zugehörige Klammer mit einem Kästchen umrandet.


Das habe ich auch schon festgestellt, auch wenn man an der Ersten Klammer neben der Zeilennummer das Symbol mit dem Mauszeiger anfährt werden die Striche zur dazugehörigen schleißenden Klammer angezeigt, deshalb habe ich dann die Vielen Schließenden Klammern gesetzt und!!
die Tasten Kombination von STRG+t ist dann wirklich mein Freund....

Momentan habe ich noch nicht Deinen Sketch getestet. das wird wohl erst Morgen statt finden ..... ich werde berichten...

Dann hätte ich noch eine Frage an Dich, wieso fährt der Stepper mit 300 Stepps diese 8,5 mm ? Eigentlich dürfte der doch nur 1,5 Umdrehungen machen??


Gruß Rainer bleibt gesund


 
ts250x
InterRegioExpress (IRE)
Beiträge: 475
Registriert am: 11.03.2017
Ort: Vorderpfalz
Gleise ROCO-Line ohne
Spurweite H0
Steuerung z21,Tablet, Multimaus
Stromart Digital


RE: Hilfe zu Arduino(UNO)Sketch gesucht für FB gefunden/ Danksagungen

#147 von MicroBahner , 20.08.2019 16:48

Zitat

Dann hätte ich noch eine Frage an Dich, wieso fährt der Stepper mit 300 Stepps diese 8,5 mm ? Eigentlich dürfte der doch nur 1,5 Umdrehungen machen??

Wo steht, dass der Stepper 200 Steps/Umdrehungen macht? Bei den Daten habe ich das nicht gelesen, und ich halte es für extrem unwahrscheinlich ( eher unmöglich ), dass das bei dem winz-Stepper so ist. 200 Steps/Umdr. sind eher Werte der größeren Stepper.
Wieviele Steps dein kleiner Stepper für eine Umdrehung benötigt, wirst Du ausprobieren müssen. Das dürfte wesentlich weniger sein.


viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'


 
MicroBahner
Metropolitan (MET)
Beiträge: 2.832
Registriert am: 28.11.2012
Ort: Mittelfranken
Gleise Tillig Elite
Steuerung Eigenbau
Stromart Analog


RE: Hilfe zu Arduino(UNO)Sketch gesucht für FB gefunden/ Danksagungen

#148 von ts250x , 20.08.2019 17:27

Hallo Franz-Peter,
die 200 Stepps kommen daher dass der Motor pro Stepp sich um 1,8° dreht, was wohl die meisten Stepper tun.
Ich sollte noch erwähnen das ich bisher keine Micro-Stepps eingestellt habe = Läuft der Motor im Vollstepp Modus.


Soweit mein Glaube: ich habe eben nochmal die beiden Typen recherchiert...... ich glaube ich brauche eine Neue Brille... die Dinger machen Pro Stepp 18° das erklärt dann die 300 Stepps.


Gruß Rainer bleibt gesund


 
ts250x
InterRegioExpress (IRE)
Beiträge: 475
Registriert am: 11.03.2017
Ort: Vorderpfalz
Gleise ROCO-Line ohne
Spurweite H0
Steuerung z21,Tablet, Multimaus
Stromart Digital


RE: Hilfe zu Arduino(UNO)Sketch gesucht für FB gefunden/ Danksagungen

#149 von ts250x , 20.08.2019 18:33

Hallo @ All,

Nun hat es mir doch keine Ruhe gelassen,der Sketch von Franz-Peter funktioniert

Per Versuch und Irrtum habe ich dann auch noch gelernt dass bei der Modifikation des Motors " T1Stepper.setSpeedSteps( 200, 50 );"
die "200" nicht für Stepps pro Umdrehung stehen sondern für die Geschwindigkeit mit der sich der Motor dreht...

Das einzigste was ich noch bemängeln muss: der Motor wird nach 2 Durchgängen direkt hintereinander sehr Warm.....
Das war bei den 20sec.delay nicht ...

Hat jemand eine Idee ??


Gruß Rainer bleibt gesund


 
ts250x
InterRegioExpress (IRE)
Beiträge: 475
Registriert am: 11.03.2017
Ort: Vorderpfalz
Gleise ROCO-Line ohne
Spurweite H0
Steuerung z21,Tablet, Multimaus
Stromart Digital


RE: Hilfe zu Arduino(UNO)Sketch gesucht für FB gefunden/ Danksagungen

#150 von ts250x , 21.08.2019 12:27

Hallo an Alle ,
vielleicht noch interessierten.
Nun habe ich den Sketch mal auf die 3 Tore + 3 Stände für LED`s erweitert.

Ich hoffe das ich die "Blöcke" Richtig eingeteilt habe : :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
 
#include <MobaTools.h>
#include <IRremote.h>
Stepper4 T1Stepper(200, A4988);
Stepper4 T2Stepper(200, A4988);
Stepper4 T3Stepper(200, A4988);
int T1Slp_PIN = 12;
int T2Slp_PIN = 9;
int T3Slp_PIN = 6;
int T1Led_PIN = 3;
int T2Led_PIN = 2;
int T3Led_PIN = 1;
int RECV_PIN = 13; //Pin am Arduino UNO für den IR Receiver
IRrecv irrecv(RECV_PIN); //Objekt initialisieren für die IR Übertragung
decode_results results;
 
void setup()
{
T1Stepper.attach( 10, 11 ); // Step und Dir-Pin
T1Stepper.setSpeedSteps( 200, 50 );
T2Stepper.attach( 7, 8 ); // Step und Dir-Pin
T2Stepper.setSpeedSteps( 200, 50 );
T3Stepper.attach( 4, 5 ); // Step und Dir-Pin
T3Stepper.setSpeedSteps( 200, 50 );
 
irrecv.enableIRIn(); //Dieser Befehl initialisiert den Infrarotempfänger.
pinMode(T1Slp_PIN, OUTPUT); // Treiber 1 EIN-Ausschalten
pinMode(T2Slp_PIN, OUTPUT); // Treiber 2 Ein-Ausschalten
pinMode(T3Slp_PIN, OUTPUT); // Treiber 3 Ein-Ausschalten
pinMode(3, OUTPUT); // LED`s Stand 1
pinMode(2, OUTPUT); // LED`s Stand 2
pinMode(1, OUTPUT); // LED`s Stand 3
pinMode(RECV_PIN, INPUT); //Den IR Pin als Eingang deklarieren.
Serial.begin(9600); //Serielle kommunikation mit 9600 Baud beginnen.
}
 
void loop()
{
 
if (irrecv.decode(&results)) {
Serial.println (results.value, DEC);
 
if (results.value == 16724175) { // wenn der Infrarot Empfänger die Zahl der Taste 1 erkennt
digitalWrite(T1Slp_PIN, HIGH);
T1Stepper.doSteps(300); // Taste 1 macht 300 Schritte nach „rechts“
}
if (results.value == 16718055) { // Taste 2
digitalWrite(T1Slp_PIN, HIGH);
 
T1Stepper.doSteps(-300); // macht 300 Schritte nach „links“
}
irrecv.resume();
 
if (!T1Stepper.moving() ) {
digitalWrite(T1Slp_PIN, LOW);
}
 
if (results.value == 16716015) { // Taste 4
digitalWrite(T2Slp_PIN, HIGH);
T2Stepper.doSteps(300); // Taste 4
}
if (results.value == 16726215) { // Taste 5
digitalWrite(T2Slp_PIN, HIGH);
T2Stepper.doSteps(-300); // Taste 5
}
irrecv.resume();
}
if (!T2Stepper.moving() ) {
digitalWrite(T2Slp_PIN, LOW);
}
 
if (results.value == 167288765) { // Taste 7
digitalWrite(T3Slp_PIN, HIGH);
T3Stepper.doSteps(300); // Taste 7
}
 
if (results.value == 16730805) { // Taste 8
digitalWrite(T3Slp_PIN, HIGH);
T3Stepper.doSteps(-300); // Taste 8
}
 
irrecv.resume();
 
if (!T3Stepper.moving() ) {
digitalWrite(T3Slp_PIN, LOW);
}
if (results.value == 16756815) { // Taste 3
digitalWrite(3, HIGH);
delay(500);
digitalWrite(3, LOW);
delay(250);
digitalWrite(3, HIGH);
delay(500);
digitalWrite(3, LOW);
delay(300);
digitalWrite(3, HIGH);
delay(750);
digitalWrite(3, LOW);
delay(500);
digitalWrite(3, HIGH);
delay(1000);
digitalWrite(3, LOW);
delay(300);
digitalWrite(3, HIGH);
 

}
if (results.value == 16734885) { // Taste 6
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
delay(250);
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
delay(300);
digitalWrite(2, HIGH);
delay(750);
digitalWrite(2, LOW);
delay(500);
digitalWrite(2, HIGH);
delay(1000);
digitalWrite(2, LOW);
delay(300);
digitalWrite(2, HIGH);
 

}
 
if (results.value == 16732845) { // Taste 9
digitalWrite(1, HIGH);
 
delay(500);
digitalWrite(1, LOW);
delay(250);
digitalWrite(1, HIGH);
delay(500);
digitalWrite(1, LOW);
delay(300);
digitalWrite(1, HIGH);
delay(750);
digitalWrite(1, LOW);
delay(500);
digitalWrite(1, HIGH);
delay(1000);
digitalWrite(1, LOW);
delay(300);
digitalWrite(1, HIGH);
 
}
 
if (results.value == 16738455) { // Taste 0 = Stand 3 Licht Aus
digitalWrite(1, LOW);
}
if (results.value == 16750695) { // Taste +100 = Stand 2 Licht Aus
digitalWrite(2, LOW);
}
if (results.value == 16756815) { // Taste +200 = Stand 1 Licht Aus
digitalWrite(3, LOW);
}
 
}
 

 



Es wäre Nett wenn sich das mal ein Experte anschauen- antun würde ops:


Gruß Rainer bleibt gesund


 
ts250x
InterRegioExpress (IRE)
Beiträge: 475
Registriert am: 11.03.2017
Ort: Vorderpfalz
Gleise ROCO-Line ohne
Spurweite H0
Steuerung z21,Tablet, Multimaus
Stromart Digital


   


  • Ähnliche Themen
    Antworten
    Zugriffe
    Letzter Beitrag
Xobor Einfach ein eigenes Forum erstellen
Datenschutz