Arduino 3
--- 09,02,2017 es hat eine Erweiterung gegeben vom Sketch Arduino 1Ich brauche doch noch ein paar LEDs mehr um die Dorfstraße ganz zu beleuchten.
/* Simulation belebtes Haus */
/* Version "Flimmern nur wenn die Pin-13 LED an ist */
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();
}
Damit komme ich nun hin damit meine Modelleisenbahn noch etwas lebhafter wird.