Create yahzee.ino
This commit is contained in:
parent
16a0ac8112
commit
206c4d58ac
106
School/vg2/Yahzee/yahzee.ino
Normal file
106
School/vg2/Yahzee/yahzee.ino
Normal file
@ -0,0 +1,106 @@
|
||||
#include <stdio.h>
|
||||
|
||||
#define DICEN 5
|
||||
|
||||
#define RUMBLE 2
|
||||
#define DC1LCK 3
|
||||
#define DC2LCK 4
|
||||
#define DC3LCK 5
|
||||
#define DC4LCK 6
|
||||
#define DC5LCK 7
|
||||
|
||||
#define SHCLK 8
|
||||
#define DCSR 9
|
||||
|
||||
int toDice(int n);
|
||||
unsigned long int shift(int* numbers);
|
||||
|
||||
uint8_t dicerolls[DICEN];
|
||||
|
||||
void setup() {
|
||||
randomSeed(analougeRead(0));
|
||||
|
||||
pinMode(RUMBLE, INPUT);
|
||||
pinMode(DC1LCK, INPUT);
|
||||
pinMode(DC2LCK, INPUT);
|
||||
pinMode(DC3LCK, INPUT);
|
||||
pinMode(DC4LCK, INPUT);
|
||||
pinMode(DC5LCK, INPUT);
|
||||
|
||||
pinMode(SHCLK, OUTPUT);
|
||||
pinMode(DCSR, OUTPUT);
|
||||
|
||||
for (int i = 0; i < DICEN; i++) {
|
||||
dicerolls[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void loop() {
|
||||
if (digitalRead(RUMBLE) == HIGH) {
|
||||
if (digitalRead(DC1LCK) == LOW) {
|
||||
dicerolls[0] = random(1, 7);
|
||||
}
|
||||
if (digitalRead(DC2LCK) == LOW) {
|
||||
dicerolls[1] = random(1, 7);
|
||||
}
|
||||
if (digitalRead(DC3LCK) == LOW) {
|
||||
dicerolls[2] = random(1, 7);
|
||||
}
|
||||
if (digitalRead(DC4LCK) == LOW) {
|
||||
dicerolls[3] = random(1, 7);
|
||||
}
|
||||
if (digitalRead(DC5LCK) == LOW) {
|
||||
dicerolls[4] = random(1, 7);
|
||||
}
|
||||
unsigned long int result = shift(dicerolls)
|
||||
/*shiftOut(result >> 16);
|
||||
shiftOut(result >> 8);
|
||||
shiftOut(result);*/
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* A | B | C | D
|
||||
1 = 1 | 0 | 0 | 0 0x8
|
||||
2 = 0 | 0 | 1 | 0 0x2
|
||||
3 = 1 | 0 | 1 | 0 0xA
|
||||
4 = 0 | 1 | 1 | 0 0x6
|
||||
5 = 1 | 1 | 1 | 0 0xE
|
||||
6 = 0 | 1 | 1 | 1 0x7 */
|
||||
int toDice(int n) {
|
||||
// anything out of bounds turns the dice off
|
||||
// Should probably use 0 for that though
|
||||
|
||||
switch (n) {
|
||||
case 1:
|
||||
return 0x8;
|
||||
case 2:
|
||||
return 0x2;
|
||||
case 3:
|
||||
return 0xA;
|
||||
case 4:
|
||||
return 0x6;
|
||||
case 5:
|
||||
return 0xE;
|
||||
case 6:
|
||||
return 0x7;
|
||||
default:
|
||||
return 0x0;
|
||||
}
|
||||
}
|
||||
|
||||
/* Combines DICEN numbers in a 32 bit int
|
||||
Change data type to a long long if DICEN > 8 */
|
||||
unsigned long int shift(int* numbers) {
|
||||
|
||||
unsigned long int shiftn = 0; /* set entire 32 bit to 0 */
|
||||
|
||||
for (int i = 0; i < DICEN - 1; i++) /* For all but the last pass */ {
|
||||
shiftn = shiftn | toDice(numbers[i]); /* OR 4 bits to the int, writes it to the least significant portion */
|
||||
shiftn = shiftn << 4; /* shift the 4 bits to the left, making space for another 4 bit */
|
||||
}
|
||||
shiftn = shiftn | toDice(numbers[DICEN - 1]); /* For the last pass, only OR */
|
||||
|
||||
return shiftn; /* End result is a number representing your data outputs for all DICEN */
|
||||
}
|
Loading…
Reference in New Issue
Block a user