AndrewB8
Published

Binary D2-20 LED Display

Basic five LED display that can show common die from D&D using two buttons, one as a randomiser, and one as a menu/roll state activator.

BeginnerWork in progress824
Binary D2-20 LED Display

Things used in this project

Story

Read more

Code

D20_Sketch

C/C++
Base code for the project, upload to Arduino Uno
int bin1 = 13; //pins 13 - 9 used for lights 1 - 16
int bin2 = 12;
int bin4 = 11;
int bin8 = 10;
int bin16 = 9;
int menustate = 0; // 0 menustate will be standard d20
int heightlimit = 21; // 21 heightlimit means roll cannot exceed 20 (exclusive maximum)
int rollvalue = 0; // begin at 0 so lights do not initialise on, allows a baseline to start from
int rollbutton = 3; // pins 2 and 3 used for detecting menu or roll press
int menubutton = 2;
int rollon = LOW; // on states are HIGH if digitalRead of menu/roll are high, allows if to function
int menuon = LOW;
int menuhasdisplayed = 0; // decaying variable ensures menu value is not constantly displayed and does not interrupt
void setup() {
pinMode(bin1, OUTPUT);
pinMode(bin2, OUTPUT);
pinMode(bin4, OUTPUT);
pinMode(bin8, OUTPUT);
pinMode(bin16, OUTPUT);
pinMode(rollbutton, INPUT);
pinMode(menubutton, INPUT);
Serial.begin(9600);
}

void loop() {
  Serial.println(menustate);
rollon = digitalRead(rollbutton);
menuon = digitalRead(menubutton);

if(rollon == HIGH){
  rollvalue = random(1, heightlimit);
  delay(5);
}
if(menuon == HIGH){
  menustate++;
  menuhasdisplayed = 0;
  delay(750);
}
if(menustate == 6){
  menustate = 0;
}
if(menustate == 0 && menuhasdisplayed == 0){
  heightlimit = 21;
  digitalWrite(bin1, LOW);
  digitalWrite(bin2, LOW);
  digitalWrite(bin4, HIGH);
  digitalWrite(bin8, LOW);
  digitalWrite(bin16, HIGH);
  delay(750);
  menuhasdisplayed = 1;
}
if(menustate == 1 && menuhasdisplayed == 0){
  heightlimit = 3;
  digitalWrite(bin1, LOW);
  digitalWrite(bin2, HIGH);
  digitalWrite(bin4, LOW);
  digitalWrite(bin8, LOW);
  digitalWrite(bin16, LOW);
  delay(750);
  menuhasdisplayed = 1;
}
if(menustate == 2 && menuhasdisplayed == 0){
  heightlimit = 5;
  digitalWrite(bin1, LOW);
  digitalWrite(bin2, LOW);
  digitalWrite(bin4, HIGH);
  digitalWrite(bin8, LOW);
  digitalWrite(bin16, LOW);
  delay(750);
  menuhasdisplayed = 1;
}
if(menustate == 3 && menuhasdisplayed == 0){
  heightlimit = 9;
  digitalWrite(bin1, LOW);
  digitalWrite(bin2, LOW);
  digitalWrite(bin4, LOW);
  digitalWrite(bin8, HIGH);
  digitalWrite(bin16, LOW);
  delay(750);
  menuhasdisplayed = 1;
}
if(menustate == 4 && menuhasdisplayed == 0){
  heightlimit = 11;
  digitalWrite(bin1, LOW);
  digitalWrite(bin2, HIGH);
  digitalWrite(bin4, LOW);
  digitalWrite(bin8, HIGH);
  digitalWrite(bin16, LOW);
  delay(750);
  menuhasdisplayed = 1;
}
if(menustate == 5 && menuhasdisplayed == 0){
  heightlimit = 13;
  digitalWrite(bin1, LOW);
  digitalWrite(bin2, LOW);
  digitalWrite(bin4, HIGH);
  digitalWrite(bin8, HIGH);
  digitalWrite(bin16, LOW);
  delay(750);
  menuhasdisplayed = 1;
}

// ledblock begin
  
if(rollvalue == 0) {
  digitalWrite(bin1, LOW);
  digitalWrite(bin2, LOW);
  digitalWrite(bin4, LOW);
  digitalWrite(bin8, LOW);
  digitalWrite(bin16, LOW);
}
if(rollvalue == 1) {
  digitalWrite(bin1, HIGH);
  digitalWrite(bin2, LOW);
  digitalWrite(bin4, LOW);
  digitalWrite(bin8, LOW);
  digitalWrite(bin16, LOW);
}
if(rollvalue == 2) {
  digitalWrite(bin1, LOW);
  digitalWrite(bin2, HIGH);
  digitalWrite(bin4, LOW);
  digitalWrite(bin8, LOW);
  digitalWrite(bin16, LOW);
}
if(rollvalue == 3) {
  digitalWrite(bin1, HIGH);
  digitalWrite(bin2, HIGH);
  digitalWrite(bin4, LOW);
  digitalWrite(bin8, LOW);
  digitalWrite(bin16, LOW);
}
if(rollvalue == 4) {
  digitalWrite(bin1, LOW);
  digitalWrite(bin2, LOW);
  digitalWrite(bin4, HIGH);
  digitalWrite(bin8, LOW);
  digitalWrite(bin16, LOW);
}
if(rollvalue == 5) {
  digitalWrite(bin1, HIGH);
  digitalWrite(bin2, LOW);
  digitalWrite(bin4, HIGH);
  digitalWrite(bin8, LOW);
  digitalWrite(bin16, LOW);
}
if(rollvalue == 6) {
  digitalWrite(bin1, LOW);
  digitalWrite(bin2, HIGH);
  digitalWrite(bin4, HIGH);
  digitalWrite(bin8, LOW);
  digitalWrite(bin16, LOW);
}
if(rollvalue == 7) {
  digitalWrite(bin1, HIGH);
  digitalWrite(bin2, HIGH);
  digitalWrite(bin4, HIGH);
  digitalWrite(bin8, LOW);
  digitalWrite(bin16, LOW);
}
if(rollvalue == 8) {
  digitalWrite(bin1, LOW);
  digitalWrite(bin2, LOW);
  digitalWrite(bin4, LOW);
  digitalWrite(bin8, HIGH);
  digitalWrite(bin16, LOW);
}
if(rollvalue == 9) {
  digitalWrite(bin1, HIGH);
  digitalWrite(bin2, LOW);
  digitalWrite(bin4, LOW);
  digitalWrite(bin8, HIGH);
  digitalWrite(bin16, LOW);
}
if(rollvalue == 10) {
  digitalWrite(bin1, LOW);
  digitalWrite(bin2, HIGH);
  digitalWrite(bin4, LOW);
  digitalWrite(bin8, HIGH);
  digitalWrite(bin16, LOW);
}
if(rollvalue == 11) {
  digitalWrite(bin1, HIGH);
  digitalWrite(bin2, HIGH);
  digitalWrite(bin4, LOW);
  digitalWrite(bin8, HIGH);
  digitalWrite(bin16, LOW);
}
if(rollvalue == 12) {
  digitalWrite(bin1, LOW);
  digitalWrite(bin2, LOW);
  digitalWrite(bin4, HIGH);
  digitalWrite(bin8, HIGH);
  digitalWrite(bin16, LOW);
}
if(rollvalue == 13) {
  digitalWrite(bin1, HIGH);
  digitalWrite(bin2, LOW);
  digitalWrite(bin4, HIGH);
  digitalWrite(bin8, HIGH);
  digitalWrite(bin16, LOW);
}
if(rollvalue == 14) {
  digitalWrite(bin1, LOW);
  digitalWrite(bin2, HIGH);
  digitalWrite(bin4, HIGH);
  digitalWrite(bin8, HIGH);
  digitalWrite(bin16, LOW);
}
if(rollvalue == 15) {
  digitalWrite(bin1, HIGH);
  digitalWrite(bin2, HIGH);
  digitalWrite(bin4, HIGH);
  digitalWrite(bin8, HIGH);
  digitalWrite(bin16, LOW);
}
if(rollvalue == 16) {
  digitalWrite(bin1, LOW);
  digitalWrite(bin2, LOW);
  digitalWrite(bin4, LOW);
  digitalWrite(bin8, LOW);
  digitalWrite(bin16, HIGH);
}
if(rollvalue == 17) {
  digitalWrite(bin1, HIGH);
  digitalWrite(bin2, LOW);
  digitalWrite(bin4, LOW);
  digitalWrite(bin8, LOW);
  digitalWrite(bin16, HIGH);
}
if(rollvalue == 18) {
  digitalWrite(bin1, LOW);
  digitalWrite(bin2, HIGH);
  digitalWrite(bin4, LOW);
  digitalWrite(bin8, LOW);
  digitalWrite(bin16, HIGH);
}
if(rollvalue == 19) {
  digitalWrite(bin1, HIGH);
  digitalWrite(bin2, HIGH);
  digitalWrite(bin4, LOW);
  digitalWrite(bin8, LOW);
  digitalWrite(bin16, HIGH);
}
if(rollvalue == 20) {
  digitalWrite(bin1, LOW);
  digitalWrite(bin2, LOW);
  digitalWrite(bin4, HIGH);
  digitalWrite(bin8, LOW);
  digitalWrite(bin16, HIGH);
}
delay(5);
}

Credits

AndrewB8

AndrewB8

0 projects • 0 followers

Comments