Servo Decoder und Status LED

Moin,
ich habe ein kleines Problem mit meinem Servodecoder. Gesteuert über ein Nano V3, 6 Servos möglich, dazu 10 LED Anschlüsse über die HDR M2.54 Stecker (6 Davon sind mit der programmierten Endstellung verknüpft).
Sprich wenn einer der Servos, Stellung A startet geht diese ON und leuchtet bis der Servo in Stellung B wechselt.
Die Servos laufen einwandfrei, jedoch habe ich das Problem das nur die ersten 3 LED super funktionieren, jedoch ab dem Schalten der 4. LED schalten plötzliche alle LED auf ON.
Abschalten der einzelnen LED ist dann wieder durch das drücken einzelnend aller Servos auf B möglich. Die LED werden via INPUT geschaltet da die LED 5V mit Vorwiederstand über extern Strom versorgt werden, dank dem integrierten Spannungswandler.

  • Wie kann das passieren das mehrere LED auf einmal angehen können?
  • ich hatte die LED auch schon über Ground beschaltet (Output), habe aber das gleiche Problem.

Vielen Dank schon mal Euch und ein schönes Wochenende.

Hier ein Auszug aus dem Sketch:

Servo W1; //Weiche 1
Servo W2; //Weiche 2
#define LED1 7
#define LED2 8
if(Addr == 6) {
if(Direction == 0) {
digitalWrite(LED1, LOW); //LED1 OFF
W1.attach(5); //Servo auf Pin 9 aktivieren
W1.write(0); //Servo auf 0° stellen
delay(500); //warten bis Servo fertig ist
W1.detach(); //Servo deaktivieren
} else {
digitalWrite(LED1, HIGH); //LED1 ON
W1.attach(5); //Servo auf Pin 9 aktivieren
W1.write(40); //Servo auf 20° stellen
delay(500); //warten bis Servo fertig ist
W1.detach(); //Servo deaktivieren
}
}
if(Addr == 7) {
if(Direction == 0) {
digitalWrite(LED2, LOW); //LED1 OFF
W1.attach(6); //Servo auf Pin 9 aktivieren
W1.write(0); //Servo auf 0° stellen
delay(500); //warten bis Servo fertig ist
W1.detach(); //Servo deaktivieren
} else {
digitalWrite(LED2, HIGH); //LED1 ON
W1.attach(6); //Servo auf Pin 9 aktivieren
W1.write(30); //Servo auf 20° stellen
delay(500); //warten bis Servo fertig ist
W1.detach(); //Servo deaktivieren
}
}

You posted in the international part of the forum. In this part you have to post in english.

Du hast im internationalen Bereich des Forums gepostet, hier muss englisch geschrieben werden. Wenn Du in Deutsch diskutieren willst, lass den Post bitte in den deutschen Teil verschieben.

Und lies dir diesen post durch, um zu lernen, wie man hier am besten Hilfe bekommt:
https://forum.arduino.cc/t/wie-man-dieses-forum-benutzt-bitte-lesen/902274/2

Auschnitte aus einem Sketch helfen in fast allen Fällen nicht weiter. Poste den ganzen Sketch, und vergiss bitte die Code-Tags nicht.

Hallo MicroBahner,

Danke Dir für die Antwort! Wie kann ich dies verschieben?

Du selbst gar nicht. Aber über das Fähnchen unten kannst Du einen Moderator bitten dies zu tun ( ich hab das jetzt schon mal für dich gemacht :wink: )

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden.
Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.
mfg ein Moderator.

Hey Super! Danke. ich bin gerade dabei es neu und Ordentlich zu schreiben. VG, Peter

Aber mach bitte keinen neuen Thread dafür auf - Doppelpostings werden nicht gern gesehen.
Poste es einfach hier. Du bist ja jetzt im richtigen Bereich :sunglasses:

Moin und nun nochmal ausführlicher. Hoffe habe nix vergessen.

ich habe ein kleines Problem mit meinem Servodecoder. Gesteuert über ein Nano V3, 6 Servos möglich, dazu 10 LED Anschlüsse über die HDR M2.54 Stecker (6 Davon sind mit der programmierten Endstellung verknüpft).
Sprich wenn einer der Servos, Stellung A startet geht diese ON und leuchtet bis der Servo in Stellung B wechselt.
Die Servos laufen einwandfrei, jedoch habe ich das Problem das nur die ersten 3 LED super funktionieren, jedoch ab dem Schalten der 4. LED schalten plötzliche alle LED auf ON.
Abschalten der einzelnen LED ist dann wieder durch das drücken einzelnend aller Servos auf B möglich. Die LED werden via INPUT geschaltet da die LED 5V mit Vorwiederstand über extern Strom versorgt werden, dank dem integrierten Spannungswandler.

  • Wie kann das passieren das mehrere LED auf einmal angehen können?
  • ich hatte die LED auch schon über Ground beschaltet (Output), habe aber das gleiche Problem.

Hier der Sketch:

#include <NmraDcc.h>
#include <Servo.h>

#define DCC_PIN 2
Servo W1;                    //Weiche 1
Servo W2;                    //Weiche 2
Servo W3;                    //Weiche 3
Servo W4;                    //Weiche 4
Servo W5;                    //Weiche 5
Servo W6;                    //Weiche 6
#define LED1 7
#define LED2 8
#define LED3 12
#define LED4 13
#define LED5 A0
#define LED6 A1
#define LED7 A2
#define LED8 A3
#define LED9 A4
#define LED10 A5

NmraDcc Dcc;

void notifyDccAccTurnoutOutput(uint16_t Addr, uint8_t Direction, uint8_t OutputPower) {

  if(Addr == 6) {
    if(Direction == 0) {
      digitalWrite(LED1, LOW);                  //LED1 OFF
      W1.attach(3);                             //Servo auf Pin 3 aktivieren
      W1.write(0);                              //Servo auf 0° stellen
      delay(500);                               //warten bis Servo fertig ist
      W1.detach();                              //Servo deaktivieren      
    } else {
      digitalWrite(LED1, HIGH);                 //LED1 ON
      W1.attach(3);                             //Servo auf Pin 3 aktivieren
      W1.write(40);                             //Servo auf 20° stellen
      delay(500);                               //warten bis Servo fertig ist
      W1.detach();                              //Servo deaktivieren    
    }
  }
  if(Addr == 7) {
    if(Direction == 0) {
      digitalWrite(LED2, LOW);                  //LED2 OFF  
      W1.attach(5);                             //Servo auf Pin 5 aktivieren
      W1.write(0);                              //Servo auf 0° stellen
      delay(500);                               //warten bis Servo fertig ist
      W1.detach();                              //Servo deaktivieren     
    } else {
      digitalWrite(LED2, HIGH);                 //LED2 ON
      W1.attach(5);                             //Servo auf Pin 5 aktivieren
      W1.write(30);                             //Servo auf 20° stellen
      delay(500);                               //warten bis Servo fertig ist
      W1.detach();                              //Servo deaktivieren    
    }
  }
  if(Addr == 8) {
    if(Direction == 0) {
      digitalWrite(LED3, LOW);                  //LED3 OFF
      W1.attach(6);                             //Servo auf Pin 6 aktivieren
      W1.write(0);                              //Servo auf 0° stellen
      delay(500);                               //warten bis Servo fertig ist
      W1.detach();                              //Servo deaktivieren      
    } else {
      digitalWrite(LED3, HIGH);                 //LED3 ON
      W1.attach(6);                             //Servo auf Pin 6 aktivieren
      W1.write(40);                             //Servo auf 20° stellen
      delay(500);                               //warten bis Servo fertig ist
      W1.detach();                              //Servo deaktivieren    
    }
  }
  if(Addr == 9) {
    if(Direction == 0) {
      digitalWrite(LED4, LOW);                  //LED4 OFF
      W1.attach(9);                             //Servo auf Pin 9 aktivieren
      W1.write(0);                              //Servo auf 0° stellen
      delay(500);                               //warten bis Servo fertig ist
      W1.detach();                              //Servo deaktivieren      
    } else {
      digitalWrite(LED4, HIGH);                 //LED4 ON
      W1.attach(9);                             //Servo auf Pin 9 aktivieren
      W1.write(40);                             //Servo auf 20° stellen
      delay(500);                               //warten bis Servo fertig ist
      W1.detach();                              //Servo deaktivieren    
    }
  }
  if(Addr == 10) {
    if(Direction == 0) {
      digitalWrite(LED5, LOW);                  //LED5 OFF
      W1.attach(10);                            //Servo auf Pin 10 aktivieren
      W1.write(0);                              //Servo auf 0° stellen
      delay(500);                               //warten bis Servo fertig ist
      W1.detach();                              //Servo deaktivieren      
    } else {
      digitalWrite(LED5, HIGH);                 //LED5 ON
      W1.attach(10);                            //Servo auf Pin 10 aktivieren
      W1.write(40);                             //Servo auf 20° stellen
      delay(500);                               //warten bis Servo fertig ist
      W1.detach();                              //Servo deaktivieren    
    }
  }
  if(Addr == 11) {
    if(Direction == 0) {
      digitalWrite(LED6, LOW);                  //LED6 OFF
      W1.attach(11);                            //Servo auf Pin 11 aktivieren
      W1.write(0);                              //Servo auf 0° stellen
      delay(500);                               //warten bis Servo fertig ist
      W1.detach();                              //Servo deaktivieren      
    } else {
      digitalWrite(LED6, HIGH);                 //LED6 ON
      W1.attach(11);                            //Servo auf Pin 11 aktivieren
      W1.write(40);                             //Servo auf 20° stellen
      delay(500);                               //warten bis Servo fertig ist
      W1.detach();                              //Servo deaktivieren    
    }
  }
  if(Addr == 12) {
    if(Direction == 0) {
      digitalWrite(LED7, LOW);                  //LED7 OFF
      digitalWrite(LED8, HIGH);                 //LED8 ON
    } 
    else {
      digitalWrite(LED7, HIGH);                 //LED7 ON
      digitalWrite(LED8, LOW);                  //LED8 OFF 
    }
  }
    if(Addr == 13) {
    if(Direction == 0) {
      digitalWrite(LED9, LOW);                  //LED9 OFF
      digitalWrite(LED10, HIGH);                //LED10 ON
    } 
    else {
      digitalWrite(LED9, HIGH);                 //LED9 ON
      digitalWrite(LED10, LOW);                 //LED10 OFF 
    }
  }
    
  Serial.print("Addr: "); Serial.println(Addr);
  Serial.print("Direction: "); Serial.println(Direction);
  Serial.print("OutputPower: "); Serial.println(OutputPower);
  Serial.println("--------------------");
}

void setup() {

  Serial.begin(115200);
  
  Dcc.pin(digitalPinToInterrupt(DCC_PIN), DCC_PIN, false);
  Dcc.init(MAN_ID_DIY, 1, FLAGS_DCC_ACCESSORY_DECODER | FLAGS_OUTPUT_ADDRESS_MODE, 0);
}

void loop() {

  Dcc.process();
}

Vielen Dank schon mal Euch und ein schönes Wochenende.

Anbei der Schaltplan und die Teileliste:

ID Name Designator Footprint Quantity Manufacturer Part
1 16V 21V~= CONN-TH_2P-P5.00_WJ301V-5.00-2P 1 WJ301V-5.0-2P
2 220uF C1,C2 CAP-SMD_BD8.0-L8.3-W8.3-FD 2 -
3 MB10S D2,D3 MBS_L4.7-W4.0-P2.50-LS7.0-BL 2 MB10S
4 1N4148 D4 DO-35_BD2.0-L4.0-P8.00-D0.5-FD 1 1N4148
5 DCC/In DCC CONN-TH_2P-P5.00_WJ301V-5.00-2P 1 WJ301V-5.0-2P
6 HDR-F-2.54_1x15 H3,H4 HDR-F-2.54_1X15 2
7 HDR-M-2.54_2x10 J1 HDR-M-2.54_2X10 1
8 ORH-G35A LEARN,POWER LED0805-R-RD 2 ORH-G35A
9 TS3625A-HT PROGRAM SW-SMD_L6.1-W3.7-LS7.9 1 TS3625A-HT
10 330 R1,R5,R6,R7,R8,R9,R10,R11,R12,R13,R14,R15 R0805 12 RMC1/10K331FTP
11 1,8k R2 R0805 1 0805W8J0182T5E
12 10k R3,R4 R0805 2 SDNT2012X103J3950HTF
13 HDR-M-2.54_1x3 S1,S2,S3,S4,S5,S6 HDR-M-2.54_1X3 6
14 6N137 U2 DIP-8_L10.0-W6.5-P2.54-LS7.6-BL 1 6N137
15 PJ7805TE U15 TO-252-2_L6.6-W6.1-P4.57-LS9.9-BR-CW 1 PJ7805TE
![image 690x207](upload://jfWXFf63zz4IuRi4gHj2pwAt8QV.png)

Hier der Sketch:

Es funktioniert! kein Plan warum es jetzt geht?!

Wenn Du Led's an einem Pin betreiben willst, musst Du den Pin immer auf OUTPUT stellen. Mit INPUT kann das nicht ordentlich funktionieren, da schaltest Du mit digitalWrite nur den internen PullUP Widerstand ein bzw aus.

Ah ok, ich hatte es so verstanden wenn ich gegen Ground schalte dann auf OUTPUT und wenn ich gegen 5V (+) schalte dann auf INPUT.

Anfängerprobleme...

Auf jedenfall plötzlich geht es.. keine Ahnung was da los war. Seit Tagen mehrmals geladen und Probiert. Auf der Testanlage zuhause ist das ständig passiert. kann das auch an der Versorgung liegen, da ich bei dem test hier nur den einen Decoder angeschlossen habe?

Testkreis hat 4 LED Decoder und 1x 2-fach Servo und den 6 FachServo aus dem thread.
2Ah bei 12v ist die Spannungsversorgung. + ein Zug in Spur N fahrend?
Rechtschreibung bitte nicht beachten :slight_smile:

Ob Du die Led's gegen +5V schaltest oder gegen Gnd macht nur den Unterschied ob sie leuchten wenn der OUTPUT LOW ist oder ob sie leuchten wenn der OUTPUT HIGH ist.
Ist der Pin auf INPUT geschaltet kann da eigentlich gar kein nennenswerter Strom fließen.

P.S. geht es dir hier ums Programmieren lernen, oder nur darum einen funktionierenden Decoder zu bekommen? Wenn's hauptsächlich um einen Decoder geht, könntest Du dir auch meinen DIY-Decoder anschauen. Der ist sehr flexibel zu konfigurieren und da laufen die Weichen Servos auch langsam um und nicht immer mit 'Full speed', was die Mechanik schont :wink:
Du solltest dich aber auf jeden Fall auch mal mit Arrays beschäftigen, vor allem wenn's dir ums Programmieren Lernen geht. Das Wissen dazu ist aber auch bei der Konfiguration des DIY-Decoders recht nützlich :wink:

Cool, Danke Dir!

Und korrigiere, das Problem besteht weiterhin noch.

Naja, man verzweifelt schon wenn das nicht Ordnungsgemäß läuft...

ich befasse mich mal mit deinem Decoder genauer. Danke vielmals für die Hilfe und ein schönes Wochenende wünsche ich allen!

Stell die LED-Pins auf jeden Fall mal auf OUTPUT. Erst dann kann man weiter sehen.