#include <Arduino.h>
#include "Adafruit_LEDBackpack.h"
#include "RotaryEncoder.h"
#include "timers.h"
#include "constants.h"
#include "timer_edit_mode.h"
#include "backpack_display.h"
#include "time_converter.h"
const int button_player_01 = 4;
const int button_player_02 = 2;
const int button_pause = 3;
const int pin_buzzer = 12;
RotaryEncoder rotary_player_01(8, 9, RotaryEncoder::LatchMode::TWO03);
const int edit_mode_player_01_sw = 10;
RotaryEncoder rotary_player_02(5, 6, RotaryEncoder::LatchMode::TWO03);
const int edit_mode_player_02_sw = 7;
Adafruit_7segment display_player_01 = Adafruit_7segment();
Adafruit_7segment display_player_02 = Adafruit_7segment();
float brightness_max = 18;
float brightness_min = 1;
bool edit_mode_activated = false;
TimerEditMode edit_player_01;
TimerEditMode edit_player_02;
Byoyomi byoyomi_player_01;
Fischer fischer_player_01;
Bronstein bronstein_player_01;
Byoyomi byoyomi_player_02;
Fischer fischer_player_02;
Bronstein bronstein_player_02;
AbstractTimer* player_01 = &bronstein_player_01;
AbstractTimer* player_02 = &bronstein_player_02;
void setup() {
Serial.begin(9600);
display_player_01.begin(0x70);
display_player_02.begin(0x71);
pinMode(button_player_01, INPUT);
digitalWrite(button_player_01, HIGH);
pinMode(button_player_02, INPUT);
digitalWrite(button_player_02, HIGH);
pinMode(button_pause, INPUT);
digitalWrite(button_pause, HIGH);
pinMode(edit_mode_player_01_sw, INPUT_PULLUP);
rotary_player_01.setPosition(0);
pinMode(edit_mode_player_02_sw, INPUT_PULLUP);
rotary_player_02.setPosition(0);
pinMode(pin_buzzer, OUTPUT);
}
void loop() {
// Edit mode
rotary_player_01.tick();
rotary_player_02.tick();
int rotary_player_01_current_state = digitalRead(edit_mode_player_01_sw);
BackpackDisplay display_text_player_01 = edit_player_01.update(rotary_player_01_current_state, rotary_player_01.getPosition(), int(rotary_player_01.getDirection()));
int rotary_player_02_current_state = digitalRead(edit_mode_player_02_sw);
BackpackDisplay display_text_player_02 = edit_player_02.update(rotary_player_02_current_state, rotary_player_02.getPosition(), int(rotary_player_02.getDirection()));
if (edit_player_01.is_needed_new_timer) {
if (edit_player_01.timer_type == BYOYOMI_DISPLAY) {
player_01 = &byoyomi_player_01;
}
else if (edit_player_01.timer_type == FISCHER_DISPLAY) {
player_01 = &fischer_player_01;
}
else if (edit_player_01.timer_type == BRONSTEIN_DISPLAY) {
player_01 = &bronstein_player_01;
}
player_01->global_time = edit_player_01.global_time;
player_01->current_time = edit_player_01.global_time;
player_01->increment_time = edit_player_01.increment_time;
player_01->increment_count = edit_player_01.increment_count;
}
if (edit_player_02.is_needed_new_timer) {
if (edit_player_02.timer_type == BYOYOMI_DISPLAY) {
player_02 = &byoyomi_player_01;
}
else if (edit_player_02.timer_type == FISCHER_DISPLAY) {
player_02 = &fischer_player_01;
}
else if (edit_player_02.timer_type == BRONSTEIN_DISPLAY) {
player_02 = &bronstein_player_01;
}
player_02->global_time = edit_player_02.global_time;
player_02->current_time = edit_player_02.global_time;
player_02->increment_time = edit_player_02.increment_time;
player_02->increment_count = edit_player_02.increment_count;
}
if (edit_player_01.is_edit_mode || edit_player_02.is_edit_mode) {
player_01->end_turn();
player_02->end_turn();
display_player_01.setBrightness(brightness_min);
display_player_02.setBrightness(brightness_min);
if (edit_player_01.is_edit_mode) {
if (edit_player_01.is_rotaty_position_needed) {
rotary_player_01.setPosition(edit_player_01.rotary_main_menu_position);
}
display_player_01.setBrightness(brightness_max);
if (display_text_player_01.text != "") {
display_player_01.println(display_text_player_01.text);
display_player_01.drawColon(display_text_player_01.colon);
}
}
if (edit_player_02.is_edit_mode) {
if (edit_player_02.is_rotaty_position_needed) {
rotary_player_02.setPosition(edit_player_02.rotary_main_menu_position);
}
display_player_02.setBrightness(brightness_max);
if (display_text_player_02.text != "") {
display_player_02.println(display_text_player_02.text);
display_player_02.drawColon(display_text_player_02.colon);
}
}
edit_player_01.rotary_last_position = rotary_player_01_current_state;
edit_player_02.rotary_last_position = rotary_player_02_current_state;
}
// Play Mode
else {
float player_01_time_left = player_01->time_left();
float player_02_time_left = player_02->time_left();
if (player_01_time_left == 0 || player_02_time_left == 0) {
player_01->active_player = false;
player_02->active_player = false;
if (player_01->is_game_just_ending || player_02->is_game_just_ending) {
tone(pin_buzzer, 400, 1000);
}
}
else {
if (digitalRead(button_player_01) == LOW) {
player_01->end_turn();
player_02->begin_turn();
display_player_01.setBrightness(brightness_min);
display_player_02.setBrightness(brightness_max);
}
if (digitalRead(button_player_02) == LOW) {
player_01->begin_turn();
player_02->end_turn();
display_player_01.setBrightness(brightness_max);
display_player_02.setBrightness(brightness_min);
}
if (digitalRead(button_pause) == LOW) {
player_01->pause_turn();
player_02->pause_turn();
display_player_01.setBrightness(brightness_min);
display_player_02.setBrightness(brightness_min);
}
}
display_player_01.println(display_as_timer(player_01_time_left));
Serial.println(display_as_timer(player_01_time_left));
display_player_01.drawColon(1);
display_player_02.println(display_as_timer(player_02_time_left));
Serial.println(display_as_timer(player_02_time_left));
display_player_02.drawColon(1);
}
display_player_01.writeDisplay();
display_player_02.writeDisplay();
}