Salve. Sto realizzando un progetto per l’esame di maturità, un tris (o tic-tac-toe dir si voglia) elettronico.
Ci sono 2 label chiamati rispettivamente “GIOCATORE1” e “GIOCATORE2”.
Funzionano in questo modo:
Quando il 1° giocatore “clicca” la casella dove vuole piazzare la sua crocetta, se la casella è già occupata da un simbolo, “si attiva” il ‘goto GIOCATORE1’ per far andare il loop il programma fino a che il 1° giocatore non clicca una casella vuota. Viceversa, in caso la casella cliccata non fosse occupata, la casella viene attivata e marchiata come “occupata”, in seguito “si attiva” il ‘goto GIOCATORE2’ che fa partire il programma del 2° giocatore (che funziona allo stesso modo).
Il programma ancora non è completo, sto utilizzando solo 4 caselle (ne dovrei utilizzare 9). E’ più che altro un test per provare i comandi.
Comunque posto di seguito, il programmino:
// state_n = STATO ATTUALE DELLA CASELLA
// 0 = SPENTA
// 1 = DEL GIOCATORE 1
// 2 = DEL GIOCATORE 2
//----------------------------------------
//
// PIN = 2 --> CASELLA1 - state_1 == 1
// 3 --> CASELLA1 - state_1 == 2
// 4 --> CASELLA2 - state_2 == 1
// 5 --> CASELLA2 - state_2 == 2
// 6 --> CASELLA3 - state_3 == 1
// 7 --> CASELLA3 - state_3 == 2
// 8 --> CASELLA4 - state_4 == 1
// 9 --> CASELLA4 - state_4 == 2
// A0 --> INPUT.CASELLA1
// A1 --> INPUT.CASELLA2
// A2 --> INPUT.CASELLA3
// A3 --> INPUT.CASELLA4
int state_1 = 0;
int state_2 = 0;
int state_3 = 0;
int state_4 = 0;
void azzera() {
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
delayMicroseconds(1);
}
void leds_1() {
if(state_1 == 0) {
digitalWrite(2,LOW);
digitalWrite(3,LOW);
}
if(state_1 == 1) {
digitalWrite(2,HIGH);
digitalWrite(3,LOW);
}
if(state_1 == 2) {
digitalWrite(2,LOW);
digitalWrite(3,HIGH);
}
}
void leds_2() {
if(state_1 == 0) {
digitalWrite(4,LOW);
digitalWrite(5,LOW);
}
if(state_1 == 1) {
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
}
if(state_1 == 2) {
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
}
}
void leds_3() {
if(state_1 == 0) {
digitalWrite(6,LOW);
digitalWrite(7,LOW);
}
if(state_1 == 1) {
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
}
if(state_1 == 2) {
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
}
}
void leds_4() {
if(state_1 == 0) {
digitalWrite(8,LOW);
digitalWrite(9,LOW);
}
if(state_1 == 1) {
digitalWrite(8,HIGH);
digitalWrite(9,LOW);
}
if(state_1 == 2) {
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
}
}
void setup() {
pinMode(A0,INPUT);
pinMode(A1,INPUT);
pinMode(A2,INPUT);
pinMode(A3,INPUT);
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
}
void loop() {
unsigned long tempo = millis();
tempo = 0;
if(tempo > 0 && tempo <= 10) {
leds_1();
}
azzera(); // USCITE TUTTE = 0
if(tempo > 10 && tempo <= 20) {
leds_2();
}
azzera(); // USCITE TUTTE = 0
if(tempo > 20 && tempo <= 30) {
leds_3();
}
azzera(); // USCITE TUTTE = 0
if(tempo > 30 && tempo <= 40) {
leds_4();
}
azzera(); // USCITE TUTTE = 0
///
///
GIOCATORE1:
int casella_1 = digitalRead(A0);
if(casella_1 == 0) {
if(state_1 = 0) {
state_1 = 1;
delayMicroseconds(1);
goto GIOCATORE2;
}
if(state_1 == 1 || state_1 == 2) {
goto GIOCATORE1;
}
}
int casella_2 = digitalRead(A1);
if(casella_2 == 0) {
if(state_2 = 0) {
state_2 = 1;
delayMicroseconds(1);
goto GIOCATORE2;
}
if(state_2 == 1 || state_2 == 2) {
goto GIOCATORE1;
}
}
int casella_3 = digitalRead(A2);
if(casella_3 == 0) {
if(state_3 = 0) {
state_3 = 1;
delayMicroseconds(1);
goto GIOCATORE2;
}
if(state_3 == 1 || state_3 == 2) {
goto GIOCATORE1;
}
}
int casella_4 = digitalRead(A3);
if(casella_4 == 0) {
if(state_4 = 0) {
state_4 = 1;
delayMicroseconds(1);
goto GIOCATORE2;
}
if(state_4 == 1 || state_4 == 2) {
goto GIOCATORE1;
}
}
goto GIOCATORE1;
//
//
//
//FINE PROGRAMMA GIOCATORE1
//
//
//
GIOCATORE2:
casella_1 = digitalRead(A0);
if(casella_1 == 0) {
if(state_1 = 0) {
state_1 = 2;
delayMicroseconds(1);
goto GIOCATORE1;
}
if(state_1 == 1 || state_1 == 2) {
goto GIOCATORE2;
}
}
casella_2 = digitalRead(A1);
if(casella_2 == 0) {
if(state_2 = 0) {
state_2 = 2;
delayMicroseconds(1);
goto GIOCATORE1;
}
if(state_2 == 1 || state_2 == 2) {
goto GIOCATORE2;
}
}
casella_3 = digitalRead(A2);
if(casella_3 == 0) {
if(state_3 = 0) {
state_3 = 2;
delayMicroseconds(1);
goto GIOCATORE1;
}
if(state_3 == 1 || state_3 == 2) {
goto GIOCATORE2;
}
}
casella_4 = digitalRead(A3);
if(casella_4 == 0) {
if(state_4 = 0) {
state_4 = 2;
delayMicroseconds(1);
goto GIOCATORE1;
}
if(state_4 == 1 || state_4 == 2) {
goto GIOCATORE2;
}
}
goto GIOCATORE2;
//
//
//
//FINE PROGRAMMA GIOCATORE2
//
//
//
}
L’errore ‘Jump to label GIOCATORE2’
PROGRAMMA.ino: In function 'void loop()':
PROGRAMMA:183: error: jump to label 'GIOCATORE2'
PROGRAMMA:158: error: from here
PROGRAMMA:164: error: crosses initialization of 'int casella_4'
PROGRAMMA:183: error: jump to label 'GIOCATORE2'
PROGRAMMA:147: error: from here
PROGRAMMA:164: error: crosses initialization of 'int casella_4'
PROGRAMMA:153: error: crosses initialization of 'int casella_3'
PROGRAMMA:183: error: jump to label 'GIOCATORE2'
PROGRAMMA:136: error: from here
PROGRAMMA:164: error: crosses initialization of 'int casella_4'
PROGRAMMA:153: error: crosses initialization of 'int casella_3'
PROGRAMMA:142: error: crosses initialization of 'int casella_2'
Grazie!