#include <RotaryEncoder.h>
#include <Wire.h>
#include "SevSeg.h"
#define CLK 12
#define DT 11
#define SW 53
RotaryEncoder encoder(CLK, DT);
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Pinos dos botões
#define bt_eq1_mais 22
#define bt_eq1_menos 23
#define bt_eq2_mais 24
#define bt_eq2_menos 25
int pt_eq1 = 0;
int pt_eq2 = 0;
int set_eq1 = 0;
int set_eq2 = 0;
bool trocando_lados = false;
SevSeg sevseg1;
SevSeg sevseg2;
SevSeg sevseg3;
SevSeg sevseg4;
void setup() {
Serial.begin(9600);
byte numDigits = 2;
byte digitPins[] = {2, 3};
byte segmentPins[] = {4, 5, 6, 7, 8, 9, 10};
byte digitPins2[] = {26, 28};
byte segmentPins2[] = {29, 31, 32, 33, 34, 35, 36};
byte digitPins3[] = {44};
byte segmentPins3[] = {37, 38, 39, 40, 41, 42, 43};
byte digitPins4[] = {45};
byte segmentPins4[] = {46, 47, 48, 49, 50, 51, 52};
bool resSeg = true;
byte config = COMMON_ANODE;
bool upDelays = true;
bool leadingZeros = true;
bool decPoint = true;
sevseg1.begin(config, numDigits, digitPins, segmentPins, resSeg, upDelays, leadingZeros, decPoint);
sevseg1.setBrightness(90);
sevseg2.begin(config, 2, digitPins2, segmentPins2, resSeg, upDelays, leadingZeros, decPoint);
sevseg2.setBrightness(90);
sevseg3.begin(config, 1, digitPins3, segmentPins3, resSeg, upDelays, leadingZeros);
sevseg3.setBrightness(90);
sevseg4.begin(config, 1, digitPins4, segmentPins4, resSeg, upDelays, leadingZeros);
sevseg4.setBrightness(90);
lcd.init();
lcd.setBacklight(HIGH);
lcd.setCursor(0, 0);
lcd.print("GIRE O PINO");
lcd.setCursor(0, 1);
lcd.print("ESCOLHA O MODO");
pinMode(bt_eq1_mais, INPUT_PULLUP);
pinMode(bt_eq1_menos, INPUT_PULLUP);
pinMode(bt_eq2_mais, INPUT_PULLUP);
pinMode(bt_eq2_menos, INPUT_PULLUP);
pinMode(CLK, INPUT);
pinMode(DT, INPUT);
pinMode(SW, INPUT_PULLUP);
}
int pos = HIGH;
int modo = 0;
bool tiebreak = false;
bool quadra = false;
bool areia = false;
void loop() {
sevseg1.setNumber(pt_eq1);
sevseg2.setNumber(pt_eq2);
sevseg3.setNumber(set_eq1);
sevseg4.setNumber(set_eq2);
sevseg1.refreshDisplay();
sevseg2.refreshDisplay();
sevseg3.refreshDisplay();
sevseg4.refreshDisplay();
int bt_estado = digitalRead(SW);
int novaPos = digitalRead(CLK);
if (novaPos != pos) {
pos = novaPos;
int DIO_val = digitalRead(DT);
if (novaPos == LOW && DIO_val == HIGH) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("MODO");
lcd.setCursor(0, 1);
lcd.print("QUADRA");
quadra = true;
areia = false;
}
if (novaPos == LOW && DIO_val == LOW) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("MODO");
lcd.setCursor(0, 1);
lcd.print("AREIA");
quadra = false;
areia = true;
}
}
if (bt_estado == LOW && quadra == true) {
modo = 1;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("MODO QUADRA");
lcd.setCursor(0, 1);
lcd.print("SELECIONADO");
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("EQUIPE 1 :");
lcd.setCursor(0, 1);
lcd.print("EQUIPE 2 :");
}
if (bt_estado == LOW && areia == true) {
modo = 3;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("MODO AREIA");
lcd.setCursor(0, 1);
lcd.print("SELECIONADO");
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("EQUIPE 1 :");
lcd.setCursor(0, 1);
lcd.print("EQUIPE 2 :");
}
switch (modo) {
//----------------------------------QUADRA------------------------------
case 1:
if (pt_eq1 == 25 && pt_eq1 - pt_eq2 >= 2) {
set_eq1++;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("SET EQUIPE 1");
delay(5000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("FIM DO SET");
delay(10000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("EQUIPE 1 :");
lcd.setCursor(0, 1);
lcd.print("EQUIPE 2 :");
pt_eq1 = 0;
lcd.setCursor(12, 0);
lcd.print(set_eq1);
lcd.setCursor(12, 1);
lcd.print(set_eq2);
}
if (pt_eq2 == 25 && pt_eq2 - pt_eq1 >= 2) {
set_eq2++;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("SET EQUIPE 2");
delay(5000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("FIM DO SET");
delay(30000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("EQUIPE 1 :");
lcd.setCursor(0, 1);
lcd.print("EQUIPE 2 :");
pt_eq2 = 0;
lcd.setCursor(12, 0);
lcd.print(set_eq1);
lcd.setCursor(12, 1);
lcd.print(set_eq2);
}
if (set_eq1 == 3) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("VITORIA");
lcd.setCursor(0, 1);
lcd.print("EQUIPE 1");
delay(10000);
}
if (set_eq2 == 3) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("VITORIA");
lcd.setCursor(0, 1);
lcd.print("EQUIPE 2");
delay(10000);
}
//---------------------------------TIEBREAK QUADRA--------------------
else if (set_eq1 == 2 && set_eq2 == 2) {
modo = 2;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("TIEBREAK");
delay(5000);
lcd.clear();
pt_eq1 = 0;
pt_eq2 = 0;
set_eq1 = 0;
set_eq2 = 0;
}
botao_controle();
break;
case 2:
lcd.setCursor(0, 0);
lcd.print("EQUIPE 1 :");
lcd.setCursor(0, 1);
lcd.print("EQUIPE 2 :");
if (!trocando_lados && (pt_eq1 == 8 || pt_eq2 == 8)) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("TROCANDO LADOS");
trocando_lados = true;
delay(30000);
lcd.clear();
} else if (trocando_lados && pt_eq1 != 8 && pt_eq2 != 8) {
trocando_lados = false;
}
if (pt_eq1 == 15 && pt_eq1 - pt_eq2 >= 2) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("VITORIA");
lcd.setCursor(0, 1);
lcd.print("EQUIPE 1");
delay(10000);
}
if (pt_eq2 == 15 && pt_eq2 - pt_eq1 >= 2) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("VITORIA");
lcd.setCursor(0, 1);
lcd.print("EQUIPE 2");
delay(10000);
pt_eq2 = 0;
}
botao_controle();
delay(50);
break;
//--------------------------------AREIA--------------------------
case 3:
if (pt_eq1 == 21 && pt_eq1 - pt_eq2 >= 2) {
set_eq1++;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("SET EQUIPE 1");
delay(5000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("FIM DO SET");
delay(30000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("EQUIPE 1 :");
lcd.setCursor(0, 1);
lcd.print("EQUIPE 2 :");
pt_eq1 = 0;
}
if (pt_eq2 == 21 && pt_eq2 - pt_eq1 >= 2) {
set_eq2++;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("SET EQUIPE 2");
delay(5000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("FIM DO SET");
delay(30000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("EQUIPE 1 :");
lcd.setCursor(0, 1);
lcd.print("EQUIPE 2 :");
pt_eq2 = 0;
}
if (set_eq1 == 2) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("VITORIA");
lcd.setCursor(0, 1);
lcd.print("EQUIPE 1");
delay(10000);
}
if (set_eq2 == 2) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("VITORIA");
lcd.setCursor(0, 1);
lcd.print("EQUIPE 2");
delay(10000);
}
//---------------------------TIEBREAK AREIA-----------------------------
else if (set_eq1 == 1 && set_eq2 == 1) {
modo = 4;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("TIEBREAK");
delay(5000);
lcd.clear();
pt_eq1 = 0;
pt_eq2 = 0;
set_eq1 = 0;
set_eq2 = 0;
}
botao_controle();
break;
case 4:
lcd.setCursor(0, 0);
lcd.print("EQUIPE 1 :");
lcd.setCursor(0, 1);
lcd.print("EQUIPE 2 :");
int x = (pt_eq1 + pt_eq2) % 7;
if (!trocando_lados && x == 0) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("TROCANDO LADOS");
trocando_lados = true;
delay(30000);
lcd.clear();
} else if (trocando_lados && x != 0) {
trocando_lados = false;
}
if (pt_eq1 == 15 && pt_eq1 - pt_eq2 >= 2) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("VITORIA");
lcd.setCursor(0, 1);
lcd.print("EQUIPE 1");
delay(10000);
}
if (pt_eq2 == 15 && pt_eq2 - pt_eq1 >= 2) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("VITORIA");
lcd.setCursor(0, 1);
lcd.print("EQUIPE 2");
delay(10000);
pt_eq2 = 0;
}
botao_controle();
delay(50);
break;
}
}
// ----------------------------FUNÇÃO CONTROLE DOS BOTOES-------------
void botao_controle(){
if (!digitalRead(bt_eq1_mais)) {
pt_eq1++;
while (!digitalRead(bt_eq1_mais)) {
}
delay(300);
}
if (!digitalRead(bt_eq1_menos)) {
pt_eq1--;
while (!digitalRead(bt_eq1_menos)) {
}
delay(300);
}
if (!digitalRead(bt_eq2_mais)) {
pt_eq2++;
while (!digitalRead(bt_eq2_mais)) {
}
delay(300);
}
if (!digitalRead(bt_eq2_menos)) {
pt_eq2--;
while (!digitalRead(bt_eq2_menos)) {
}
delay(300);
}
}