Hallo zusammen,
ich habe im Netz einen Sketch gefunden der für ein "belebtes Haus" für die Modellbahn geschrieben wurde.
Dieser Sketch wurde mit Tatkräftiger Unterstützung dieses Forums gebaut und darum wende ich mich auch an euch mit meinem Problem.
Ich habe den Sketch mit einem Arduino Uno auf den Attiny hochgeladen und er funktioniert auch soweit, aber der Ausgang PB5 leuchtet immer ganz leicht und macht nicht was er soll.
Kann mir jemand sagen woran das liegen könnte ?
Hier nochmal der Sketch :
/* Simulation "belebtes Haus für die Modellbahn" */
/* Version "Flimmern nur wenn die Pin-2 LED an ist */
byte pwmFlimmerPin=1; // PWM Pin für das "analoge" Flimmern
long flimmerStart,flimmerEnd; // Anfangs- und Endzeiten für das Flimmern
// LED Pins für das normale Blinken deklarieren
byte leds[] ={ 5, 4, 3, 2, 0};
// LED Blinktakt in Millisekunden für diese Pins
long ledtakt[]={6000, 8800, 13000, 20000, 20400};
// Variablen zum Merken von millis()-Zeiten beim Schalten/Blinken
long ledtime[sizeof(leds)];
void setup() {
// Serial.begin(9600);
// Alle verwendeten Pins auf OUTPUT setzen
pinMode(pwmFlimmerPin, OUTPUT);
for (int i=0;i<sizeof(leds);i++)
pinMode(leds[i], OUTPUT);
}
boolean milliSekundenTakt(int dauer, 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]==0 && digitalRead(leds[i])) // Pin-13 LED wurde gerade eingeschaltet
{
flimmerStart=millis()+2000; // Anfangszeit für das Flimmern setzen
flimmerEnd =millis()+15000; // Endzeit für das Flimmern setzen
}
// Serial.print("Pin ");Serial.print(leds[i]);Serial.print(" = ");Serial.println(digitalRead(leds[i]));
}
}
}
void flimmernPwmPin() {
// Die flimmernde LED im Zufallsmodus flimmern lassen
static 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
else
flimmerHelligkeit=0; // Flimmern aus wenn falsche Zeit zum Flimmern
analogWrite(pwmFlimmerPin, flimmerHelligkeit);
}
}
void loop() {
blinkenImTakt();
flimmernPwmPin();
}
Vielen Dank schonmal für die Hilfe.
Gruß
Patrick