Go Down

Topic: Giochino (problema programmazione) *SPOSTATO* (Read 620 times) previous topic - next topic

Diga

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!
Code: [Select]

#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);
}
}
}
 

PaoloP

#1
Jan 30, 2013, 05:49 pm Last Edit: Jan 30, 2013, 05:58 pm by PaoloP Reason: 1
Ciao Diga,
mi pare di capire che tu abbia un doppio display a 7 segmenti.
Mi spieghi cosa intendi per GND?
Code: [Select]
int GND1 = 2;
int GND2 = 3;

E' per caso il pin Enable?

Poi cosa sono queste funzioni?
Code: [Select]
void quattro();
Code: [Select]
 void tre();

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

Hai messo le resistenze di pull-down nei pulsanti?

cece99

Io penso che gestisca i due display in multiplexing, ecco spiegati i deu gnd
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

PaoloP

Per gestire i display a 7 segmenti c'è questa libreria --> https://github.com/sparkfun/SevSeg

Diga

Esatto, i due GND servono per multiplexare, non conoscevo la libreria.. :P
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.

Diga

#5
Feb 04, 2013, 04:29 pm Last Edit: Feb 04, 2013, 04:32 pm by Diga Reason: 1
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???

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy