#include <SevSeg.h>
const int button1 = 52, button2 = 53;
const int led1 = 12, led2 = 11;
bool ready1 = false, ready2 = false;
const int gameTime = 4000;
SevSeg sevseg;
void setup() {
byte numDigits = 4;
byte digitPins[] = {44, 45, 42, 43};
byte segmentPins[] = {23, 22, 38, 28, 29, 24, 36, 4};
bool resistorsOnSegments = true;
bool updateWithDelaysIn = true;
byte hardwareConfig = COMMON_CATHODE;
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
sevseg.setBrightness(90);
}
int counter = 0;
int sub_counter = 0;
void loop() {
while (!(ready1 && ready2)){
sevseg.refreshDisplay();
int state1 = digitalRead(button1), state2 = digitalRead(button2);
if (state1 == 1){
ready1 = true;
}
if (state2 == 1){
ready2 = true;
}
if (ready1){
sevseg.setChars("P1 ");
}
else if (ready2){
sevseg.setChars(" P2");
}
else {
sevseg.setChars(" ");
}
delay(1);
}
sevseg.setChars("p1p2");
for (int i = 0; i < 1000; i ++){
sevseg.refreshDisplay();
delay(1);
}
int startDelay = 2500;
for (int i = 0; i < startDelay; i ++){
sevseg.setChars("REDY");
sevseg.refreshDisplay();
delay(1);
}
counter = gameTime;
int potato = rand() % 2 + 1;
int winner = 0;
while (counter > 0){
if (potato == 1){
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
}
else {
digitalWrite(led2, HIGH);
digitalWrite(led1, LOW);
}
int t1 = digitalRead(button1), t2 = digitalRead(button2);
int l = 0;
if (t1 == 1){
if (potato == 1){
potato = 0;
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
l = throw_p(1);
potato = 2;
}
else {
potato = 1;
break;
}
}
if (t2 == 1){
if (potato == 2){
potato = 0;
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
l = throw_p(2);
potato = 1;
}
else {
potato = 2;
break;
}
}
if (l == 1){
potato = 1;
break;
}
if (l == 2){
potato = 2;
break;
}
counter --;
sevseg.setNumber(counter);
sevseg.refreshDisplay();
delay(1);
}
if (potato == 2){
winner = 1;
}
if (potato == 1){
winner = 2;
}
flash_until_press(winner);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
ready1 = false, ready2 = false;
delay(1);
}
int throw_p(int u){
bool p1rel = false, p2rel = false;
int val = rand() % 50 + 70;
char t[4] = {' ', ' ', ' ', ' '};
for (int c = 0; c < 5; c ++){
for (int i = 0; i < val; i ++){
sevseg.setChars(t);
sevseg.refreshDisplay();
if (digitalRead(button1) == 1){
if (p1rel){
return 1;
}
}
else {
p1rel = true;
}
if (digitalRead(button2) == 1){
if (p2rel){
return 2;
}
}
else {
p2rel = true;
}
delay(1);
}
if (c != 4){
if (u == 1){
t[c] = '-';
}
else{
t[3 - c] = '-';
}
}
}
return 0;
}
void flash_until_press(int w){
bool rel1 = false, rel2 = false;
int c = 0;
for (int i = 0; i < 400; i ++){
if (c > 100 && c < 200){
sevseg.setChars("");
}
else if (c > 0) {
if (w == 1){
sevseg.setChars("P1 ");
}
else {
sevseg.setChars(" P2");
}
}
c ++;
if (c >= 200){
c = 0;
}
sevseg.refreshDisplay();
delay(1);
}
while (!((rel1 && digitalRead(button1) == 1) || (rel2 && digitalRead(button2) == 1))){
if (c > 100 && c < 200){
sevseg.setChars("");
}
else {
if (w == 1){
sevseg.setChars("P1 ");
}
else {
sevseg.setChars(" P2");
}
}
c ++;
if (c >= 200){
c = 0;
}
sevseg.refreshDisplay();
if (digitalRead(button1) == 0){
rel1 = true;
}
if (digitalRead(button2) == 0){
rel2 = true;
}
delay(1);
}
}
Comments
Please log in or sign up to comment.