Advertisement
UnaClocker

Christmas Tree Ornament 2012

Dec 14th, 2012
3,554
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.26 KB | None | 0 0
  1. // UnaClocker's Christmas tree Ornament 2012
  2. // Code Revision 2.0
  3. // Uses an ATTiny45, 20 charlieplexed LED's on pins 0-4
  4. // See www.neonsquirt.com for more details, and the PCB files.
  5. // This sketch and related PCB files are open to the Public Domain.
  6. // More details at: http://www.neonsquirt.com/xmas_ornament2012.html
  7.  
  8. void setup() {
  9.   pinMode(0, INPUT);
  10.   pinMode(1, INPUT);
  11.   pinMode(2, INPUT);
  12.   pinMode(3, INPUT);
  13.   pinMode(4, INPUT);
  14. }
  15.  
  16. void bottomRow() {
  17.   // LED's 1 3 5 6 12 16
  18.   pinMode(0, OUTPUT);
  19.   pinMode(1, OUTPUT);
  20.   digitalWrite(0, HIGH); // LED 1
  21.   digitalWrite(0, LOW);
  22.   pinMode(0, INPUT);
  23.   pinMode(2, OUTPUT);
  24.   digitalWrite(1, HIGH); // LED 3
  25.   digitalWrite(1, LOW);
  26.   pinMode(1, INPUT);
  27.   pinMode(3, OUTPUT);
  28.   digitalWrite(2, HIGH); // LED 5
  29.   digitalWrite(2, LOW);
  30.   digitalWrite(3, HIGH); // LED 6
  31.   pinMode(2, INPUT);
  32.   pinMode(0, OUTPUT);
  33.   digitalWrite(3, LOW); // LED 16
  34.   pinMode(0, INPUT);
  35.   pinMode(1, OUTPUT);
  36.   digitalWrite(3, HIGH); // LED 12
  37.   digitalWrite(3, LOW);
  38.   pinMode(3, INPUT);
  39.   pinMode(1, INPUT);
  40. }
  41.  
  42. void secondRow() {
  43.   // LED 10 13 14 17
  44.   pinMode(0, OUTPUT);
  45.   pinMode(2, OUTPUT);
  46.   digitalWrite(2, HIGH); // LED 10
  47.   pinMode(0, INPUT);
  48.   pinMode(4, OUTPUT); // LED 13
  49.   digitalWrite(2, LOW);
  50.   digitalWrite(4, HIGH); // LED 14
  51.   digitalWrite(4, LOW);
  52.   pinMode(2, INPUT);
  53.   pinMode(1, OUTPUT);
  54.   digitalWrite(1, HIGH); // LED 17
  55.   digitalWrite(1, LOW);
  56.   pinMode(4, INPUT);
  57.   pinMode(1, INPUT);
  58. }
  59.  
  60. void thirdRow() {
  61.   // LED 2 11 15 18
  62.   pinMode(0, OUTPUT);
  63.   pinMode(1, OUTPUT);
  64.   digitalWrite(1, HIGH); // LED 2
  65.   digitalWrite(1, LOW);
  66.   pinMode(1, INPUT);
  67.   pinMode(3, OUTPUT);
  68.   digitalWrite(0, HIGH); // LED 15
  69.   digitalWrite(0, LOW);
  70.   pinMode(0, INPUT);
  71.   pinMode(1, OUTPUT);
  72.   digitalWrite(1, HIGH); // LED 11
  73.   digitalWrite(1, LOW);
  74.   pinMode(3, INPUT);
  75.   pinMode(4, OUTPUT);
  76.   digitalWrite(4, HIGH);
  77.   digitalWrite(4, LOW);
  78.   pinMode(1, INPUT);
  79.   pinMode(4, INPUT);
  80. }
  81.  
  82. void topRow() {
  83.   // LEDs 4 7 8 9
  84.   pinMode(1, OUTPUT);
  85.   pinMode(2, OUTPUT);
  86.   digitalWrite(2, HIGH); // LED 4
  87.   digitalWrite(2, LOW);
  88.   pinMode(1, INPUT);
  89.   pinMode(0, OUTPUT);
  90.   digitalWrite(0, HIGH); // LED 9
  91.   digitalWrite(0, LOW);
  92.   pinMode(0, INPUT);
  93.   pinMode(2, INPUT);
  94.   pinMode(3, OUTPUT);
  95.   pinMode(4, OUTPUT);
  96.   digitalWrite(3, HIGH); // LED 7
  97.   digitalWrite(3, LOW);
  98.   digitalWrite(4, HIGH); // LED 8
  99.   digitalWrite(4, LOW);
  100.   pinMode(3, INPUT);
  101.   pinMode(4, INPUT);
  102. }
  103.  
  104. void stars() {
  105.   // LED 19 and 20
  106.   pinMode(0, OUTPUT);
  107.   pinMode(4, OUTPUT);
  108.   digitalWrite(0, HIGH);
  109.   digitalWrite(0, LOW);
  110.   digitalWrite(4, HIGH);
  111.   digitalWrite(4, LOW);
  112.   digitalWrite(0, HIGH);
  113.   digitalWrite(0, LOW);
  114.   digitalWrite(4, HIGH);
  115.   digitalWrite(4, LOW);
  116.   pinMode(0, INPUT);
  117.   pinMode(4, INPUT);
  118. }
  119.  
  120. void upModeOne() {
  121.   unsigned long timeTracker=millis();
  122.   while((millis()-timeTracker)<250) {
  123.     bottomRow();
  124.   }
  125.   delay(150);
  126.   timeTracker=millis();
  127.   while((millis()-timeTracker)<250) {
  128.     secondRow();
  129.   }
  130.   delay(150);
  131.   timeTracker=millis();
  132.   while((millis()-timeTracker)<250) {
  133.     thirdRow();
  134.   }
  135.   delay(150);
  136.   timeTracker=millis();
  137.   while((millis()-timeTracker)<250) {
  138.     topRow();
  139.   }
  140.   delay(150);
  141.   timeTracker=millis();
  142.   while((millis()-timeTracker)<250) {
  143.     stars();
  144.   }
  145. }
  146.  
  147. void upModeTwo() {
  148.   unsigned long timeTracker=millis();
  149.   while((millis()-timeTracker)<400) {
  150.     bottomRow();
  151.   }
  152.   timeTracker=millis();
  153.   while((millis()-timeTracker)<400) {
  154.     bottomRow();
  155.     secondRow();
  156.   }
  157.   timeTracker=millis();
  158.   while((millis()-timeTracker)<400) {
  159.     bottomRow();
  160.     secondRow();
  161.     thirdRow();
  162.   }
  163.   timeTracker=millis();
  164.   while((millis()-timeTracker)<400) {
  165.     bottomRow();
  166.     secondRow();
  167.     thirdRow();
  168.     topRow();
  169.   }
  170.   for (int j=0; j<8; j++) {
  171.     timeTracker=millis();
  172.     while((millis()-timeTracker)<125) {
  173.       bottomRow();
  174.       secondRow();
  175.       thirdRow();
  176.       topRow();
  177.       stars();
  178.     }
  179.     timeTracker=millis();
  180.     while((millis()-timeTracker)<150) {
  181.       bottomRow();
  182.       secondRow();
  183.       thirdRow();
  184.       topRow();
  185.     }
  186.   }
  187. }
  188.  
  189. void upModeThree() {
  190.   unsigned long timeTracker=millis();
  191.   while((millis()-timeTracker)<400) {
  192.     bottomRow();
  193.   }
  194.   timeTracker=millis();
  195.   while((millis()-timeTracker)<400) {
  196.     bottomRow();
  197.     secondRow();
  198.   }
  199.   timeTracker=millis();
  200.   while((millis()-timeTracker)<400) {
  201.     bottomRow();
  202.     secondRow();
  203.     thirdRow();
  204.   }
  205.   timeTracker=millis();
  206.   while((millis()-timeTracker)<400) {
  207.     bottomRow();
  208.     secondRow();
  209.     thirdRow();
  210.     topRow();
  211.   }
  212.   timeTracker=millis();
  213.   while((millis()-timeTracker)<600) {
  214.     bottomRow();
  215.     secondRow();
  216.     thirdRow();
  217.     topRow();
  218.     stars();
  219.   }
  220.   timeTracker=millis();
  221.   while((millis()-timeTracker)<400) {
  222.     secondRow();
  223.     thirdRow();
  224.     topRow();
  225.     stars();
  226.   }
  227.   timeTracker=millis();
  228.   while((millis()-timeTracker)<400) {
  229.     thirdRow();
  230.     topRow();
  231.     stars();
  232.   }
  233.   timeTracker=millis();
  234.   while((millis()-timeTracker)<400) {
  235.     topRow();
  236.     stars();
  237.   }
  238.   timeTracker=millis();
  239.   while((millis()-timeTracker)<400) {
  240.     stars();
  241.   }
  242. }
  243.  
  244. void upDownModeOne() {
  245.   unsigned long timeTracker=millis();
  246.   for (int a=0; a<2; a++) {
  247.     if (a>1) {
  248.       delay(80);
  249.     }
  250.     while((millis()-timeTracker)<120) {
  251.       bottomRow();
  252.     }
  253.     timeTracker=millis();
  254.     while((millis()-timeTracker)<120) {
  255.       secondRow();
  256.     }
  257.     timeTracker=millis();
  258.     while((millis()-timeTracker)<120) {
  259.       thirdRow();
  260.     }
  261.     timeTracker=millis();
  262.     while((millis()-timeTracker)<120) {
  263.       topRow();
  264.     }
  265.     timeTracker=millis();
  266.     while((millis()-timeTracker)<120) {
  267.       stars();
  268.     }
  269.     timeTracker=millis();
  270.     while((millis()-timeTracker)<120) {
  271.       topRow();
  272.     }
  273.     timeTracker=millis();
  274.     while((millis()-timeTracker)<120) {
  275.       thirdRow();
  276.     }
  277.     timeTracker=millis();
  278.     while((millis()-timeTracker)<120) {
  279.       secondRow();
  280.     }
  281.     timeTracker=millis();
  282.     while((millis()-timeTracker)<120) {
  283.       bottomRow();
  284.     }
  285.   }
  286. }
  287.  
  288.  
  289.  
  290. void loop() {
  291.   upModeOne();
  292.   delay(500);
  293.   upModeTwo();
  294.   delay(500);
  295.   upDownModeOne();
  296.   delay(500);
  297.   upModeThree();
  298.   delay(500);
  299. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement