Hallo,
seit gestern beschäftige ich mich mit Arduino, da ich für meine Regalanlage "TimeWaster" mit Servos die Weichen (9 Stück) und auch die Entkuppler (11 Stück) ansteuern will. Die Herzstückpolarisation übernehmen die "DCC80 Autofrog"-Teile von Gaugemaster.
Hier will ich primär über ein Taster-Stellpult das ganze schalten. Eine DCC-Anbindung evtl. später.
Ich habe inzwischen mehrere Arduinos in meinem Fundus:
- Mega (inkl. Starterkit zum lernen, die Grundlektionen habe ich März 2016 mal durchgespielt)
- Nano
- Uno aus China
- Uno R3 aus China
Gestern habe ich die Treiber installiert und kann nun alle 4 Arten ansprechen.
Heute habe ich dann mit der Weichensteuerung angefangen und bin damit auch soweit fertig.
- Die Weichen werden mittels 2 Tastern gesteuert
- 2 LED's werden dann auf dem Gleisbild anzeigen, welcher Taster zuletzt betätigt wurde
Dank den MobaTools (vielen Dank für die Arbeit!) konnte ich die schöne langsame Stellzeit des Servos realisieren.
Es gibt noch ein paar Punkte die man bestimmt verbessern kann, aber erstmal eins nach dem anderen...
Nachdem die Weichensteuerung so gut geklappt hat steht mein Entschluß fest, die 11 Entkupplungsteile auch mit Servos zu realisieren.
- Diese werden jeweils über einen Taster betätigt und sollen x Sekunden ausfahren und danach wieder in den Ruhezustand fahren.
Die delay-Funktion möchte ich nicht verwenden, da sonst das ganze Programm unterbrochen wird. Deshalb möchte ich den "EggTimer" verwenden.
Aber damit komme ich irgendwie nicht klar (ich bin nicht der Programmierer...)
Hier mal der bisherige Sketch:
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
#include <MobaTools.h>
Servo8 servoW07; //Weiche07
Servo8 servoE08; //Entkuppler08
EggTimer myTimerE08; //Entkuppler sollen 5 sec. aktiv sein
const byte servoE08pin=A0;
const byte buttonE08pin=2; //entkuppeln
const byte servoW07pin=A1;
const byte buttonW07Apin=A2; //geradeaus
const byte buttonW07Bpin=A3; //abbiegen
const byte ledW07Apin=A4; //geradeaus
const byte ledW07Bpin=A5; //abbiegen
byte buttonStatusW07A=0;
byte buttonStatusW07B=0;
byte buttonStatusE08=0;
void setup() {
pinMode(buttonW07Apin, INPUT);
pinMode(buttonW07Bpin, INPUT);
pinMode(ledW07Apin, OUTPUT);
pinMode(ledW07Bpin, OUTPUT);
servoW07.attach(servoW07pin);
servoW07.setSpeed(5);
pinMode(buttonE08pin, INPUT);
servoE08.attach(servoE08pin);
servoE08.setSpeed(20);
}
void loop() {
buttonStatusW07A=digitalRead(buttonW07Apin);
buttonStatusW07B=digitalRead(buttonW07Bpin);
if (buttonStatusW07A == HIGH)
{
digitalWrite(ledW07Apin, HIGH);
digitalWrite(ledW07Bpin, LOW);
servoW07.write(80);
}
else
{
if (buttonStatusW07B == HIGH)
{
digitalWrite(ledW07Bpin, HIGH);
digitalWrite(ledW07Apin, LOW);
servoW07.write(110);
}
else
{
}
}
buttonStatusE08=digitalRead(buttonE08pin);
if (buttonStatusE08 == HIGH) //wenn der Entkuppler-Taster betätigt wird...
{
myTimerE08.setTime(5000); //sollte der Timer auf 5 Sekunden gestellt werden und starten...
if (myTimerE08.running()==true) //...und solange der Timer läuft...
{
servoE08.write(110); //... soll das Servo auf 110 Grad (Entluppeln) gehen...
}
else
{
servoE08.write(75); //...ansonsten auf 75 Grad (Ruhezustand)
}
}
else
{
}
}
Das wäre erstmal das größte Problem...
Weitere Fragen habe ich schon, aber eins nach dem anderen...