Hallo, ich habe für eine Seekarte meinen Arduino Duemilenova gem. nachstehendem Sketch mit den original Taktfrequenzen der wesentlichen Leuchttürme konfiguriert.
/*
0 1 gr. Leuchtturm Borkum 1 Taktung: Fl (2) 12s
1 2 Fischerbalje 4 Taktung: Oc (2) 16s
2 3 Juister Memmertfeuer Taktung: Oc (2) 14s
3 4 Campen Taktung: Fl 5s, Fl(4) 15s
4 8 Norderney-Seefeuer Taktung: Fl (3) 12s
5 9 Helgoland Taktung: Fl 5s w
6 10 Helgoland-Düne Taktung: Iso 4s
7 11 Wooge neuer LT 2 Taktung: Fl 5s r
8 13 Arngast Taktung: Fl (2) 9s/Ubr. 6s
9 14 Tegeler Plate Taktung: Oc (3) 12s
10 16 Robbenplate Taktung: Oc 6s
11 17 Kleiner Preuße Taktung: Iso 5s
12 19 Neuwerk Taktung: LFl (3) 20s
13 20 Großerpater Taktung: Iso 4s
14 22 BHV Unterfeuer Minarett 2 Taktung: Iso 4s
15 23 BHV Oberfeuer Loschenturm 3 Taktung: Iso 4s
*/
#include <MsTimer2.h>
uint8_t setOutput(uint8_t pin) {
pinMode(pin, OUTPUT);
return 0;
}
template <uint8_t led, uint32_t d1, uint32_t d2, uint32_t d3, uint32_t d4,
uint32_t d5, uint32_t d6, uint32_t d7, uint32_t d8>
void light_my_fire() {
static uint32_t phase = setOutput(led);
phase = phase < d1+d2+d3+d4+d5+d6+d7+d8-1? phase+1: 0;
digitalWrite(led, phase < d1 ? HIGH:
phase < d1+d2 ? LOW:
phase < d1+d2+d3 ? HIGH:
phase < d1+d2+d3+d4 ? LOW:
phase < d1+d2+d3+d4+d5 ? HIGH:
phase < d1+d2+d3+d4+d5+d6 ? LOW:
phase < d1+d2+d3+d4+d5+d6+d7 ? HIGH:
LOW);
}
// Schaltfolge: LED ein aus ein aus ein aus ein aus
void blink() {
light_my_fire< 0, 200, 2800, 200, 8800, 0, 0, 0, 0>(); // gr. LT Borkum Fl (2) 12s
light_my_fire< 1, 0, 1000, 5000, 1000, 9000, 0, 0, 0>(); // Fischerbalje 4 Oc (2) 16s
light_my_fire< 2, 0, 1000, 4000, 1000, 8000, 0, 0, 0>(); // Juister Memmertfeuer Oc (2) 14s
light_my_fire< 3, 700, 2300, 700, 2300, 700, 2300, 700, 5300>(); // Campen Fl(4) 15s
light_my_fire< 4, 200, 2800, 200, 2800, 200, 5800, 0, 0>(); // Norderney Fl (3) 12s
light_my_fire< 5, 400, 4600, 0, 0, 0, 0, 0, 0>(); // Helgoland Fl 5s
light_my_fire< 6, 2000, 2000, 0, 0, 0, 0, 0, 0>(); // Helgoland-Düne Iso 4s
light_my_fire< 7, 400, 4600, 0, 0, 0, 0, 0, 0>(); // Wooge neuer LT Fl 5s, r
light_my_fire< 8, 200, 2800, 200, 7800, 4000, 0, 0, 0>(); // Arngast Fl (2) 9s/Ubr. 6s
light_my_fire< 9, 0, 1000, 2000, 1000, 2000, 1000, 5000, 0>(); // Tegeler Plate Oc (3) 12s
light_my_fire<10, 0, 2000, 4000, 0, 0, 0, 0, 0>(); // Robbenplate Oc 6s
light_my_fire<11, 2500, 2500, 0, 0, 0, 0, 0, 0>(); // Kleiner Preuße Iso 5s
light_my_fire<12, 2000, 4000, 2000, 4000, 2000, 6000, 0, 0>(); // Neuwerk LFl (3) 20s
light_my_fire<13, 2000, 2000, 0, 0, 0, 0, 0, 0>(); // Großpater Iso 4s
light_my_fire<14, 2000, 2000, 0, 0, 0, 0, 0, 0>(); // BHV Unterfeuer Minarett 2 Iso 4s
light_my_fire<15, 2000, 2000, 0, 0, 0, 0, 0, 0>(); // BHV Oberfeuer Loschenturm 3 Iso 4s
}
void setup() {
MsTimer2::set(1, blink);
MsTimer2::start();
}
void loop() {
}
Da bei den Drehfeuern der Leuchttürme, das Licht für den Beobachter an- und abschwillt, möchte ich diesen Effekt z.B. mit dem nachstehenden Sketch Fade nachbilden:
s. Link [url=https://www.arduino.cc/en/Tutorial/AnalogWriteMega]https://www.arduino.cc/en/Tutorial/AnalogWriteMega[/url]
Ich habe die entsprechenden Codes vom AnalogWriteMega in meinen o.g. Sketch wie folgt eingebunden:
[code]
/*
0 1 gr. Leuchtturm Borkum 1 Taktung: Fl (2) 12s
1 2 Fischerbalje 4 Taktung: Oc (2) 16s
2 3 Juister Memmertfeuer Taktung: Oc (2) 14s
3 4 Campen Taktung: Fl 5s, Fl(4) 15s
4 8 Norderney-Seefeuer Taktung: Fl (3) 12s
5 9 Helgoland Taktung: Fl 5s w
6 10 Helgoland-Düne Taktung: Iso 4s
7 11 Wooge neuer LT 2 Taktung: Fl 5s r
8 13 Arngast Taktung: Fl (2) 9s/Ubr. 6s
9 14 Tegeler Plate Taktung: Oc (3) 12s
10 16 Robbenplate Taktung: Oc 6s
11 17 Kleiner Preuße Taktung: Iso 5s
12 19 Neuwerk Taktung: LFl (3) 20s
13 20 Großerpater Taktung: Iso 4s
14 22 BHV Unterfeuer Minarett 2 Taktung: Iso 4s
15 23 BHV Oberfeuer Loschenturm 3 Taktung: Iso 4s
*/
#include <MsTimer2.h>
const int lowestPin = 0;
const int highestPin = 13;
uint8_t setOutput(uint8_t pin) {
pinMode(pin, OUTPUT);
return 0;
}
template <uint8_t led, uint32_t d1, uint32_t d2, uint32_t d3, uint32_t d4,
uint32_t d5, uint32_t d6, uint32_t d7, uint32_t d8>
void light_my_fire() {
static uint32_t phase = setOutput(led);
phase = phase < d1+d2+d3+d4+d5+d6+d7+d8-1? phase+1: 0;
digitalWrite(led, phase < d1 ? HIGH:
phase < d1+d2 ? LOW:
phase < d1+d2+d3 ? HIGH:
phase < d1+d2+d3+d4 ? LOW:
phase < d1+d2+d3+d4+d5 ? HIGH:
phase < d1+d2+d3+d4+d5+d6 ? LOW:
phase < d1+d2+d3+d4+d5+d6+d7 ? HIGH:
LOW);
}
// Schaltfolge: LED ein aus ein aus ein aus ein aus
void blink() {
light_my_fire< 0, 200, 2800, 200, 8800, 0, 0, 0, 0>(); // gr. LT Borkum Fl (2) 12s
light_my_fire< 1, 0, 1000, 5000, 1000, 9000, 0, 0, 0>(); // Fischerbalje 4 Oc (2) 16s
light_my_fire< 2, 0, 1000, 4000, 1000, 8000, 0, 0, 0>(); // Juister Memmertfeuer Oc (2) 14s
light_my_fire< 3, 700, 2300, 700, 2300, 700, 2300, 700, 5300>(); // Campen Fl(4) 15s
light_my_fire< 4, 200, 2800, 200, 2800, 200, 5800, 0, 0>(); // Norderney Fl (3) 12s
light_my_fire< 5, 400, 4600, 0, 0, 0, 0, 0, 0>(); // Helgoland Fl 5s
light_my_fire< 6, 2000, 2000, 0, 0, 0, 0, 0, 0>(); // Helgoland-Düne Iso 4s
light_my_fire< 7, 400, 4600, 0, 0, 0, 0, 0, 0>(); // Wooge neuer LT Fl 5s, r
light_my_fire< 8, 200, 2800, 200, 7800, 4000, 0, 0, 0>(); // Arngast Fl (2) 9s/Ubr. 6s
light_my_fire< 9, 0, 1000, 2000, 1000, 2000, 1000, 5000, 0>(); // Tegeler Plate Oc (3) 12s
light_my_fire<10, 0, 2000, 4000, 0, 0, 0, 0, 0>(); // Robbenplate Oc 6s
light_my_fire<11, 2500, 2500, 0, 0, 0, 0, 0, 0>(); // Kleiner Preuße Iso 5s
light_my_fire<12, 2000, 4000, 2000, 4000, 2000, 6000, 0, 0>(); // Neuwerk LFl (3) 20s
light_my_fire<13, 2000, 2000, 0, 0, 0, 0, 0, 0>(); // Großpater Iso 4s
light_my_fire<14, 2000, 2000, 0, 0, 0, 0, 0, 0>(); // BHV Unterfeuer Minarett 2 Iso 4s
}
void setup() {
MsTimer2::set(1, blink);
MsTimer2::start();
for (int thisPin = lowestPin; thisPin <= highestPin; thisPin++) {
pinMode(thisPin, OUTPUT);
}
}
void loop() {
// iterate over the pins:
for (int thisPin = lowestPin; thisPin <= highestPin; thisPin++) {
// fade the LED on thisPin from off to brightest:
for (int brightness = 0; brightness < 255; brightness++) {
analogWrite(thisPin, brightness);
delay(5);
}
// fade the LED on thisPin from brithstest to off:
for (int brightness = 255; brightness >= 0; brightness--) {
analogWrite(thisPin, brightness);
delay(5);
}
// pause between LEDs:
delay(1000);
}
}
Der Sketch läuft zwar auf meinem Arduino, aber dieses Fading springt von einer LED zur nächsten und ist nur sehr schwach als flackerndes Aufglimmen zusehen. Leider kann ich kein Video anhängen.
Da ich blutjunger Anfänger bzgl. Compiler-Programmierung bin, habe ich keine Ahnung, wie ich dieses Fading so in meinen Leuchtturmsketch einbinden muss, damit jede im Takt blinkende LED diesen Fade-Effekt aufnimmt.
Für hilfreiche Infos wäre ich sehr dankbar!
LG Umcharly