Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

Navigation



Über uns
HomepageKontakt


Rechtliches
Impressum

projekte:arduino_projekte:led_tannenbaum

Inhaltsverzeichnis

LED Tannenbaum

Übersicht

Es ist mal wieder Weihnachten und man ist unmotiviert zu basteln? Baue einen LED Tannenbaum, das bauen geht schnell - das programmieren dauert ewig. Perfekt (Ihr müsst ja nicht programmieren, habe ich ja für euch erledigt ;D)

Das Programm nutzt folgende Techniken:

  • Linked lists
  • Pointer

Material

  • 12x LEDs in Bunt
  • Arduino in irgendeiner Art
  • Widerstände ca. 470Ohm
  • Kabel
  • Karton / Plexiglas

CODE

schimmelsensor.ino
struct node {
  int symbol;         //a symbol, in this case it contains the number of the led
  /* Tree chematic
   *        1
   *    2       3
   *  4   5   6    7
   * 
   */
  struct node *left; //PTR to the left
  struct node *right; //PTR to the right
  int pin; //Pin, where is the led connected ?
};
 
 
//The tree is programmed here.
 
struct node node4 = {4, 0, 0, 10};
struct node node5 = {5, 0, 0, 11};
struct node node6 = {6, 0, 0, 12};
struct node node7 = {7, 0, 0, 13};
 
struct node node2 = {2, &node4, &node5, 9};
struct node node3 = {3, &node6, &node7, 8};
 
struct node root = {1, &node2, &node3, 7};
 
//_____________________________________________
 
 
struct node *state = &root; // The code should start at top of the tree.
 
void setup()   {
  Serial.begin(9600);
 
  //Init all pins
  for(int i = 7;i<=13;i++)  {
    pinMode(i,OUTPUT);
  }
 
  //RUDOLPHS NOSE PWM PINS
  pinMode(3,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
}
 
long tree_oldmillis = 0;
const int UNIT = (2+1)*1000; //delay without using delay
 
long rudolph_oldmillis = 0;
const int RUDOLPH_DELAY = round(UNIT / 3); //delay without using delay for rudolphs nose
void loop()   {
 
  //Rudolphs nose
  if (millis() >= rudolph_oldmillis + RUDOLPH_DELAY) { //RUDOLPH_DELAY Delay without delay
    rudolph_oldmillis = millis();
    //Write random color
    analogWrite(3,random(0,255));
    analogWrite(5,random(0,255));
    analogWrite(6,random(0,255));
  }
 
  //Christmas tree
  if (millis() >= tree_oldmillis + UNIT) {  //UNIT Delay without delay,
    digitalWrite(state->pin,LOW); //Put the last led off
    tree_oldmillis = millis();  //set tree_oldmillis to its new value
    Serial.println(state->symbol); //Print out the symbol, just for debuging.
 
    if (random(1, 128) >= 64) { //random(0,1) didnt work, wether its a issue or not. Im not sure
      if (state->right != 0)  { //Has state->right childs?
        state = state->right; //Yep, jump to state->right address
      }
      else  {
        state = &root; //It got no childs (damn - thats terrible), jump back to root to make some
      }
    }
    else {
      if (state->left != 0)  { //Has state->left childs?
        state = state->left;  //Yep, jump to state->left address
      }
      else  {
        state = &root; //Nope, jump back to root
      }
    }
    digitalWrite(state->pin,HIGH); //Put the current state->pin led on
  }
}
projekte/arduino_projekte/led_tannenbaum.txt · Zuletzt geändert: 2017-01-17 14:25 von gamecompiler