21
Planning modelbaan / Re: Klein en simpel rangeerbaantje
« Laatste bericht door Bert Gepost op 3 augustus 2025, 12:45:12 »En dan een sketch om hem DCC aan te sturen
Met uitleg:
Hoe werkt het?**
1. **DCC-adres instellen**
- Het DCC-adres van de servo is standaard `3` (aanpasbaar via `#define DCC_ADDR`).
- Gebruik een DCC-centrale (zoals Rocrail, JMRI of een DCC-command station) om commando's te sturen.
2. **Commando's via DCC-functies**
- **F1 (Aan/Uit)** → Stelt de **beginhoek** in (0-180°).
- **F2 (Aan/Uit)** → Stelt de **eindhoek** in (0-180°).
- **F3 (Aan)** → Start de beweging van begin- naar eindstand.
3. **Snelheid aanpassen**
- De snelheid is handmatig instelbaar in de code (`int snelheid = 15;`).
---
### **Benodigdheden**
- **DCC Decoder** (zoals een Arduino met DCC-interface of een standaard DCC-accessoire-decoder).
- **Servo** (aangesloten op de ingestelde pin, standaard **Pin 9**).
- **DCC Command Station** (bijv. Digitrax, Lenz, Roco).
### **Mogelijke uitbreidingen**
- Meerdere servos aansturen met verschillende DCC-adressen.
- Snelheid instelbaar maken via DCC (bijv. via F4).
- Feedback geven naar de centrale (bijv. via RailCom).
Code: [Selecteer]
#include <Servo.h>
#include <DCC_Decoder.h>
#define SERVO_PIN 9 // Pin waar de servo op is aangesloten
#define DCC_ADDR 3 // DCC-adres voor deze servo (standaard = 3)
Servo mijnServo;
// Instelbare parameters via DCC
int beginHoek = 0; // Standaard beginhoek (0°)
int eindHoek = 90; // Standaard eindhoek (90°)
int snelheid = 15; // Snelheid in ms per graad
int huidigePositie = 0; // Huidige positie van de servo
void setup() {
Serial.begin(115200);
Serial.println("DCC-gestuurde Servo Controller");
mijnServo.attach(SERVO_PIN);
mijnServo.write(beginHoek); // Startpositie instellen
// DCC-decoder initialiseren
DCC.SetBasicAccessoryDecoderPacketHandler(DCCPacketHandler, true);
DCC.SetupDecoder(0x00, 0x00, 0); // Basis DCC-instellingen
Serial.println("Wacht op DCC-commando's...");
}
void loop() {
DCC.loop(); // DCC-decoder bijwerken
}
// Verwerkt DCC-commando's
void DCCPacketHandler(int adres, int functie, bool direction, bool power) {
if (adres != DCC_ADDR) return; // Alleen reageren op het juiste DCC-adres
if (functie == 1) { // Functie F1: Stel beginhoek in (0-180)
beginHoek = map(direction ? 1 : 0, 0, 1, 0, 180);
Serial.print("Beginhoek ingesteld op: ");
Serial.println(beginHoek);
}
else if (functie == 2) { // Functie F2: Stel eindhoek in (0-180)
eindHoek = map(direction ? 1 : 0, 0, 1, 0, 180);
Serial.print("Eindhoek ingesteld op: ");
Serial.println(eindHoek);
}
else if (functie == 3) { // Functie F3: Start beweging
beweegServo();
}
}
// Beweeg de servo van begin- naar eindpositie
void beweegServo() {
Serial.println("Beweging gestart...");
if (beginHoek < eindHoek) {
// Naar boven bewegen
for (huidigePositie = beginHoek; huidigePositie <= eindHoek; huidigePositie++) {
mijnServo.write(huidigePositie);
delay(snelheid);
}
} else {
// Naar beneden bewegen
for (huidigePositie = beginHoek; huidigePositie >= eindHoek; huidigePositie--) {
mijnServo.write(huidigePositie);
delay(snelheid);
}
}
Serial.println("Beweging voltooid");
}
Met uitleg:
Hoe werkt het?**
1. **DCC-adres instellen**
- Het DCC-adres van de servo is standaard `3` (aanpasbaar via `#define DCC_ADDR`).
- Gebruik een DCC-centrale (zoals Rocrail, JMRI of een DCC-command station) om commando's te sturen.
2. **Commando's via DCC-functies**
- **F1 (Aan/Uit)** → Stelt de **beginhoek** in (0-180°).
- **F2 (Aan/Uit)** → Stelt de **eindhoek** in (0-180°).
- **F3 (Aan)** → Start de beweging van begin- naar eindstand.
3. **Snelheid aanpassen**
- De snelheid is handmatig instelbaar in de code (`int snelheid = 15;`).
---
### **Benodigdheden**
- **DCC Decoder** (zoals een Arduino met DCC-interface of een standaard DCC-accessoire-decoder).
- **Servo** (aangesloten op de ingestelde pin, standaard **Pin 9**).
- **DCC Command Station** (bijv. Digitrax, Lenz, Roco).
### **Mogelijke uitbreidingen**
- Meerdere servos aansturen met verschillende DCC-adressen.
- Snelheid instelbaar maken via DCC (bijv. via F4).
- Feedback geven naar de centrale (bijv. via RailCom).