Giochino (problema programmazione) *SPOSTATO*

Ho spostato il topic nella sezione giusta..
Il mio problema è quello di non riuscire a far rimanere accesi i display per tutta la durate del programma, si accendono e si spengono con i led!
Posto il programma di seguito.. Grazie ancora in anticipo!

#include "pitches.h"

int led1=13;
int led2=12;

int pulsante1 = A1;
int pulsante2 = A2;
int preset = A0;
int Statop1 = 0; 
int Statop2 = 0; 
int Statopr = 0;
long rand1=0;

int dspl1;
int dspl2;
int valdspl1 = 0;
int valdspl2 = 0;

int GND1 = 2;
int GND2 = 3;

int A = 4;
int B = 5;
int C = 6;
int D = 7;
int E = 9;
int F = 10;
int G = 11;

void setup()
{
  pinMode(A,OUTPUT);
  pinMode(B,OUTPUT);
  pinMode(C,OUTPUT);
  pinMode(D,OUTPUT);
  pinMode(E,OUTPUT);
  pinMode(F,OUTPUT);
  pinMode(G,OUTPUT);
  pinMode(GND1,OUTPUT);
  pinMode(GND2,OUTPUT);
  pinMode(led1,OUTPUT);
  pinMode(led2,OUTPUT);
  pinMode(pulsante1,INPUT);
  pinMode(pulsante2,INPUT);
  pinMode(preset,INPUT);
  randomSeed (analogRead (0));
   
}


void loop()
{

  digitalWrite(led1,HIGH); digitalWrite(led2,HIGH);
  Statop1=digitalRead(pulsante1); 
  Statop2=digitalRead(pulsante2);
  Statopr=digitalRead(preset);
  
  if(Statopr==HIGH)
  {
    dspl1=0;
    dspl2=0;
     digitalWrite(led1,LOW); digitalWrite(led2,LOW);
     }
     delay(rand1 = random (1000, 6000));
  }

  if(Statop1==HIGH)                
 {   
   dspl1++;   
  digitalWrite(led1,LOW); digitalWrite(led2,LOW);
  delay(500);
  digitalWrite(led1,HIGH);       
  delay(100);                          
  digitalWrite(led1,LOW);             
  delay(100);                          
  digitalWrite(led1,HIGH);         
  delay(100);   
  digitalWrite(led1,LOW);  
  delay(100);                          
  digitalWrite(led1,HIGH);         
  delay(100);   
  digitalWrite(led1,LOW);
  delay(100);
  digitalWrite(led1,HIGH);       
  delay(100);                          
  digitalWrite(led1,LOW);             
  delay(100);                          
  digitalWrite(led1,HIGH);         
  delay(100);   
  digitalWrite(led1,LOW);  
  delay(rand1 = random (1000, 6000));
  }
  
 
  if(Statop2==HIGH)
 { 
   dspl2++;
  digitalWrite(led1,LOW); digitalWrite(led2,LOW);
  delay(500);
  digitalWrite(led2,HIGH);       
  delay(100);                          
  digitalWrite(led2,LOW);             
  delay(100);                          
  digitalWrite(led2,HIGH);         
  delay(100);   
  digitalWrite(led2,LOW);  
  delay(100);                          
  digitalWrite(led2,HIGH);         
  delay(100);   
  digitalWrite(led2,LOW);
  delay(100);
  digitalWrite(led2,HIGH);       
  delay(100);                          
  digitalWrite(led2,LOW);             
  delay(100);                          
  digitalWrite(led2,HIGH);         
  delay(100);   
  digitalWrite(led2,LOW); 
  if(valdspl2!=2)
  {
  delay(rand1 = random (1000, 6000));
  }
  }
 
 else(Statop1==LOW, Statop2==LOW);
 {
 }  
 
 if(dspl1==0)
{
 void zero();
{
  digitalWrite(GND1,LOW);
  digitalWrite(A,HIGH);
  digitalWrite(B,HIGH);
  digitalWrite(C,HIGH);
  digitalWrite(D,HIGH);
  digitalWrite(E,HIGH);
  digitalWrite(F,HIGH);
  digitalWrite(G,LOW);
  delay(1);
  digitalWrite(GND1,HIGH);
  
}
}
 if(dspl2==0)
{
 void zero();
{
  digitalWrite(GND2,LOW);
  digitalWrite(A,HIGH);
  digitalWrite(B,HIGH);
  digitalWrite(C,HIGH);
  digitalWrite(D,HIGH);
  digitalWrite(E,HIGH);
  digitalWrite(F,HIGH);
  digitalWrite(G,LOW);
  delay(1);
  digitalWrite(GND2,HIGH);

}
}

 if(dspl1==1)
{
void uno();
{
  digitalWrite(GND1,LOW);
  digitalWrite(A,LOW);
  digitalWrite(B,HIGH);
  digitalWrite(C,HIGH);
  digitalWrite(D,LOW);
  digitalWrite(E,LOW);
  digitalWrite(F,LOW);
  digitalWrite(G,LOW);
  delay(1);
  digitalWrite(GND1,HIGH);
}
}
 if(dspl2==1)
{
void uno();
{
  digitalWrite(GND2,LOW);
  digitalWrite(A,LOW);
  digitalWrite(B,HIGH);
  digitalWrite(C,HIGH);
  digitalWrite(D,LOW);
  digitalWrite(E,LOW);
  digitalWrite(F,LOW);
  digitalWrite(G,LOW);
  delay(1);
  digitalWrite(GND2,HIGH);
}
}

 if(dspl1==2)
{
void due();
{
  digitalWrite(GND1,LOW);
  digitalWrite(A,HIGH);
  digitalWrite(B,HIGH);
  digitalWrite(C,LOW);
  digitalWrite(D,HIGH);
  digitalWrite(E,HIGH);
  digitalWrite(F,LOW);
  digitalWrite(G,HIGH);  
  delay(1);
  digitalWrite(GND1,HIGH);
}
}
 if(dspl2==2)
{
void due();
{
  digitalWrite(GND2,LOW);
  digitalWrite(A,HIGH);
  digitalWrite(B,HIGH);
  digitalWrite(C,LOW);
  digitalWrite(D,HIGH);
  digitalWrite(E,HIGH);
  digitalWrite(F,LOW);
  digitalWrite(G,HIGH);  
  delay(1);
  digitalWrite(GND2,HIGH);
}
}

 if(dspl1==3)
{
void tre();
{
  digitalWrite(GND1,LOW);
  digitalWrite(A,HIGH);
  digitalWrite(B,HIGH);
  digitalWrite(C,HIGH);
  digitalWrite(D,HIGH);
  digitalWrite(E,LOW);
  digitalWrite(F,LOW);
  digitalWrite(G,HIGH);  
  delay(1);
  digitalWrite(GND1,HIGH);
}
}
 if(dspl2==3)
{
void tre();
{
  digitalWrite(GND2,LOW);
  digitalWrite(A,HIGH);
  digitalWrite(B,HIGH);
  digitalWrite(C,HIGH);
  digitalWrite(D,HIGH);
  digitalWrite(E,LOW);
  digitalWrite(F,LOW);
  digitalWrite(G,HIGH);  
  delay(1);
  digitalWrite(GND2,HIGH);
}
}
 if(dspl1==4)
{
void quattro();
{
  digitalWrite(GND1,LOW);
  digitalWrite(A,LOW);
  digitalWrite(B,HIGH);
  digitalWrite(C,HIGH);
  digitalWrite(D,LOW);
  digitalWrite(E,LOW);
  digitalWrite(F,HIGH);
  digitalWrite(G,HIGH);
  delay(1);
  digitalWrite(GND1,HIGH);
}
}
 if(dspl2==4)
{
void quattro();
{
  digitalWrite(GND2,LOW);
  digitalWrite(A,LOW);
  digitalWrite(B,HIGH);
  digitalWrite(C,HIGH);
  digitalWrite(D,LOW);
  digitalWrite(E,LOW);
  digitalWrite(F,HIGH);
  digitalWrite(G,HIGH);
  delay(1);
  digitalWrite(GND2,HIGH);
}
}

........ Ho tolto le procedure per la visualizzazione di numeri..

if(dspl1==9)
{
  {
  digitalWrite(led1,LOW); digitalWrite(led2,LOW);
  for(int ripetizione=0; ripetizione<5; ripetizione++)
  {
  digitalWrite(GND1,LOW); 
  digitalWrite(G,LOW);
  digitalWrite(A,HIGH);
  delay(50);
  digitalWrite(A,LOW);
  delay(50);
  digitalWrite(B,HIGH);
  delay(50);
  digitalWrite(B,LOW);
  delay(50);
  digitalWrite(C,HIGH);
  delay(50);
  digitalWrite(C,LOW);
  delay(50);
  digitalWrite(D,HIGH);
  delay(50);
  digitalWrite(D,LOW);
  delay(50);
  digitalWrite(E,HIGH);
  delay(50);
  digitalWrite(E,LOW);
  delay(50);
  digitalWrite(F,HIGH);
  delay(50);
  digitalWrite(F,LOW);
  delay(50);
}
  digitalWrite(GND1,LOW);
  digitalWrite(A,HIGH);
  digitalWrite(B,HIGH);
  digitalWrite(C,HIGH);
  digitalWrite(D,HIGH);
  digitalWrite(E,HIGH);
  digitalWrite(F,HIGH);
  digitalWrite(G,HIGH);
  delay(250);
  digitalWrite(GND1,HIGH);
  digitalWrite(A,LOW);
  digitalWrite(B,LOW);
  digitalWrite(C,LOW);
  digitalWrite(D,LOW);
  digitalWrite(E,LOW);
  digitalWrite(F,LOW);
  digitalWrite(G,LOW);
  
  for (int thisNote = 0; thisNote < 8; thisNote++) 
  {
    int noteDuration2 = 1000/noteDurations2[thisNote];
    tone(8, melody2[thisNote],noteDuration2);
    int pauseBetweenNotes = noteDuration2 * 1.30;
    delay(pauseBetweenNotes);
    noTone(8);
    dspl1=0;
    dspl2=0;
  }
  delay(3500);
}
}

if(dspl2==9)
{
  {
  digitalWrite(led1,LOW); digitalWrite(led2,LOW);
  for(int ripetizione=0; ripetizione<5; ripetizione++)
  {
  digitalWrite(GND2,LOW); 
  digitalWrite(G,LOW);
  digitalWrite(A,HIGH);
  delay(50);
  digitalWrite(A,LOW);
  delay(50);
  digitalWrite(B,HIGH);
  delay(50);
  digitalWrite(B,LOW);
  delay(50);
  digitalWrite(C,HIGH);
  delay(50);
  digitalWrite(C,LOW);
  delay(50);
  digitalWrite(D,HIGH);
  delay(50);
  digitalWrite(D,LOW);
  delay(50);
  digitalWrite(E,HIGH);
  delay(50);
  digitalWrite(E,LOW);
  delay(50);
  digitalWrite(F,HIGH);
  delay(50);
  digitalWrite(F,LOW);
  delay(50);
}
  digitalWrite(GND2,LOW);
  digitalWrite(A,HIGH);
  digitalWrite(B,HIGH);
  digitalWrite(C,HIGH);
  digitalWrite(D,HIGH);
  digitalWrite(E,HIGH);
  digitalWrite(F,HIGH);
  digitalWrite(G,HIGH);
  delay(250);
  digitalWrite(GND2,HIGH);
  digitalWrite(A,LOW);
  digitalWrite(B,LOW);
  digitalWrite(C,LOW);
  digitalWrite(D,LOW);
  digitalWrite(E,LOW);
  digitalWrite(F,LOW);
  digitalWrite(G,LOW);
  
  for (int thisNote = 0; thisNote < 8; thisNote++) 
  {
    int noteDuration2 = 1000/noteDurations2[thisNote];
    tone(8, melody2[thisNote],noteDuration2);
    int pauseBetweenNotes = noteDuration2 * 1.30;
    delay(pauseBetweenNotes);
    noTone(8);
    dspl1=0;
    dspl2=0;
  }
  delay(3500);
}
}
}

Ciao Diga,
mi pare di capire che tu abbia un doppio display a 7 segmenti.
Mi spieghi cosa intendi per GND?

int GND1 = 2;
int GND2 = 3;

E' per caso il pin Enable?

Poi cosa sono queste funzioni?

 void quattro();
  void tre();

Se volevi definire una porzione di codice da riutilizzare il modo non è corretto.

Hai messo le resistenze di pull-down nei pulsanti?

Io penso che gestisca i due display in multiplexing, ecco spiegati i deu gnd

Per gestire i display a 7 segmenti c'è questa libreria --> GitHub - sparkfun/SevSeg: Seven Segment library for Arduino

Esatto, i due GND servono per multiplexare, non conoscevo la libreria.. :stuck_out_tongue:
Invece le funzioni "void" servivano per un altro conteggio sempre a display che avevo fatto e allora ho fatto copia incolla dal programma precedente!
La resistenza di pull-down l'ho messa, i pulsanti funzionano benissimo.. il problema è che quando si verifica un blocco del ciclo if, il programma ricomincia e allora tutti gli altri if, funzionano solo alla ripartenza.. questo penserete che non sia un problema, invece lo è perchè appena si accendono i led, i giocatori devono schiacciare più velocemente possibile il pulsante, per vincere e quando questo avviene, i 2 display che dovrebbero segnare il punteggio, si spengono incrementando il valore all accensione successiva che avviene contemporaneamente ai led! Cosi facendo, i giocatori non hanno il tempo di leggere il proprio punteggio che già devono premere il pulsante..
Spero di essermi spiegato altrimenti vi allego un video di quello che succede.

Ecco quello che mi succede, vi ho linkato nel video il problema effettivo... quando schiaccio i pulsanti per far spegnere i led verdi, si spengono anche i segnapunti, cosa che non vorrei accadesse... Soluzioni???

video-2013-02-04-16-22-48.mp4 (3.85 MB)