#include "LedControlMS.h"
LedControl lc=LedControl(12,10,11,2); // usiamo 2 matrici
const int SW_pin0 = 7;
const int X_pin0 = 0;
const int Y_pin0 = 1;
const int SW_pin1 = 6;
const int X_pin1 = 2;
const int Y_pin1 = 3;
void setup() {
pinMode(SW_pin0, INPUT);
digitalWrite(SW_pin0, HIGH);
pinMode(SW_pin1, INPUT);
digitalWrite(SW_pin1, HIGH);
for(int i=0; i<2; i+=1) { // inizializza le 2 matrici
lc.shutdown(i,false);
lc.setIntensity(i,8);
lc.clearDisplay(i);
}
lc.setLed(0,7,0,1);
writeNumber(0,0);
writeNumber(0,1);
}
void writeDigit(int i, int m, int r) { // scrivi la cifra i sulla matrice m partendo dalla riga r
switch(i) {
case 0:
lc.setRow(m,r,B00111110);
lc.setRow(m,r+1,B00100010);
lc.setRow(m,r+2,B00111110);
break;
case 1:
lc.setRow(m,r,B00000000);
lc.setRow(m,r+1,B00000000);
lc.setRow(m,r+2,B00111110);
break;
case 2:
lc.setRow(m,r,B00111010);
lc.setRow(m,r+1,B00101010);
lc.setRow(m,r+2,B00101110);
break;
case 3:
lc.setRow(m,r,B00101010);
lc.setRow(m,r+1,B00101010);
lc.setRow(m,r+2,B00111110);
break;
case 4:
lc.setRow(m,r,B00001110);
lc.setRow(m,r+1,B00001000);
lc.setRow(m,r+2,B00111110);
break;
case 5:
lc.setRow(m,r,B00101110);
lc.setRow(m,r+1,B00101010);
lc.setRow(m,r+2,B00111010);
break;
case 6:
lc.setRow(m,r,B00111110);
lc.setRow(m,r+1,B00101010);
lc.setRow(m,r+2,B00111010);
break;
case 7:
lc.setRow(m,r,B00000010);
lc.setRow(m,r+1,B00000010);
lc.setRow(m,r+2,B00111110);
break;
case 8:
lc.setRow(m,r,B00111110);
lc.setRow(m,r+1,B00101010);
lc.setRow(m,r+2,B00111110);
break;
case 9:
lc.setRow(m,r,B00101110);
lc.setRow(m,r+1,B00101010);
lc.setRow(m,r+2,B00111110);
break;
}
}
void writeNumber(int n, int m) { // scrivi il numero (di due cifre) n sulla matrice m
int u = n % 10;
int d = n / 10;
writeDigit(d, m, 0);
writeDigit(u, m, 4);
}
int punteggio0 = 0; // punti giocatore 0
int punteggio1 = 0; // punti giocatore 1
int palla = 0; // di default la palla è del giocatore 0
void loop() {
if( analogRead(X_pin0) > 700 ) { // incrementa il punteggio del giocatore 0
if(punteggio0 < 99) {
punteggio0 = punteggio0 + 1;
}
writeNumber(punteggio0,0);
int a = punteggio0+punteggio1; // controlla se cambia palla
a = a % 5;
if (a == 0 ) {
lc.setLed(palla,7,0,0);
palla = palla + 1;
palla = palla % 2;
lc.setLed(palla,7,0,1);
}
delay(300);
}
if( analogRead(X_pin0) < 400 ) { // decrementa il punteggio del giocatore 0
if(punteggio0>0) {
punteggio0 = punteggio0 - 1;
}
writeNumber(punteggio0,0);
int a = punteggio0+punteggio1; // controlla se cambia palla
a = a % 5;
if (a == 0 ) {
lc.setLed(palla,7,0,0);
palla = palla + 1;
palla = palla % 2;
lc.setLed(palla,7,0,1);
}
delay(300);
}
if( analogRead(X_pin1) > 700 ) { // incrementa il punteggio del giocatore 1
if(punteggio1 < 99) {
punteggio1 = punteggio1 + 1;
}
writeNumber(punteggio1,1);
int a = punteggio0+punteggio1; // controlla se cambia palla
a = a % 5;
if (a == 0 ) {
lc.setLed(palla,7,0,0);
palla = palla + 1;
palla = palla % 2;
lc.setLed(palla,7,0,1);
}
delay(300);
}
if( analogRead(X_pin1) < 400 ) { // decrementa il punteggio del giocatore 0
if(punteggio1>0) {
punteggio1 = punteggio1 - 1;
}
writeNumber(punteggio1,1);
int a = punteggio0+punteggio1; // controlla se cambia palla
a = a % 5;
if (a == 0 ) {
lc.setLed(palla,7,0,0);
palla = palla + 1;
palla = palla % 2;
lc.setLed(palla,7,0,1);
}
delay(300);
}
if( digitalRead(SW_pin0) == LOW ) { // resetta il punteggio del giocatore 0
punteggio0 = 0;
writeNumber(punteggio0,0);
delay(100);
}
if( digitalRead(SW_pin1) == LOW ) { // resetta il punteggio del giocatore 1
punteggio1 = 0;
writeNumber(punteggio1,1);
delay(100);
}
if( analogRead(Y_pin0) < 400 && analogRead(Y_pin1) < 400 ) { // cambio palla manuale al giocatore 0
lc.setLed(0,7,0,1);
lc.setLed(1,7,0,0);
palla = 0;
delay(300);
}
if( analogRead(Y_pin0) > 700 && analogRead(Y_pin1) > 700 ) { // cambio palla manuale al giocatore 1
lc.setLed(0,7,0,0);
lc.setLed(1,7,0,1);
palla = 1;
delay(300);
}
delay(100);
}
Commenti