Exercise 3 - 7 segment displays and the 'switch case' statement
- The small lines in the 7 segment display above show you how the pins are connected, the image below shows how numbers are displayed using a 7-segment display:
- Paste the code below into the Arduino IDE and follow the instructions:
/* This code looks at using a 'switch... case' statement to control a * 7 segment display used for displaying numbers and letters. * The full circuit has been given to you, but there is a fair bit of stuff * to add to the code. Everything you need is here, but you will need to * do some duplication and changing of names/numbers. * * Look at the Arduino site reference page and the description of * the 'switch case' statement under the 'Structure' section. * https://www.arduino.cc/en/Reference/HomePage * Also look under the functions section and find 'Random Numbers'; * look at the 'random' function to see how we use it in the code below. * * We want to use this structure to control our display like a digital * die in the following way: * - if the button is pressed... * - flash the dot a few times... * - display a random number between 1 and 6 * * The code currently does this, but only with a 1 and a 4, it needs finishing! * Create the code to show numbers 2, 3, 5 and 6 too with reference to the circuit * diagram that shows what pin is connected to what LED bar on the display. * You will need to create code in the declarations, the setup, the main loop and make * some extra 'void' functions like those existing underneath the main loop. The code is * heavily commented and should help you work out what does what. If it is not working, * then follow the clues in the error messages and see if you can fix it! * * * Luke Woodbury 6th April 2016 */ //our declarations... const int buttonPin = 2; //const(ant) to hold the button pin number int buttonState = 0; //variable to hold the button state const int midHoz = 6; //const(ant) to hold middle horizontal LED pin number const int topLeft = 7; //const(ant) to hold top left LED pin number const int topRight = 9; //const(ant) to hold top right LED pin number const int botRight = 12; //const(ant) to hold bottom right LED pin number const int dotPin = 13; //const(ant) to hold dot LED pin number int choose; //variable to hold our random number void setup() { //setup code runs once pinMode(midHoz, OUTPUT); //set up our LED pins as outputs pinMode(topLeft, OUTPUT); pinMode(topRight, OUTPUT); pinMode(botRight, OUTPUT); pinMode(dotPin, OUTPUT); pinMode(buttonPin, INPUT); //set up our input pin for the button } void loop() { //main loop runs repeatedly, very fast! buttonState = digitalRead(buttonPin); //read the button pin and store state in variable if (buttonState == HIGH) { //if the button is pressed choose = random(1, 3); //create a random number between 1 and 2 to store in the 'choose' variable, //the higher number is 'exclusive', // i.e. we need to set it one higher than we want dot(); //run the dot function as outlined below in 'void dot()' switch (choose) { //start the switch function using our random number to select a case case 1: //case 1 one(); //run the one function as outlined below in 'void one()' break; //quit the switch function case 2: //case 2 four(); //run the four function as outlined below in 'void four()' break; //quit the switch function } } } /* Below are our custom functions we have created, i.e. they are outside * of our main setup and loop, but we can use them from the main loop, or * indeed other functions just by calling their name. */ void allOff(){ //function to turn all LEDs on display off digitalWrite(midHoz, LOW); //set pin 6 LOW, i.e. off, GND etc digitalWrite(topLeft, LOW); digitalWrite(topRight, LOW); digitalWrite(botRight, LOW); digitalWrite(dotPin, LOW); } void one(){ //function to display number 'one' allOff(); //first turn all LEDs off with the 'allOff' function above digitalWrite(topRight, HIGH); //set pin 9 HIGH, i.e. on, +5V etc digitalWrite(botRight, HIGH); } void four(){ //function to display number 'four' allOff(); //first turn all LEDs off with the 'allOff' function above digitalWrite(midHoz, HIGH); //set pin 6 HIGH, i.e. on, +5V etc digitalWrite(topLeft, HIGH); digitalWrite(topRight, HIGH); digitalWrite(botRight, HIGH); } void dot(){ //function to flash the dot on our display 3 times allOff(); //first turn all LEDs off with the 'allOff' function above digitalWrite(dotPin, HIGH); //set pin 13 HIGH, i.e. on, +5V delay(100); //wait for 100 milliseconds digitalWrite(dotPin, LOW); //set pin 13 LOW, i.e. off, GND etc delay(100); digitalWrite(dotPin, HIGH); delay(100); digitalWrite(dotPin, LOW); delay(100); digitalWrite(dotPin, HIGH); delay(100); digitalWrite(dotPin, LOW); delay(100); }
Extension exercises
- Instead of flashing a dot 3 times, try animating some tumbling numbers
- Try using the display to animate something more abstract on button presses
- Add numbers 0, 7, 8 and 9 to the code
Click on a link