Moin zusammen,
ich habe nun etwas Hass auf meine alte Baustelle.
Meiner erste Einfamilienhaus-Beleuchtugssteuerung hat am Anfang gut funktioniert und dann sollte die ganzen Häuser auf ein Modulbrett gebaut werden.
Und nun liegen die Häuser noch immer in den kleinen Karton, mir sind da einige Drahtbeschriftungen abhanden gekommen.
Das war mein Hasskomentar 2018 von einem schlecht ausgeführten Verdarhtungsversuch.
Heute habe ich Nägel mit Köpfe gemacht.
Jetzt kommt mein zweiter Versuch und da habe ich auch andere Steckverbindungen verarbeitet.
Wannenstecker die gleich einen Wiederstand aufgelötet bekommen haben, dann fällt auch das lästige Abkincken der WiederstandsPINs weg.
Dieses Stecksystem werde ich für alle meine Einfamilienhäuser beibehalten, einen Standard der mir die ganze Arbeit und Suche erleichter wird.
Nun habe ich 20 LEDs im Betrieb auch wenn ich dann zwei LEDs habe mit Dauerlicht, das ist nicht weiter schlimm.
Jetzt noch schnell der kleine Sketch und alles wird gut:
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
byte pwmFlimmerPin1=3; // PWM Pin für das "analoge" Flimmern
byte pwmFlimmerPin2=5; // PWM Pin für das "analoge" Flimmern
byte pwmFlimmerPin3=6; // PWM Pin für das "analoge" Flimmern
byte pwmFlimmerPin4=9; // PWM Pin für das "analoge" Flimmern
unsigned long flimmerStart,flimmerEnd; // Anfangs- und Endzeiten für das Flimmern
// LED Pins für das normale Blinken deklarieren
byte leds[] ={2,4, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19};
// LED Blinktakt in Millisekunden für diese Pins
long ledtakt[]={22000, 30330, 5000, 263050, 420050, 60000, 100000, 902010, 50000, 10000, 20000, 57000, 10000, 20000};
// Variablen zum Merken von millis()-Zeiten beim Schalten/Blinken
unsigned long ledtime[sizeof(leds)];
void setup() {
// Serial.begin(9600);
// hier werden die TV-PWMpins als Ausgang geschrieben
pinMode(pwmFlimmerPin1, OUTPUT);
pinMode(pwmFlimmerPin2, OUTPUT);
pinMode(pwmFlimmerPin3, OUTPUT);
pinMode(pwmFlimmerPin4, OUTPUT);
for (int i=0;i<sizeof(leds);i++)
{
pinMode(leds[i], OUTPUT);
ledtime[i]= -ledtakt[i]*9/10; // mit negativer 9 10 Ablaufzeit initialisieren
}
}
boolean milliSekundenTakt(long dauer, unsigned long &alterWert) {
// Parameter "dauer": Dauer einer Blinkphase (an bzw. aus)
// Parameter "alterWert": Variable zum Speichern des millis() Timers
// Rückgabewert: true wenn die Zeit bis zum nächsten Umschalten abgelaufen ist, sonst false
if (millis() - alterWert < dauer) return false;
while (millis() - alterWert >= dauer) alterWert+=dauer;
return true;
}
void blinkenImTakt() {
// Alle gleichmäßig blinkenden LEDs in ihrem eigenen Takt blinken lassen
for (int i=0;i<sizeof(leds);i++) // alle LEDs in einer Schleife durchgehen
{
if (milliSekundenTakt(ledtakt[i],ledtime[i])) // Takt für diese LED abgelaufen?
{
digitalWrite(leds[i],!digitalRead(leds[i])); // wenn ja ==> Umschalten
if (leds[i]==13 && digitalRead(leds[i])) // Pin-13 LED wurde gerade eingeschaltet
{
flimmerStart=ledtime[i]+4000; // Anfangszeit für das Flimmern setzen
flimmerEnd =ledtime[i]+ledtakt[i]-8000; // Endzeit für das Flimmern setzen
}
// Serial.print("Pin ");Serial.print(leds[i]);Serial.print(" = ");Serial.println(digitalRead(leds[i]));
}
}
}
void flimmernPwmPin1() {
// Die flimmernde LED im Zufallsmodus flimmern lassen
static unsigned long alterWert;
static int flimmerDauer=600;
static byte flimmerHelligkeit;
if (milliSekundenTakt(flimmerDauer,alterWert)) // Takt abgelaufen?
{
flimmerDauer=1+random(200); // neue Flimmerdauer als Zufallswert
if (millis()>flimmerStart && millis()<flimmerEnd)
{
flimmerHelligkeit=random(256); // neue Flimmerhelligkeit als Zufallswert
// Serial.println(flimmerHelligkeit);
}
else
flimmerHelligkeit=0; // Flimmern aus wenn falsche Zeit zum Flimmern
analogWrite(pwmFlimmerPin1, flimmerHelligkeit);
}
}
void flimmernPwmPin2() {
// Die flimmernde LED im Zufallsmodus flimmern lassen
static unsigned long alterWert;
static int flimmerDauer=400;
static byte flimmerHelligkeit;
if (milliSekundenTakt(flimmerDauer,alterWert)) // Takt abgelaufen?
{
flimmerDauer=1+random(200); // neue Flimmerdauer als Zufallswert
if (millis()>flimmerStart && millis()<flimmerEnd )
{
flimmerHelligkeit=random(256); // neue Flimmerhelligkeit als Zufallswert
// Serial.println(flimmerHelligkeit);
}
else
flimmerHelligkeit=0; // Flimmern aus wenn falsche Zeit zum Flimmern
analogWrite(pwmFlimmerPin2, flimmerHelligkeit);
}
}
void flimmernPwmPin3() {
// Die flimmernde LED im Zufallsmodus flimmern lassen
static unsigned long alterWert;
static int flimmerDauer=200;
static byte flimmerHelligkeit;
if (milliSekundenTakt(flimmerDauer,alterWert)) // Takt abgelaufen?
{
flimmerDauer=1+random(200); // neue Flimmerdauer als Zufallswert
if (millis()>flimmerStart && millis()<flimmerEnd)
{
flimmerHelligkeit=random(256); // neue Flimmerhelligkeit als Zufallswert
// Serial.println(flimmerHelligkeit);
}
else
flimmerHelligkeit=0; // Flimmern aus wenn falsche Zeit zum Flimmern
analogWrite(pwmFlimmerPin3, flimmerHelligkeit);
}
}
void flimmernPwmPin4() {
// Die flimmernde LED im Zufallsmodus flimmern lassen
static unsigned long alterWert;
static int flimmerDauer=800;
static byte flimmerHelligkeit;
if (milliSekundenTakt(flimmerDauer,alterWert)) // Takt abgelaufen?
{
flimmerDauer=1+random(200); // neue Flimmerdauer als Zufallswert
if (millis()>flimmerStart && millis()<flimmerEnd)
{
flimmerHelligkeit=random(256); // neue Flimmerhelligkeit als Zufallswert
// Serial.println(flimmerHelligkeit);
}
else
flimmerHelligkeit=0; // Flimmern aus wenn falsche Zeit zum Flimmern
analogWrite(pwmFlimmerPin4, flimmerHelligkeit);
}
}
void loop() {
blinkenImTakt();
flimmernPwmPin1();
flimmernPwmPin2();
flimmernPwmPin3();
flimmernPwmPin4();
}
Viel Spass beim Bauen und Basteln!
Bis bald Gruß
Karsten