This is the Code of Christmas Tree
// By Roee Bloch CHRISTMAS TREE //All right Reserved // Copyright (c) 2015 All Right Reserved, http://www.electronics-freak.com // // This source is subject to the Roee Bloch License. // Please see the License.txt file for more information. // All other rights reserved. // // THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY // KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A // PARTICULAR PURPOSE. // // </copyright> // <author>Roee Bloch</author> // <email>roeebloch@walla.co.il</email> // <date>June 2015</date> #define strips 5 // number of strip lamps to be used #define mydelay 400 // delay of 1000 ms between changes #define randompin 12 // when this digital pin conneted to GND will run RANDOM PATTERNS int myrandom, mode = 1; // if mode=0 => random mode 1 is normal byte cal = 1,my_top; int num, func_num = 0,top,random_delay; byte mypins[] = {2, 3, 4, 5, 6, 7, 8, 9}; //maximum 8 outputs for this program from LSB to MSB void setup() { pinMode(randompin, INPUT); // set pin to input digitalWrite(randompin, HIGH); // turn on pullup resistors Serial.begin(9600); if ((strips <= 8) && (strips > 1)) // check if number of Relays is between 2 and 8 { for (int x = 0; x < strips; x++) // decalre all RELAYS as OUTPUTS in one loop { // Serial.print("IO="); // Serial.println(int(mypins[x])); pinMode (mypins[x], OUTPUT); } } Serial.println("started"); pinMode (2, OUTPUT); top = pow(2, strips)-1; // max number for chosen strips my_top=byte(top); // for mask } void loop() { digitalWrite(randompin, HIGH); if (digitalRead(randompin) == 0) //random mode { Serial.println("Random mode"); mode = 0; func_num = random(1, 9); // random run random_delay= random(1,11)*100; Serial.print("Random delay is:"); Serial.println(random_delay); } else { Serial.println("Regular mode"); mode = 1; func_num++; // go pattern one by one 1,2,3,.... random_delay=mydelay; } Serial.println(func_num); switch (func_num) { case 1: pattern1(); break; case 2: pattern2(); break; case 3: pattern3(); break; case 4: pattern4(); break; case 5: pattern5(); break; case 6: pattern6(); break; case 7: pattern7(); break; case 8: func_num = 0; cal = 1; break; } } void LightLeds(byte x) { int mystart; String myNumber = String(x, BIN); // convert byte to string in order to work with it easily int binLength = myNumber.length(); if (binLength < 8) { digitalWrite(mypins[binLength], 0); } for (int q = binLength, mystart = 0; q > 0; q--, mystart++) { if (myNumber[q - 1] == '1') { digitalWrite(mypins[mystart], 1); // need to get to correct bit } else { digitalWrite(mypins[mystart], 0); // need to get to correct bit } } } void pattern1() // move left { cal=1; for (int a = 1; a <= strips; a++) { LightLeds(cal); delay(random_delay); cal = cal * 2; } cal = 1; all_off(); } void pattern2() // move right { cal = pow(2, strips); for (int a = strips; a >= 0; a--) { delay(random_delay); cal = cal >> 1; LightLeds(cal); } all_off(); } void mystop() { Serial.println("stopped"); loop2: goto loop2; } void all_off() { for (int i = 0; i < 8; i++) { digitalWrite(mypins[i], 0); } } void pattern3() //binary up { cal = 1; byte limit; limit=my_top+1; // int top = pow(2, strips); // my_top=byte(top); // for mask for (int i = 1; i <=limit; i++) { delay(random_delay); cal = i; LightLeds(cal); } } void pattern4() //blink half half { for (int i = 1; i < 6; i++) { delay(random_delay); LightLeds(170 & my_top); // equal to 10101010 delay(random_delay); LightLeds(85 & my_top);// equal to 1010101 } all_off(); } void pattern5() // blink all together { for (int i = 1; i < 6; i++) { delay(random_delay); LightLeds(my_top); delay(random_delay); all_off(); } } void pattern6() { for (int i = 1; i < 6; i++) // two and two { delay(random_delay); LightLeds(204 & my_top); delay(random_delay); LightLeds(51 & my_top); } all_off(); } void pattern7() //binary down { cal = 1; for (int i = my_top; i >= 0; i--) { delay(random_delay); cal = i; LightLeds(i); } all_off(); }
Video for Theory: lesson-11-christmas-tree-part-1
Video of First Run: lesson-11-christmas-tree-lights-part-2
Video with Strong Leds: lesson-11-christmas-tree-lights-part-3