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);
}
Comments