Pages: [1]   Go Down
Author Topic: Giochino (problema programmazione) *SPOSTATO*  (Read 497 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 1
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 114
Posts: 7209
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao Diga,
mi pare di capire che tu abbia un doppio display a 7 segmenti.
Mi spieghi cosa intendi per GND?
Code:
int GND1 = 2;
int GND2 = 3;
E' per caso il pin Enable?

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

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

Hai messo le resistenze di pull-down nei pulsanti?
« Last Edit: January 30, 2013, 11:58:57 am by PaoloP » Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Dueville (VI)
Online Online
Edison Member
*
Karma: 28
Posts: 1764
http://cesarecacitti.wordpress.com/
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 114
Posts: 7209
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Newbie
*
Karma: 1
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Newbie
*
Karma: 1
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 (3944.32 KB - downloaded 11 times.)
« Last Edit: February 04, 2013, 10:32:54 am by Diga » Logged

Pages: [1]   Go Up
Jump to: