/*
Progetto segnapunti gioco Enrico 2.0
*/
int pinButton1 = 2;
int pinButton2 = 7;
int pinButton3 = 8; //pin di selezione riga
int pinButton4 = 9; //partenza/stop timer
int pins = 13; //pin suono
int valButton1Old = LOW;
int valButton2Old = LOW;
int valButton3Old = LOW; //bottone di selezione riga
int valButton4Old = LOW; //bottone di partenza/stop timer
int cnt1 = 0; // Contatore per squadra 1
int cnt2 = 0; // Contatore per squadra 2
int cnt3 = 0; // Contatore per squadra 3
int cnt4 = 0; // Contatore per squadra 4
int cnt5 = 0; // bottone di selezione riga
int cnt6 = 0; // Contatore per squadra 5
int cnt7 = 0; // Contatore per squadra 6
int cnt8 = 0; // Contatore per squadra 7
int cnt9 = 0; // Contatore per squadra 8
int inizia = 0; //variabile di verifica per numero giocatori
int ngioca = 0; //numero giocatori
int prtnomi=0; //variabile per includere i nomi dal file esterno
//variabili nomi giocatori
char coloreg[8][12] = {" Rosso: ", " Blu: ", " Verde: ", " Bianco: ", " Nero: ", " Viola: ", " Grigio: ", " Arancio: "};
//creo una matrice per il tempo di gioco (4 3car+1null)
int temposcelta[] = {0, 1, 2, 3, 4, 5, 10, 20, 30, 40, 50, 60};
int tempo = 0; //variabile per il timer
int tempot = 0; //variabile per controllo while
int tempoi = 0; //variabile indice
int swapt = 0; // variabile swap schermo giocatori/timer
//variabili countdown
int cd1 = 0; //secondi
int cd2 = 0; //minuti
int pausat = 0;
int tmill = 0; // var per i calcolo dei millisecondi
unsigned long previousMillis = 0; // memorizzerà l'ultimo aggiornamento del tempo
//per il tasto della pausa
//volatile non può essere cambiata da altre parti di codice
volatile int stato = LOW;
#include <Wire.h> //Protocollo periferiche I2C
// include the library code:
//#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h> //schermo i2c
// set up the LCD's number of columns and rows:
//Aggiungere in diagram la seguente configurazione per più schermi
//"attrs": { "pins": "i2c", "i2c-address": "0xXX"} XX=address
//Address, colonne, righe
LiquidCrystal_I2C lcd(0x27, 20, 4);
LiquidCrystal_I2C lcd2(0x26, 20, 4);
int accendolcd2 = 0; //variabile per accendere il secondo lcd se i giocatori sono + di 4
void setup() {
lcd.init(); //inizializzo il display 1
lcd.backlight(); //accendo il display 1
//lcd2.init(); //inizializzo il display 2
//lcd2.backlight(); //accendo il display 2
pinMode(pinButton1,INPUT);
pinMode(pinButton2,INPUT);
pinMode(pinButton3,INPUT);
pinMode(pinButton4,INPUT); //partenza/pausa timer
pinMode(pins,OUTPUT); // suono
//serve ad interrompere il codice se viene premuto il tasto pausa
attachInterrupt(digitalPinToInterrupt(pinButton1), cambia, FALLING);
}
void loop() {
//********************************* Tempo di gioco INIZIO
//creo una matrice per il tempo di gioco (4 3car+1null)
//int temposcelta[] = {1, 2, 3, 4, 5, 10, 20, 30, 40, 50, 60};
//int tempo = 0; //variabile per il timer
//int tempot = 0; //variabile per controllo while
//int tempoi = 0; //variabile indice
// dopo il numero di giocatori chiedo il tempo di gioco
if (tempot == 0) //se 0 devo chiedere il tempo
{
tempot = 1;
while(true) {
int valButton1 = digitalRead(pinButton1);
int valButton2 = digitalRead(pinButton2);
int valButton3 = digitalRead(pinButton3);
//int valButton4 = digitalRead(pinButton4);
lcd.setCursor(0, 0);
lcd.print("r -1 / v +1 / n ok");
lcd.setCursor(0, 1);
lcd.print("Tempo di gioco: ");
lcd.setCursor(0, 2);
lcd.print(tempo);
lcd.print(" ");
//lcd.setCursor(0, 3);
//lcd.print(tempoi);
//delay(10000);
if(valButton1==HIGH && valButton1Old==LOW && tempoi<11)
//if(valButton1==HIGH && valButton1Old==LOW )
{
tempoi++;
tempo = temposcelta[tempoi];
//tempo = tempoi;
tone(pins, 988, 10); // nota
delay(10);
noTone(pins);
}
if(valButton2==HIGH && valButton2Old==LOW && tempoi>0)
//if(valButton2==HIGH && valButton2Old==LOW)
{
tempoi--;
tempo = temposcelta[tempoi];
tone(pins, 1319, 10); // nota
delay(10);
noTone(pins);
}
if (valButton3== HIGH && valButton3Old==LOW && tempo>0)
//if (valButton3== HIGH)
{
//delay(2000);
tone(pins, 2319, 10); // nota
delay(10);
noTone(pins);
break; // esce dal ciclo se si preme il pulsante
}
valButton1Old = valButton1;
valButton2Old = valButton2;
valButton3Old = valButton3;
//valButton4Old = valButton4;
}
}
if (tempot == 1) {
lcd.clear(); //cancello lo schermo
tempot = 2; //cosi non ripeto più questa parte di codice
//delay(2000);
}
//********************************* Tempo di gioco FINE
//********************************* Numero giocatori INIZIO
//ngioca
//inizia
// prima di cominciare il gioco chiedo quanti sono i giocatori
if (inizia == 0) //se 0 devo chiedere il numero giocatori
{
inizia = 1;
//valButton3==HIGH && valButton3Old==LOW && cnt5<5
while(true) {
int valButton1 = digitalRead(pinButton1);
int valButton2 = digitalRead(pinButton2);
int valButton3 = digitalRead(pinButton3);
//int valButton4 = digitalRead(pinButton4);
lcd.setCursor(0, 0);
lcd.print("r -1 / v +1 / n ok");
lcd.setCursor(0, 1);
lcd.print("numero giocatori: ");
lcd.setCursor(0, 2);
lcd.print(ngioca);
//delay(100);
if(valButton1==HIGH && valButton1Old==LOW && ngioca<8)
{
ngioca++;
tone(pins, 988, 10); // nota
delay(10);
noTone(pins);
}
if(valButton2==HIGH && valButton2Old==LOW && ngioca>0)
{
ngioca--;
tone(pins, 1319, 10); // nota
delay(10);
noTone(pins);
}
if (valButton3== HIGH && ngioca>0)
//if (valButton3== HIGH)
{
tone(pins, 1319, 10); // nota
delay(10);
noTone(pins);
break; // esce dal ciclo se si preme il pulsante
}
valButton1Old = valButton1;
valButton2Old = valButton2;
valButton3Old = valButton3;
//valButton4Old = valButton4;
}
}
if (inizia == 1) {
lcd.clear(); //cancello lo schermo
inizia = 2; //cosi non ripeto più questa parte di codice
//delay(2000);
int valButton1Old = LOW;
int valButton2Old = LOW;
int valButton3Old = LOW; //bottone di selezione riga nero
//int valButton4Old = LOW;
}
//********************************* Numero giocatori FINE
//********************************************************
//********************************************************
//Da questo punto devo fare lo swap dello schermo
//tra Punteggio e Timer - INIZIO
//********************************************************
//********************************************************
if(swapt == 0) //*****if di swap INIZIO
{
lcd.clear(); //cancello lo schermo
while(true) {
//lcd.setCursor(0, 1);
//lcd.print(swapt);
//delay(2000);
int valButton1 = digitalRead(pinButton1);
int valButton2 = digitalRead(pinButton2);
int valButton3 = digitalRead(pinButton3);
int valButton4 = digitalRead(pinButton4);
//*********************************Modifico il punteggio INIZIO
// seleziono la riga che voglio modificare
if(valButton3==HIGH && valButton3Old==LOW && cnt5<(ngioca+1))
cnt5++;
if(valButton3==HIGH && valButton3Old==LOW && cnt5==ngioca+1)
cnt5=1;
// seleziono la riga che voglio modificare - FINE
// stampo il carattere > sulla riga che voglio modificare
if (cnt5 == 1) //giocatore 1 selezionato
{
lcd.setCursor(0, 0);
lcd.print(">");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 2);
lcd.print(" ");
lcd.setCursor(0, 3);
lcd.print(" ");
lcd2.setCursor(0, 0);
lcd2.print(" ");
lcd2.setCursor(0, 1);
lcd2.print(" ");
lcd2.setCursor(0, 2);
lcd2.print(" ");
lcd2.setCursor(0, 3);
lcd2.print(" ");
}
if (cnt5 == 2) //giocatore 2 selezionato
{
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(">");
lcd.setCursor(0, 2);
lcd.print(" ");
lcd.setCursor(0, 3);
lcd.print(" ");
lcd2.setCursor(0, 0);
lcd2.print(" ");
lcd2.setCursor(0, 1);
lcd2.print(" ");
lcd2.setCursor(0, 2);
lcd2.print(" ");
lcd2.setCursor(0, 3);
lcd2.print(" ");
}
if (cnt5 == 3) //giocatore 3 selezionato
{
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 2);
lcd.print(">");
lcd.setCursor(0, 3);
lcd.print(" ");
lcd2.setCursor(0, 0);
lcd2.print(" ");
lcd2.setCursor(0, 1);
lcd2.print(" ");
lcd2.setCursor(0, 2);
lcd2.print(" ");
lcd2.setCursor(0, 3);
lcd2.print(" ");
}
if (cnt5 == 4) //giocatore 4 selezionato
{
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 2);
lcd.print(" ");
lcd.setCursor(0, 3);
lcd.print(">");
lcd2.setCursor(0, 0);
lcd2.print(" ");
lcd2.setCursor(0, 1);
lcd2.print(" ");
lcd2.setCursor(0, 2);
lcd2.print(" ");
lcd2.setCursor(0, 3);
lcd2.print(" ");
}
if (cnt5 == 5) //giocatore 5 selezionato
{
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 2);
lcd.print(" ");
lcd.setCursor(0, 3);
lcd.print(" ");
lcd2.setCursor(0, 0);
lcd2.print(">");
lcd2.setCursor(0, 1);
lcd2.print(" ");
lcd2.setCursor(0, 2);
lcd2.print(" ");
lcd2.setCursor(0, 3);
lcd2.print(" ");;
}
if (cnt5 == 6) //giocatore 6 selezionato
{
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 2);
lcd.print(" ");
lcd.setCursor(0, 3);
lcd.print(" ");
lcd2.setCursor(0, 0);
lcd2.print(" ");
lcd2.setCursor(0, 1);
lcd2.print(">");
lcd2.setCursor(0, 2);
lcd2.print(" ");
lcd2.setCursor(0, 3);
lcd2.print(" ");;
}
if (cnt5 == 7) //giocatore 7 selezionato
{
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 2);
lcd.print(" ");
lcd.setCursor(0, 3);
lcd.print(" ");
lcd2.setCursor(0, 0);
lcd2.print(" ");
lcd2.setCursor(0, 1);
lcd2.print(" ");
lcd2.setCursor(0, 2);
lcd2.print(">");
lcd2.setCursor(0, 3);
lcd2.print(" ");;
}
if (cnt5 == 8) //giocatore 8 selezionato
{
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 2);
lcd.print(" ");
lcd.setCursor(0, 3);
lcd.print(" ");
lcd2.setCursor(0, 0);
lcd2.print(" ");
lcd2.setCursor(0, 1);
lcd2.print(" ");
lcd2.setCursor(0, 2);
lcd2.print(" ");
lcd2.setCursor(0, 3);
lcd2.print(">");;
}
// stampo il carattere > sulla riga che voglio modificare - FINE
if (cnt5 == 1) //aumento/diminuisco il punteggio del giocatore 1
{
if(valButton1==HIGH && valButton1Old==LOW && cnt1<1000)
{
cnt1++;
tone(pins, 988, 10); // nota
delay(10);
noTone(pins);
}
if(valButton2==HIGH && valButton2Old==LOW && cnt1>0)
{
cnt1--;
tone(pins, 1319, 10); // nota
delay(10);
noTone(pins);
}
//ristampo il punteggio dopo la compattaz del codice
lcd.setCursor(12, 0);
lcd.print(cnt1);
lcd.print(" ");
}
if (cnt5 == 2) //aumento/diminuisco il punteggio del giocatore 2
{
if(valButton1==HIGH && valButton1Old==LOW && cnt2<1000)
{
cnt2++;
tone(pins, 988, 10); // nota
delay(10);
noTone(pins);
}
if(valButton2==HIGH && valButton2Old==LOW && cnt2>0)
{
cnt2--;
tone(pins, 1319, 10); // nota
delay(10);
noTone(pins);
}
//ristampo il punteggio dopo la compattaz del codice
lcd.setCursor(12, 1);
lcd.print(cnt2);
lcd.print(" ");
}
if (cnt5 == 3) //aumento/diminuisco il punteggio del giocatore 3
{
if(valButton1==HIGH && valButton1Old==LOW && cnt3<1000)
{
cnt3++;
tone(pins, 988, 10); // nota
delay(10);
noTone(pins);
}
if(valButton2==HIGH && valButton2Old==LOW && cnt3>0)
{
cnt3--;
tone(pins, 1319, 10); // nota
delay(10);
noTone(pins);
}
//ristampo il punteggio dopo la compattaz del codice
lcd.setCursor(12, 2);
lcd.print(cnt3);
lcd.print(" ");
}
if (cnt5 == 4) //aumento/diminuisco il punteggio del giocatore 4
{
if(valButton1==HIGH && valButton1Old==LOW && cnt4<1000)
{
cnt4++;
tone(pins, 988, 10); // nota
delay(10);
noTone(pins);
}
if(valButton2==HIGH && valButton2Old==LOW && cnt4>0)
{
cnt4--;
tone(pins, 1319, 10); // nota
delay(10);
noTone(pins);
}
//ristampo il punteggio dopo la compattaz del codice
lcd.setCursor(12, 3);
lcd.print(cnt4);
lcd.print(" ");
}
if (cnt5 == 5) //aumento/diminuisco il punteggio del giocatore 4
{
if(valButton1==HIGH && valButton1Old==LOW && cnt6<1000)
{
cnt6++;
tone(pins, 988, 10); // nota
delay(10);
noTone(pins);
}
if(valButton2==HIGH && valButton2Old==LOW && cnt6>0)
{
cnt6--;
tone(pins, 1319, 10); // nota
delay(10);
noTone(pins);
}
//ristampo il punteggio dopo la compattaz del codice
lcd2.setCursor(12, 0);
lcd2.print(cnt6);
lcd2.print(" ");
}
if (cnt5 == 6) //aumento/diminuisco il punteggio del giocatore 4
{
if(valButton1==HIGH && valButton1Old==LOW && cnt7<1000)
{
cnt7++;
tone(pins, 988, 10); // nota
delay(10);
noTone(pins);
}
if(valButton2==HIGH && valButton2Old==LOW && cnt7>0)
{
cnt7--;
tone(pins, 1319, 10); // nota
delay(10);
noTone(pins);
}
//ristampo il punteggio dopo la compattaz del codice
lcd2.setCursor(12, 1);
lcd2.print(cnt7);
lcd2.print(" ");
}
if (cnt5 == 7) //aumento/diminuisco il punteggio del giocatore 4
{
if(valButton1==HIGH && valButton1Old==LOW && cnt8<1000)
{
cnt8++;
tone(pins, 988, 10); // nota
delay(10);
noTone(pins);
}
if(valButton2==HIGH && valButton2Old==LOW && cnt8>0)
{
cnt8--;
tone(pins, 1319, 10); // nota
delay(10);
noTone(pins);
}
//ristampo il punteggio dopo la compattaz del codice
lcd2.setCursor(12, 2);
lcd2.print(cnt8);
lcd2.print(" ");
}
if (cnt5 == 8) //aumento/diminuisco il punteggio del giocatore 4
{
if(valButton1==HIGH && valButton1Old==LOW && cnt9<1000)
{
cnt9++;
tone(pins, 988, 10); // nota
delay(10);
noTone(pins);
}
if(valButton2==HIGH && valButton2Old==LOW && cnt9>0)
{
cnt9--;
tone(pins, 1319, 10); // nota
delay(10);
noTone(pins);
}
//ristampo il punteggio dopo la compattaz del codice
lcd2.setCursor(12, 3);
lcd2.print(cnt9);
lcd2.print(" ");
}
//*********************************Modifico il punteggio FINE
//*********************************Stampo i nomi INIZIO
if (prtnomi==0)
{
prtnomi=1; //uso questa variabile per fare il ciclo 1 volta sola
//*********************************Stampo i nomi INZIO
for (int cicloprn=0; ngioca>cicloprn && cicloprn<4; cicloprn++) {
lcd.setCursor(1, cicloprn);
lcd.print(coloreg[cicloprn]);
lcd.print("0");
}
for (int cicloprn=4; ngioca>4 && ngioca>cicloprn; cicloprn++) {
// se è la prima volta accendo il display 2
if (accendolcd2 == 0)
{
lcd2.init(); //inizializzo il display 2
lcd2.backlight(); //accendo il display 2
accendolcd2 = 1;
}
lcd2.setCursor(1, cicloprn-4);
lcd2.print(coloreg[cicloprn]);
lcd2.print("0");
}
//Serial.println(ngioca);
//delay(8000);
}
//*********************************Stampo i nomi FINE
if (valButton4== HIGH && valButton4Old == LOW && swapt==0)
{
tone(pins, 1319, 10); // nota
delay(10);
noTone(pins);
swapt = 1;
lcd.clear(); //cancello lo schermo
lcd2.clear(); //cancello lo schermo
valButton4Old = ""; // i valori di valButton4 e valButton4Old non cambiavano ora funziona
break; // esce dal ciclo se si preme il pulsante
}
// leggo il valore precedente dei button
valButton1Old = valButton1;
valButton2Old = valButton2;
valButton3Old = valButton3;
valButton4Old = valButton4;
}
} //*********************************if di swap FINE
//********************************************************
//********************************************************
//Da questo punto devo fare lo swap dello schermo
//tra punteggio e timer - FINE
//********************************************************
//********************************************************
//int valButton1 = digitalRead(pinButton1);
//int valButton2 = digitalRead(pinButton2);
//int valButton3 = digitalRead(pinButton3);
//int valButton4 = digitalRead(pinButton4);
//********************************************************
//********************************************************
//Da questo punto devo fare lo swap dello schermo
//tra Timer e Punteggio - INIZIO
//********************************************************
//********************************************************
//variabili countdown
//int cd1 = 0; //secondi
//int cd2 = 0; //minuti
//int pausat = 0;
//int tmill = 0; // var per i calcolo dei millisecondi
//unsigned long previousMillis = 0; // memorizzerà l'ultimo aggiornamento del tempo
int escit = 0;
cd1 = 60;
cd2 = tempo-1;
if(swapt == 1) //*****if di swap INIZIO
{
lcd.setCursor(0, 0);
lcd.print("r=pausa v=play n=ALT");
//secondo();
//pin 6 per il pulsante
//attachInterrupt(digitalPinToInterrupt(3), cambia, FALLING);
if (stato==1)
{
lcd.setCursor(0, 3);
lcd.print("PAUSA ");
delay(150);
} else {
lcd.setCursor(0, 3);
lcd.print("RIPRENDO");
delay(150);
}
}//*********************************if di swap FINE
//********************************************************
//********************************************************
//Da questo punto devo fare lo swap dello schermo
//tra Timer e Punteggio - FINE
//********************************************************
//********************************************************
}
void cambia() {
stato = !stato;
//delay(250);
}