Dienstag, 12. Dezember 2023

Ostersonntag und Ostermontag berechnen


Eine Aufgabe auf der Arbeit brachte mich dazu, daran zu denken, dass Offizielle Feiertage ja berechnet werden könnte. Somit kam ich auf einen Blog, welches die Feiertage mit SQL Sripts löste. Leider schien dies nicht ganz klar zu sein, für welche Datenbank. Ist jedoch nichts, was mich aufhält und nahm die Wikipedia Beschreibung über Gausche Osterformel (Wiki).

Verwunderlich ist, dass meine Suche im Internet keine Ergebnisse erbrachte für MS SQL. Manchmal glaube ich, dass mir die Suche absichtlich keine oder kaum brauchbare Ergebnisse zeigt.

 

Benötigt

Rider oder Visual Studio für C#

 

Wann ist Ostern für das Jahr

Mit Eingabe des Jahr, soll mir der Ostersonntag und Ostermontag berechnet werden.

 

Gaußsche Osterformel

Seien wir doch ehrlich, wie ist man auf so eine Formel nur gekommen. Bis letzte Woche dachte ich, dass wird irgendwie entschieden und fertig. Aber weit gefehlt. Im Gegensatz zu anderen Feiertagen, ist dieser immer an einem Sonntag und Montag. Oder schon mal was vom Osterdienstag gehört. Die anderen Feiertage sind an ihrem festen Datum platziert.

 

Folgender Code ermöglicht die Eingabe und Ausgabe einer C# Consolen Anwendung. Für die Berechnung werden nur Ganzzahlen verwendet und die Funktion Modulo.

 Console.WriteLine("Calculate Ostern");  
 Console.WriteLine("Enter year:");  
 var year = int.Parse(Console.ReadLine());  
 var a = year % 19; // Zyklus  
 var b = year % 4;  // Schaltjahr  
 var c = year % 7;    
 var k = year / 100;   
 var p = (8 * k + 13) / 25;   
 var q = k / 4;   
 var m = (15 + k - p - q) % 30; // Korrektur Sonntag und Montag gleichung  
 var n = (4 + k - q) % 7;    // Korrektur Sonnengleichung  
 var d = (19 * a + m) % 30;   // Mondentfernung  
 var e = (2 * b + 4 * c + 6 * d + n) % 7;  
 var day = 22 + d + e;  
 var ostersonntag = (new DateTime(year, 3, 1)).AddDays(day - 1);  
 var ostermontag = ostersonntag.AddDays(1);  
 Console.WriteLine($"Ostersonntag: {ostersonntag:dd.MM.yyyy}");  
 Console.WriteLine($"Ostermontag: {ostermontag:dd.MM.yyyy}");  
 Console.WriteLine("Press any key to exit"); 

 

Ausnahmen

Wie in jeder Sache kommen auch Ausnahmen vor, die selbst der Algorithmus nicht hergibt. An der Stelle kann ich kann ich nur auf die Wiki Seite oder einer anderen Lektüre verweisen.

Montag, 4. Dezember 2023

Arduino Nano ESP32 Mini Beispiel - Onboard RGB LED Fade in und out


Im November habe ich den aktuellen Arduino Nano ESP32 gekauft und habe damit einiges vor. Aber bevor ich den Arduino Nano ESP32 fest verbaue, probiere ich ein paar kleine Aufgaben für den Dezember.

 

Benötigt

  • Arduino Nano ESP32
  • Aktueller Arduino IDE ab Version 2.0

 

Die Aufgabe ist sehr einfach und ist praktisch das Hello World unter den Mikrocontrollern. Ich lasse die LED-Blinken. Jedoch kann der Arduino Nano ESP32 mehr als nur eine Farbe leuchten und kann auch mit der Methode 'analogWrite' gesteuert werden. Der folgende Code lässt die Grüne LED  ein und ausschalten mit Fade-Effekt.


const int LIGHTRANGE = 50;  
 int mLedValue = 0;  
 void setup() {  
  Serial.begin(115200);  
  // RGB - All LED off (HIGH set the LED off)  
  digitalWrite(LED_RED, HIGH);  
  digitalWrite(LED_GREEN, HIGH);  
  digitalWrite(LED_BLUE, HIGH);  
 }  
 void loop() {  
  Serial.println("RED Fade in");  
  LedFadeLed(LED_GREEN, false);  
  Serial.println("RED Fade out");  
  LedFadeLed(LED_GREEN, false);  
  delay(500);  
 }  
 // ========================================================================================  
 // can fade in or fade out the led light  
 // ----------------------------------------------------------------------------------------  
 // ledPin = Setup the LED PIN  
 // setOn = true for fade in and false for fade out   
 void LedFadeLed(uint8_t ledPin, bool setOn){  
  for(int i = 0; i < LIGHTRANGE; i++) {  
   if(setOn) {   
    mLedValue = 256 - i;   
   }  
   else {   
    mLedValue = (256 - LIGHTRANGE) + i;  
   }  
   analogWrite(ledPin, mLedValue);  
   delay(30);  
  }  
 } 


Ameisen Simulation und andere Dinge

Wer lange sich schon mit C# beschäftig, hat sicherlich schon mal was von AntMe gelesen oder gehört. Diese Idee hatte ich aufgegriffen und mi...