#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
#define TFT_DC 9
#define TFT_CS 10
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
#define OLED_WIDTH 128
#define OLED_HEIGHT 64
Adafruit_SSD1306 oled(OLED_WIDTH, OLED_HEIGHT, &Wire, -1);
char *leaders[] = { "Mando", "Lando" ,"Fenec", "Cad Bane"};
//char *leaders[] = { "Mando", "Lando" ,"Fenec", "Cad Bane","Boba ","Han Solo","Thrawn","Jyn Erso","Bo Katan","Han Young","Bossk","Red4","Sabine","Vader","IG88","Red4","Saxon","Fin"," Blue4 ","Rey","Blue4","Luke","Chirrut", "Boba Dayimo" };
char *bases[] = { "Green", "Red", "Blue", "Yellow","ECL", "TARKIN TOWN", "SEC COMPEX", "Jedha" };
//char *leaders[] = { "Mando", "Lando", "Fenec", "Cad Bane","Boba", "TARKIN TOWN", "SEC COMPEX", "Jedha" , "Green", "Red", "Blue", "Yellow","ECL", "TARKIN TOWN", "SEC COMPEX", "Jedha"};
const int plus1 = A0;
const int plus3 = A1;
const int plus5 = A2;
const int minus1 = 3;
const int minus3 = 4;
const int minus5 = 5;
int base_choice=A3;
int leader_choice=A6;
int accept=A7;
const int leader_button =6;
const int base_button = 7;
const int reset0 = 8;
const int singledigi = 30;
const int doubledigi = 50;
int life25 = 25;
int life30 = 30;
int life0 = 0;
int delaypress = 200;
int currentlife=0;
int State_plus1 = 0;
int State_plus3 = 0;
int State_plus5 = 0;
int State_minus1 = 0;
int State_minus3 = 0;
int State_minus5 = 0;
int State_reset25 = 0;
int State_reset30 = 0;
int State_reset0 = 0;
int leader_state=0;
int base_state=0;
bool leader_life=true;
bool base_usage=true;
volatile int chosen_leader=0;
volatile int chosen_base=0;
void setup() {
oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);
tft.begin();
tft.setRotation(1);
tft.fillScreen(ILI9341_PURPLE);
tft.setCursor(0, 0);
tft.setTextColor(ILI9341_GREEN); tft.setTextSize(2);
tft.println("ALB DESIGN");
tft.setCursor(0, 50);
tft.setTextColor(ILI9341_YELLOW);
tft.setTextSize(3);
tft.println("LIFE COUNTER");
tft.setTextSize(6);
tft.println("3000");
delay(1000);
oled.clearDisplay();
oled.setTextSize(3);
oled.setTextColor(WHITE);
oled.setCursor(20, 20);
oled.println("LIFE");
oled.setCursor(0, 42);
oled.println("COUNTER");
oled.setTextSize(1);
oled.setCursor(0, 0);
oled.println(" BY ALB");
oled.display();
pinMode(plus1, INPUT);
pinMode(plus3, INPUT);
pinMode(plus5, INPUT);
pinMode(minus1, INPUT);
pinMode(minus3, INPUT);
pinMode(minus5, INPUT);
pinMode(base_choice, INPUT);
pinMode(leader_choice, INPUT);
pinMode(accept, INPUT_PULLUP);
pinMode(leader_button, INPUT);
pinMode(base_button, INPUT);
pinMode(reset0, INPUT);
}
void display_life(){
delay(delaypress);
oled.clearDisplay();
oled.setTextSize(5);
if (currentlife <= 0) {currentlife=0;};
if (currentlife > 99) {currentlife=0;};
if (currentlife < 10) {oled.setCursor(doubledigi, 30);} else {oled.setCursor(singledigi, 30);};
oled.println(currentlife);
oled.setTextSize(1);
oled.setCursor(0, 0);
oled.println("LEADER: ");
//oled.setCursor(40, 0);
if (leader_life==true) {oled.print("ALIVE");} else {oled.print("DEAD");}
oled.setCursor(97, 0);
oled.println("BASE:");
if (base_usage==true) {oled.setCursor(80, 8);oled.print("NOT USED");}
else {oled.setCursor(97, 8);oled.print("USED");}
oled.display();
display_life_tft();
}
void display_life_tft(){
tft.fillScreen(ILI9341_BLACK);
tft.setCursor(0, 0);
tft.setTextSize(2);
tft.setTextColor(ILI9341_YELLOW);
tft.print(leaders[chosen_leader]);
tft.setCursor(0, 25);
if (leader_life==true) {tft.print("ALIVE");} else {tft.print("DEAD");}
tft.setCursor(170, 0);
tft.setTextColor(ILI9341_YELLOW);
tft.setTextSize(2);
tft.print("BASE:"); tft.print(bases[chosen_base]);
tft.setCursor(170, 25);
if (base_usage==true) {tft.print("NOT USED");} else {tft.print("USED");}
tft.setTextColor(ILI9341_PURPLE);
tft.setTextSize(12);
if (currentlife < 10) {tft.setCursor(110, 100);} else {tft.setCursor(90, 100);};
tft.print(currentlife);
}
void base_leader_choice(){
int vert = analogRead(base_choice);
int horz = analogRead(leader_choice);
if (vert>700) {chosen_base=chosen_base+1; if (chosen_base>=8) {chosen_base=0;};display_life();}
if (vert<300) {chosen_base-=1; if (chosen_base<0) {chosen_base=7;};display_life();}
if (horz>700) {chosen_leader+=1; if (chosen_leader>=32) {chosen_leader=0;};display_life();}
if (horz<300) {chosen_leader-=1; if (chosen_leader<0) {chosen_leader=31;};display_life();}
delay(100);
}
void loop() {
base_leader_choice();
State_plus1 = digitalRead(plus1);
State_plus3 = digitalRead(plus3);
State_plus5 = digitalRead(plus5);
State_minus1 = digitalRead(minus1);
State_minus3 = digitalRead(minus3);
State_minus5 = digitalRead(minus5);
base_state = digitalRead(base_button);
leader_state = digitalRead(leader_button);
State_reset0 = digitalRead(reset0);
if (base_state == HIGH) {leader_life=!leader_life; display_life();}
if (leader_state == HIGH) {base_usage=!base_usage; display_life();}
if (State_reset0 == HIGH) {currentlife=life0; leader_life=1;base_usage=1; display_life();}
if (State_plus1 == HIGH) {currentlife=currentlife+1; display_life();}
if (State_plus3 == HIGH) {currentlife=currentlife+3; display_life();}
if (State_plus5 == HIGH) {currentlife=currentlife+5; display_life();}
if (State_minus1 == HIGH) {currentlife=currentlife-1; display_life();}
if (State_minus3 == HIGH) {currentlife=currentlife-3; display_life();}
if (State_minus5 == HIGH) {currentlife=currentlife-5; display_life();}
}