Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- okay so this code is used for a 3 digit 7 segment display multiplexed.
- it counts down from 900 (seconds) to 0, in the begining it turns on pin 13 (which is a npn transistor controlling a relay)
- the segments are common anode, the way its controlled is by 3 pnp transistors on the anodes and 7 npn on the cathodes.
- */
- unsigned long timeStart; //setting up the variables used globaly
- boolean lastButton = LOW;
- boolean currentButton = LOW;
- int Disp1 = 2; // setting up the pins for the displays
- int Disp2 = 3;
- int Disp3 = 4;
- int segA = 5;
- int segB = 6;
- int segC = 7;
- int segD = 8;
- int segE = 9;
- int segF = 11;
- int segG = 10;
- int relay = 13; // setting up the pin for the relay
- int button = 12; // setting up the pin for the button
- void setup() //setting up the pins for the segments button and relay
- {
- pinMode(Disp1, OUTPUT);
- pinMode(Disp2, OUTPUT);
- pinMode(Disp3, OUTPUT);
- pinMode(segA, OUTPUT);
- pinMode(segB, OUTPUT);
- pinMode(segC, OUTPUT);
- pinMode(segD, OUTPUT);
- pinMode(segE, OUTPUT);
- pinMode(segF, OUTPUT);
- pinMode(segG, OUTPUT);
- pinMode(button, INPUT);
- pinMode(relay, OUTPUT);
- }
- boolean deBounce (boolean last) //a debounce function as shown in sciguy14´s arduino tutorial 06
- { //( http://www.youtube.com/watch?v=g0pSfyXOXj8 )
- boolean current = digitalRead(button);
- if (last != current)
- {
- delay(5);
- current = digitalRead(button);
- }
- return current;
- }
- void number(int var)
- {
- switch(var)
- {
- case 0:
- digitalWrite(segG, LOW);
- digitalWrite(segA, HIGH);
- digitalWrite(segB, HIGH);
- digitalWrite(segC, HIGH);
- digitalWrite(segD, HIGH);
- digitalWrite(segE, HIGH);
- digitalWrite(segF, HIGH);
- break;
- case 1:
- digitalWrite(segA, LOW);
- digitalWrite(segD, LOW);
- digitalWrite(segE, LOW);
- digitalWrite(segF, LOW);
- digitalWrite(segG, LOW);
- digitalWrite(segB, HIGH);
- digitalWrite(segC, HIGH);
- break;
- case 2:
- digitalWrite(segC, LOW);
- digitalWrite(segF, LOW);
- digitalWrite(segA, HIGH);
- digitalWrite(segB, HIGH);
- digitalWrite(segG, HIGH);
- digitalWrite(segE, HIGH);
- digitalWrite(segD, HIGH);
- break;
- case 3:
- digitalWrite(segF, LOW);
- digitalWrite(segE, LOW);
- digitalWrite(segA, HIGH);
- digitalWrite(segB, HIGH);
- digitalWrite(segG, HIGH);
- digitalWrite(segC, HIGH);
- digitalWrite(segD, HIGH);
- break;
- case 4:
- digitalWrite(segA, LOW);
- digitalWrite(segE, LOW);
- digitalWrite(segD, LOW);
- digitalWrite(segF, HIGH);
- digitalWrite(segG, HIGH);
- digitalWrite(segB, HIGH);
- digitalWrite(segC, HIGH);
- break;
- case 5:
- digitalWrite(segB, LOW);
- digitalWrite(segE, LOW);
- digitalWrite(segA, HIGH);
- digitalWrite(segF, HIGH);
- digitalWrite(segG, HIGH);
- digitalWrite(segC, HIGH);
- digitalWrite(segD, HIGH);
- break;
- case 6:
- digitalWrite(segB, LOW);
- digitalWrite(segA, HIGH);
- digitalWrite(segF, HIGH);
- digitalWrite(segE, HIGH);
- digitalWrite(segD, HIGH);
- digitalWrite(segC, HIGH);
- digitalWrite(segG, HIGH);
- break;
- case 7:
- digitalWrite(segF, LOW);
- digitalWrite(segG, LOW);
- digitalWrite(segE, LOW);
- digitalWrite(segD, LOW);
- digitalWrite(segA, HIGH);
- digitalWrite(segB, HIGH);
- digitalWrite(segC, HIGH);
- break;
- case 8:
- digitalWrite(segA, HIGH);
- digitalWrite(segB, HIGH);
- digitalWrite(segC, HIGH);
- digitalWrite(segD, HIGH);
- digitalWrite(segE, HIGH);
- digitalWrite(segF, HIGH);
- digitalWrite(segG, HIGH);
- break;
- case 9:
- digitalWrite(segE, LOW);
- digitalWrite(segG, HIGH);
- digitalWrite(segF, HIGH);
- digitalWrite(segA, HIGH);
- digitalWrite(segB, HIGH);
- digitalWrite(segC, HIGH);
- digitalWrite(segD, HIGH);
- break;
- }
- }
- void loop()
- {
- digitalWrite(Disp1, HIGH);
- digitalWrite(Disp2, HIGH);
- digitalWrite(Disp3, HIGH);
- //currentButton = deBounce(lastButton); //Using the debounce function to see if the button has been pushed
- //if (lastButton == LOW && currentButton == HIGH)
- //{
- delay(10000);
- digitalWrite(relay, HIGH); //turns on the relay
- for(int x=900; x >=0; x--) //starts the timer at 900 seconds
- {
- int A = x/100; //splits the int x (the current second) into three individual int´s
- int B = x/10 - A*10; //needed to send to the displays
- int C = x - A*100 - B*10;
- timeStart = millis(); //sets the unsigned long timeStart to the current millis()
- //(read about millis on the arduino site)
- while ((millis() - timeStart) <= 1000) //runs this loop while millis() - timeStart) is less than or equal to 1 second
- {
- digitalWrite(Disp1, LOW);
- digitalWrite(Disp2, HIGH);
- digitalWrite(Disp3, HIGH);
- number(A);
- delay(5);
- digitalWrite(Disp1, HIGH);
- digitalWrite(Disp2, LOW);
- digitalWrite(Disp3, HIGH);
- number(B);
- delay(5);
- digitalWrite(Disp1, HIGH);
- digitalWrite(Disp2, HIGH);
- digitalWrite(Disp3, LOW);
- number(C);
- delay(5);
- }
- }
- digitalWrite(relay, LOW);
- //}
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement