Anzeige

Kaminfeuer auf der LED-Matrix

Der Winter ist da. Höchste Zeit, sich ein paar warme Gedanken zu machen und ein Kaminfeuer auf einer LED-Matrix.

Bauteile

Für dieses Projekt brauchst du:

Schaltplan

Kaminfeuer mit Arduino und LED Matrix Schaltplan

Die LED-Matrix wird direkt an das Arduino angeschlossen. Dazu benötigt man drei digitale Pins für die SPI-Kommunikation und zwei Kabel für die Stromversorgung (GND und 5V+).

Mehr Informationen zur Funktionsweise der LED-Matrix findest du im der Sektion Tutorials: Arduino Matrix Display 8×8 Pixel und jede Menge Spaß.

Code

Hier ist der Programm-Code. Die Leuchthöhe der einzelnen Reihen wird festgelegt.

if (int(random(1)) == 0) {
    for (int x = 0; x < 8; x++) {
      theHeightTarget[x] = int(random(5)) + 1;
    }
  }

Dann versucht das Programm, die aktuelle Leuchthöhe anzupassen.

  // update
  for (int x = 0; x < 8; x++) {
    if (theHeightTarget[x] > theHeightCurrent[x])theHeightCurrent[x]++;
    if (theHeightTarget[x] < theHeightCurrent[x])theHeightCurrent[x]--;
  }

Das wird dann auf der Matrix dargestellt:

  // show display 
  for (int x = 0; x < 8; x++) {
    for (int y = 0; y < theHeightCurrent[x]; y++) {
      lc.setLed(0, x, y, 1);
    }
    for (int y = theHeightCurrent[x]; y < 8; y++) {
      lc.setLed(0, x, y, 0);
    }
  }

Ab und zu löst sich ein Funke und fliegt nach oben.

 // spark – Funkenflug
  sparkX = int(random(8));
  if (int(random(40)) == 0) {
    for (int y = 4; y < 8; y++) {
      if (y == 4) {
        lc.setLed(0, sparkX, y, 1);
      } else {
        lc.setLed(0, sparkX, y, 1);
        lc.setLed(0, sparkX, y - 1, 0);
      }
      delay(25);
    }
  } else {
    delay(100);
  }

Hier ist der Code im Gesamten:

#include "LedControl.h"
LedControl lc = LedControl(12, 11, 10, 1);

int theHeightTarget[8];
int theHeightCurrent[8];

int fireHeight = 0;
int sparkX = 0;

void setup() {
  lc.shutdown(0, false);
  lc.setIntensity(0, 8);
  lc.clearDisplay(0);
  Serial.begin(115200);
}

void loop() {  
  //lc.clearDisplay(0);
  // set Heights
  if (int(random(1)) == 0) {
    for (int x = 0; x < 8; x++) {
      theHeightTarget[x] = int(random(5)) + 1;
    }
  }

  // update
  for (int x = 0; x < 8; x++) {
    if (theHeightTarget[x] > theHeightCurrent[x])theHeightCurrent[x]++;
    if (theHeightTarget[x] < theHeightCurrent[x])theHeightCurrent[x]--;
  }

  // show display 
  for (int x = 0; x < 8; x++) {
    for (int y = 0; y < theHeightCurrent[x]; y++) {
      lc.setLed(0, x, y, 1);
    }
    for (int y = theHeightCurrent[x]; y < 8; y++) {
      lc.setLed(0, x, y, 0);
    }
  }

  // spark – Funkenflug
  sparkX = int(random(8));
  if (int(random(40)) == 0) {
    for (int y = 4; y < 8; y++) {
      if (y == 4) {
        lc.setLed(0, sparkX, y, 1);
      } else {
        lc.setLed(0, sparkX, y, 1);
        lc.setLed(0, sparkX, y - 1, 0);
      }
      delay(25);
    }
  } else {
    delay(100);
  }
}

Ich würde mich freuen, wenn du diesen Beitrag bewerten würdest :-)

Durchschnittliche Bewertung 3 / 5. Anzahl Bewertungen: 2

Bisher keine Bewertungen! Sei der Erste, der diesen Beitrag bewertet.

Deine Meinung ist mir sehr wichtig!

Lasse uns diesen Beitrag verbessern!

Wie kann ich den Beitrag verbessern? Was würdest du dir wünschen? Was hat dir gefehlt?

Ich hoffe, der Beitrag hilft dir weiter. Und falls du weitere Fragen hast, stelle sie gern hier im Arduino-Forum.

Du willst noch tiefer in die Materie einsteigen? Dann präsentiere ich dir die neuen E-Books von StartHardware:

  • 20 Lektionen
  • Projektbasiert und kurzweilig
  • Aus den Erfahrungen unzähliger Workshops
  • Sofortiger Download

  • Die beliebtesten Projekte von StartHardware
  • Mit Code, Schaltplan und Erklärungen
  • Fachwissen-Kapitel
  • Sofortiger Download


Willst du lieber ein Buch zum Anfassen? Dann werde mit diesem hier zum Arduino-Experten! Arduino: Kompendium: Elektronik, Programmierung und Projekte* – Damit lernst du alle Tricks!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

 

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.