Advertisement
Snuletek

arduino 3 digit 7 segment timer.. code

Jul 7th, 2011
1,984
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.79 KB | None | 0 0
  1. /*
  2. okay so this code is used for a 3 digit 7 segment display multiplexed.
  3. it counts down from 900 (seconds) to 0, in the begining it turns on pin 13 (which is a npn transistor controlling a relay)
  4.  
  5. the segments are common anode, the way its controlled is by 3 pnp transistors on the anodes and 7 npn on the cathodes.
  6. */
  7.  
  8. unsigned long timeStart;        //setting up the variables used globaly
  9. boolean lastButton = LOW;      
  10. boolean currentButton = LOW;
  11. int Disp1 = 2;                  // setting up the pins for the displays
  12. int Disp2 = 3;
  13. int Disp3 = 4;
  14. int segA = 5;
  15. int segB = 6;
  16. int segC = 7;
  17. int segD = 8;
  18. int segE = 9;
  19. int segF = 11;
  20. int segG = 10;
  21. int relay = 13;                // setting up the pin for the relay
  22. int button = 12;               // setting up the pin for the button
  23.  
  24. void setup()                    //setting up the pins for the segments button and relay
  25. {
  26.   pinMode(Disp1, OUTPUT);
  27.   pinMode(Disp2, OUTPUT);
  28.   pinMode(Disp3, OUTPUT);
  29.   pinMode(segA, OUTPUT);
  30.   pinMode(segB, OUTPUT);
  31.   pinMode(segC, OUTPUT);
  32.   pinMode(segD, OUTPUT);
  33.   pinMode(segE, OUTPUT);
  34.   pinMode(segF, OUTPUT);
  35.   pinMode(segG, OUTPUT);
  36.   pinMode(button, INPUT);
  37.   pinMode(relay, OUTPUT);
  38. }
  39.  
  40. boolean deBounce (boolean last)          //a debounce function as shown in sciguy14´s arduino tutorial 06
  41. {                                        //( http://www.youtube.com/watch?v=g0pSfyXOXj8 )
  42.   boolean current = digitalRead(button);
  43.   if (last != current)
  44.   {
  45.     delay(5);
  46.   current = digitalRead(button);
  47.   }
  48.   return current;
  49. }
  50.  
  51. void number(int var)
  52. {
  53.   switch(var)
  54.   {
  55.     case 0:
  56.     digitalWrite(segG, LOW);
  57.     digitalWrite(segA, HIGH);
  58.     digitalWrite(segB, HIGH);
  59.     digitalWrite(segC, HIGH);
  60.     digitalWrite(segD, HIGH);
  61.     digitalWrite(segE, HIGH);
  62.     digitalWrite(segF, HIGH);
  63.     break;
  64.    
  65.     case 1:
  66.     digitalWrite(segA, LOW);
  67.     digitalWrite(segD, LOW);
  68.     digitalWrite(segE, LOW);
  69.     digitalWrite(segF, LOW);
  70.     digitalWrite(segG, LOW);
  71.     digitalWrite(segB, HIGH);
  72.     digitalWrite(segC, HIGH);
  73.     break;
  74.    
  75.     case 2:
  76.     digitalWrite(segC, LOW);
  77.     digitalWrite(segF, LOW);
  78.     digitalWrite(segA, HIGH);
  79.     digitalWrite(segB, HIGH);
  80.     digitalWrite(segG, HIGH);
  81.     digitalWrite(segE, HIGH);
  82.     digitalWrite(segD, HIGH);    
  83.     break;
  84.    
  85.     case 3:
  86.     digitalWrite(segF, LOW);
  87.     digitalWrite(segE, LOW);
  88.     digitalWrite(segA, HIGH);
  89.     digitalWrite(segB, HIGH);
  90.     digitalWrite(segG, HIGH);
  91.     digitalWrite(segC, HIGH);
  92.     digitalWrite(segD, HIGH);
  93.     break;
  94.  
  95.     case 4:
  96.     digitalWrite(segA, LOW);
  97.     digitalWrite(segE, LOW);
  98.     digitalWrite(segD, LOW);
  99.     digitalWrite(segF, HIGH);
  100.     digitalWrite(segG, HIGH);
  101.     digitalWrite(segB, HIGH);
  102.     digitalWrite(segC, HIGH);
  103.     break;
  104.    
  105.     case 5:
  106.     digitalWrite(segB, LOW);
  107.     digitalWrite(segE, LOW);
  108.     digitalWrite(segA, HIGH);
  109.     digitalWrite(segF, HIGH);
  110.     digitalWrite(segG, HIGH);
  111.     digitalWrite(segC, HIGH);
  112.     digitalWrite(segD, HIGH);
  113.     break;  
  114.    
  115.     case 6:  
  116.     digitalWrite(segB, LOW);
  117.     digitalWrite(segA, HIGH);
  118.     digitalWrite(segF, HIGH);
  119.     digitalWrite(segE, HIGH);
  120.     digitalWrite(segD, HIGH);
  121.     digitalWrite(segC, HIGH);
  122.     digitalWrite(segG, HIGH);
  123.     break;
  124.    
  125.     case 7:
  126.     digitalWrite(segF, LOW);
  127.     digitalWrite(segG, LOW);
  128.     digitalWrite(segE, LOW);
  129.     digitalWrite(segD, LOW);
  130.     digitalWrite(segA, HIGH);
  131.     digitalWrite(segB, HIGH);
  132.     digitalWrite(segC, HIGH);
  133.     break;
  134.    
  135.     case 8:
  136.     digitalWrite(segA, HIGH);
  137.     digitalWrite(segB, HIGH);
  138.     digitalWrite(segC, HIGH);
  139.     digitalWrite(segD, HIGH);
  140.     digitalWrite(segE, HIGH);
  141.     digitalWrite(segF, HIGH);
  142.     digitalWrite(segG, HIGH);
  143.     break;
  144.    
  145.     case 9:
  146.     digitalWrite(segE, LOW);
  147.     digitalWrite(segG, HIGH);
  148.     digitalWrite(segF, HIGH);
  149.     digitalWrite(segA, HIGH);
  150.     digitalWrite(segB, HIGH);
  151.     digitalWrite(segC, HIGH);
  152.     digitalWrite(segD, HIGH);
  153.     break;
  154.    
  155.   }
  156. }
  157.  
  158.  
  159. void loop()
  160. {
  161.   digitalWrite(Disp1, HIGH);
  162.   digitalWrite(Disp2, HIGH);
  163.   digitalWrite(Disp3, HIGH);
  164.  
  165.   //currentButton = deBounce(lastButton);                  //Using the debounce function to see if the button has been pushed
  166.   //if (lastButton == LOW && currentButton == HIGH)
  167.   //{
  168.    
  169.     delay(10000);
  170.    
  171.     digitalWrite(relay, HIGH);                              //turns on the relay
  172.      
  173.     for(int x=900; x >=0; x--)                           //starts the timer at 900 seconds
  174.     {
  175.       int A = x/100;                                     //splits the int x (the current second) into three individual int´s
  176.       int B = x/10 - A*10;                               //needed to send to the displays
  177.       int C = x - A*100 - B*10;
  178.       timeStart = millis();                              //sets the unsigned long timeStart to the current millis()
  179.                                                          //(read about millis on the arduino site)
  180.      
  181.       while ((millis() - timeStart) <= 1000)             //runs this loop while millis() - timeStart) is less than or equal to 1 second
  182.       {                                                  
  183.          
  184.        
  185.         digitalWrite(Disp1, LOW);
  186.         digitalWrite(Disp2, HIGH);
  187.         digitalWrite(Disp3, HIGH);
  188.         number(A);
  189.         delay(5);
  190.        
  191.                                        
  192.         digitalWrite(Disp1, HIGH);
  193.         digitalWrite(Disp2, LOW);
  194.         digitalWrite(Disp3, HIGH);
  195.         number(B);        
  196.         delay(5);
  197.      
  198.                                        
  199.         digitalWrite(Disp1, HIGH);
  200.         digitalWrite(Disp2, HIGH);
  201.         digitalWrite(Disp3, LOW);
  202.         number(C);
  203.         delay(5);
  204.        
  205.  
  206.       }
  207.     }
  208.    
  209.     digitalWrite(relay, LOW);
  210.   //}
  211. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement