Meine Homepage

Arduino 3

--- 09,02,2017 es hat eine Erweiterung gegeben vom Sketch Arduino 1

Ich 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.


Zurück zur Startseite
Diese Webseite wurde kostenlos mit Homepage-Baukasten.de erstellt. Willst du auch eine eigene Webseite?
Gratis anmelden