Components and supplies
Pushbutton Switch, Momentary
Arduino UNO
Single Turn Potentiometer- 10k ohms
Tools and machines
Soldering iron (generic)
Project description
Code
Variable Digital Die
arduino
1#include <Wire.h> 2#include <LiquidCrystal_I2C.h> 3 4LiquidCrystal_I2C LCD(0x27,20,4); 5 6int button = A0; //A0 connected to push button 7int powerOut = A2; //A0 set to a constant power output for pullup resistor 8int pot = A1; //A1 connected to potentiometer 9long randomNum = 0; //initialize random number to 0 10int generating = 0; //state for generating the random number 11int upperLimit = 0; //upperlimit for die 12int potVal = 0; //initialize input from potentiometer 13int state = 0; 14 15void setup() 16{ 17 Serial.begin(9600); //set baude rate to 9600 [standard communication rate for LCD screens] 18 pinMode(button, INPUT_PULLUP); //use internal pullup resistor on button input pin 19 pinMode(powerOut, OUTPUT); //set A2 to be a power output 20 pinMode(pot, INPUT); //set A1 to be input for potentiometer 21 LCD.begin();//Initializing display 22 LCD.backlight();//To Power ON the back light 23 delay(100); //pause for 100ms 24 LCD.clear(); //clear screen 25 delay(200); //pause for 200ms 26 digitalWrite(powerOut, HIGH); //set A2 to constantly output 5V 27} 28 29void loop() // run over and over 30{ 31 digitalWrite(powerOut, LOW); //set A2 to constantly output 0V 32 LCD.setCursor(0,0); 33 LCD.print(" DM BLAISE'S DIE "); 34 state = digitalRead(button); 35 potVal = analogRead(pot); 36 delay(10); 37 if (potVal < 25){ //if potentiometer value is less than 25.. 38 upperLimit = 3; //set upper limit to 3 (random function is upper limit exclusive so this correlates to a D2) 39 } 40 else if (potVal < 50){ 41 upperLimit = 5; //D4 42 } 43 else if (potVal < 75){ 44 upperLimit = 7; //D6 45 } 46 else if (potVal < 100){ 47 upperLimit = 9; //D8 48 } 49 else if (potVal < 125){ 50 upperLimit = 11; //D10 51 } 52 else if (potVal < 150){ 53 upperLimit = 13; //D12 54 } 55 else if (potVal > 150){ 56 upperLimit = 21; //D20 57 } 58 LCD.setCursor(9,1); //column 9, second row down 59 LCD.print("D"); //print D 60 LCD.setCursor(10,1); //column 10, second row down 61 LCD.print(upperLimit-1); //subtract 1 to reveal actual value 62 LCD.print(" "); //space to overright old data printed on screen 63 if (state == LOW){ //if the button has been pressed (0V connected to A0) 64 LCD.setCursor(0,0); //set curser at first pixel 65 LCD.print(" DM BLAISE'S DIE "); //center text on top row 66 generating = 1; //state of loop is 1 67 randomNum = random(1, upperLimit); //generate a number between 1 and set value (upper value EXCLUSIVE) 68 LCD.clear(); //clear screen 69 LCD.setCursor(9,1); //column 9, second row down 70 LCD.print("D"); //print "D" for Dice 71 LCD.setCursor(10,1); //Column 10, second row down 72 LCD.print(upperLimit-1); //subtract one from upperLimit to reveal the die number 73 LCD.print(" "); //space 74 LCD.setCursor(9,2); //column 9, third row down 75 LCD.print(randomNum); //print the random number 76 delay(100); //delay 100ms to debounce the button 77 while (generating == 1){ //stay in a loop until the button is released 78 if (digitalRead(button) == HIGH) { //if button state returns to high 79 generating = 0; //set state variable to 0 80 delay(100); //delay 100ms 81 } 82 } 83} 84}
Variable Digital Die
arduino
1#include <Wire.h> 2#include <LiquidCrystal_I2C.h> 3 4LiquidCrystal_I2C LCD(0x27,20,4); 5 6int button = A0; //A0 connected to push button 7int powerOut = A2; //A0 set to a constant power output for pullup resistor 8int pot = A1; //A1 connected to potentiometer 9long randomNum = 0; //initialize random number to 0 10int generating = 0; //state for generating the random number 11int upperLimit = 0; //upperlimit for die 12int potVal = 0; //initialize input from potentiometer 13int state = 0; 14 15void setup() 16{ 17 Serial.begin(9600); //set baude rate to 9600 [standard communication rate for LCD screens] 18 pinMode(button, INPUT_PULLUP); //use internal pullup resistor on button input pin 19 pinMode(powerOut, OUTPUT); //set A2 to be a power output 20 pinMode(pot, INPUT); //set A1 to be input for potentiometer 21 LCD.begin();//Initializing display 22 LCD.backlight();//To Power ON the back light 23 delay(100); //pause for 100ms 24 LCD.clear(); //clear screen 25 delay(200); //pause for 200ms 26 digitalWrite(powerOut, HIGH); //set A2 to constantly output 5V 27} 28 29void loop() // run over and over 30{ 31 digitalWrite(powerOut, LOW); //set A2 to constantly output 0V 32 LCD.setCursor(0,0); 33 LCD.print(" DM BLAISE'S DIE "); 34 state = digitalRead(button); 35 potVal = analogRead(pot); 36 delay(10); 37 if (potVal < 25){ //if potentiometer value is less than 25.. 38 upperLimit = 3; //set upper limit to 3 (random function is upper limit exclusive so this correlates to a D2) 39 } 40 else if (potVal < 50){ 41 upperLimit = 5; //D4 42 } 43 else if (potVal < 75){ 44 upperLimit = 7; //D6 45 } 46 else if (potVal < 100){ 47 upperLimit = 9; //D8 48 } 49 else if (potVal < 125){ 50 upperLimit = 11; //D10 51 } 52 else if (potVal < 150){ 53 upperLimit = 13; //D12 54 } 55 else if (potVal > 150){ 56 upperLimit = 21; //D20 57 } 58 LCD.setCursor(9,1); //column 9, second row down 59 LCD.print("D"); //print D 60 LCD.setCursor(10,1); //column 10, second row down 61 LCD.print(upperLimit-1); //subtract 1 to reveal actual value 62 LCD.print(" "); //space to overright old data printed on screen 63 if (state == LOW){ //if the button has been pressed (0V connected to A0) 64 LCD.setCursor(0,0); //set curser at first pixel 65 LCD.print(" DM BLAISE'S DIE "); //center text on top row 66 generating = 1; //state of loop is 1 67 randomNum = random(1, upperLimit); //generate a number between 1 and set value (upper value EXCLUSIVE) 68 LCD.clear(); //clear screen 69 LCD.setCursor(9,1); //column 9, second row down 70 LCD.print("D"); //print "D" for Dice 71 LCD.setCursor(10,1); //Column 10, second row down 72 LCD.print(upperLimit-1); //subtract one from upperLimit to reveal the die number 73 LCD.print(" "); //space 74 LCD.setCursor(9,2); //column 9, third row down 75 LCD.print(randomNum); //print the random number 76 delay(100); //delay 100ms to debounce the button 77 while (generating == 1){ //stay in a loop until the button is released 78 if (digitalRead(button) == HIGH) { //if button state returns to high 79 generating = 0; //set state variable to 0 80 delay(100); //delay 100ms 81 } 82 } 83} 84}
Downloadable files
Arduino Uno to LCD Screen
Arduino Uno to LCD Screen
Arduino Uno to Push Button
Arduino Uno to Push Button
Arduino Uno to LCD Screen
Arduino Uno to LCD Screen
Arduino Uno to Push Button
Arduino Uno to Push Button
Arduino Uno to Potentiometer
Arduino Uno to Potentiometer
Comments
Only logged in users can leave comments
Isabellaw55
0 Followers
•0 Projects
Table of contents
Intro
1
0