Go Down

Topic: Pianola con Arduino (Read 3 times) previous topic - next topic

Testato

bello if -do -while
non ci avrei mai pensato  :)
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

leo72


bello if -do -while
non ci avrei mai pensato  :)

Io vengo dalla "vecchia scuola", da linguaggi dove esistevano cicli while..wend, repeat..until, do..while ecc..  :D

francescobonassi

Il nuovo listato finalmente funzionante a dovere   8):
Code: [Select]
int Buzzer=13; //Associa "Buzzer" al pin D13
int Do=12; //Associa "Do" al pin D12
int Re=11; //Associa "Re" al pin D11
int Mi=10; //Associa "Mi" al pin D10
int Fa=9; //Associa "Fa" al pin D9
int Sol=8; //Associa "Sol" al pin D8
int La=7; //Associa "La" al pin D7
int Si=6; //Associa "Si" al pin D6

int ValueButton; //Registro valore pulsante

void setup() //Azioni da eseguire solo all'avvio
{
  pinMode(Buzzer,OUTPUT); //Imposta il pin D13 in uscita
  pinMode(Do,INPUT); //Immposta il pin D12 in ingresso
  pinMode(Re,INPUT); //Imposta il pin D11 in ingresso
  pinMode(Mi,INPUT); //Imposta il pin D10 in ingresso
  pinMode(Fa,INPUT); //Imposta il pin D9 in ingresso
  pinMode(Sol,INPUT); //Imposta il pin D8 in ingresso
  pinMode(La,INPUT); //Imposta il pin D7 in ingresso
  pinMode(Si,INPUT); //Imposta il pin D6 in ingresso
}

void loop() //Azioni da eseguire all'infinito
{
  ValueButton=digitalRead(Do); //Associa a "ValueButton" il valore del pulsante "Do"
  while(ValueButton==HIGH) //Se il pulsante "Do" risulta premuto...
  {
    tone(Buzzer,262); //...fai suonare il "Buzzer" a 262Hz...
    ValueButton=digitalRead(Do); //...rileggi il valore del pulsante "Do"...
    if(ValueButton==LOW) //...se il pulsante "Do" risulta rilasciato...
    {
      noTone(Buzzer); //...spegni il "Buzzer"
    }
  }
 
  ValueButton=digitalRead(Re); //Associa a "ValueButton" il valore del pulsante "Re"
  while(ValueButton==HIGH) //Se il pulsante "Re" risulta premuto...
  {
    tone(Buzzer,294); //...fai suonare il "Buzzer" a 294Hz...
    ValueButton=digitalRead(Re); //...rileggi il valore del pulsante "Re"...
    if(ValueButton==LOW) //...se il pulsante "Re" risulta rilasciato...
    {
      noTone(Buzzer); //...spegni il "Buzzer"
    }
  }
 
  ValueButton=digitalRead(Mi); //Associa a "ValueButton" il valore del pulsante "Mi"
  while(ValueButton==HIGH) //Se il pulsante "Mi" risulta premuto...
  {
    tone(Buzzer,330); //...fai suonare il "Buzzer" a 330Hz...
    ValueButton=digitalRead(Mi); //...rileggi il valore del pulsante "Mi"...
    if(ValueButton==LOW) //...se il pulsante "Mi" risulta rilasciato...
    {
      noTone(Buzzer); //...spegni il "Buzzer"
    }
  }
 
  ValueButton=digitalRead(Fa); //Associa a "ValueButton" il valore del pulsante "Fa"
  while(ValueButton==HIGH) //Se il pulsante "Fa" risulta premuto...
  {
    tone(Buzzer,349); //...fai suonare il "Buzzer" a 349Hz...
    ValueButton=digitalRead(Fa); //...rileggi il valore del pulsante "Fa"...
    if(ValueButton==LOW) //...se il pulsante "Fa" risulta rilasciato...
    {
      noTone(Buzzer); //...spegni il "Buzzer"
    }
  }
 
  ValueButton=digitalRead(Sol); //Associa a "ValueButton" il valore del pulsante "Sol"
  while(ValueButton==HIGH) //Se il pulsante "Sol" risulta premuto...
  {
    tone(Buzzer,392); //...fai suonare il "Buzzer" a 392Hz...
    ValueButton=digitalRead(Sol); //...rileggi il valore del pulsante "Sol"...
    if(ValueButton==LOW) //...se il pulsante "Sol" risulta rilasciato...
    {
      noTone(Buzzer); //...spegni il "Buzzer"
    }
  }
 
  ValueButton=digitalRead(La); //Associa a "ValueButton" il valore del pulsante "La"
  while(ValueButton==HIGH) //Se il pulsante "La" risulta premuto...
  {
    tone(Buzzer,440); //...fai suonare il "Buzzer" a 440Hz...
    ValueButton=digitalRead(La); //...rileggi il valore del pulsante "La"...
    if(ValueButton==LOW) //...se il pulsante "La" risulta rilasciato...
    {
      noTone(Buzzer); //...spegni il "Buzzer"
    }
  }
 
  ValueButton=digitalRead(Si); //Associa a "ValueButton" il valore del pulsante "Si"
  while(ValueButton==HIGH) //Se il pulsante "Si" risulta premuto...
  {
    tone(Buzzer,494); //...fai suonare il "Buzzer" a 494Hz...
    ValueButton=digitalRead(Si); //...rileggi il valore del pulsante "Si"...
    if(ValueButton==LOW) //...se il pulsante "Si" risulta rilasciato...
    {
      noTone(Buzzer); //...spegni il "Buzzer"
    }
  }
}

dab77


Il nuovo listato finalmente funzionante a dovere   8):
Code: [Select]
int Buzzer=13; //Associa "Buzzer" al pin D13
int Do=12; //Associa "Do" al pin D12
int Re=11; //Associa "Re" al pin D11
int Mi=10; //Associa "Mi" al pin D10
int Fa=9; //Associa "Fa" al pin D9
int Sol=8; //Associa "Sol" al pin D8
int La=7; //Associa "La" al pin D7
int Si=6; //Associa "Si" al pin D6

int ValueButton; //Registro valore pulsante

void setup() //Azioni da eseguire solo all'avvio
{
  pinMode(Buzzer,OUTPUT); //Imposta il pin D13 in uscita
  pinMode(Do,INPUT); //Immposta il pin D12 in ingresso
  pinMode(Re,INPUT); //Imposta il pin D11 in ingresso
  pinMode(Mi,INPUT); //Imposta il pin D10 in ingresso
  pinMode(Fa,INPUT); //Imposta il pin D9 in ingresso
  pinMode(Sol,INPUT); //Imposta il pin D8 in ingresso
  pinMode(La,INPUT); //Imposta il pin D7 in ingresso
  pinMode(Si,INPUT); //Imposta il pin D6 in ingresso
}

void loop() //Azioni da eseguire all'infinito
{
  ValueButton=digitalRead(Do); //Associa a "ValueButton" il valore del pulsante "Do"
  while(ValueButton==HIGH) //Se il pulsante "Do" risulta premuto...
  {
    tone(Buzzer,262); //...fai suonare il "Buzzer" a 262Hz...
    ValueButton=digitalRead(Do); //...rileggi il valore del pulsante "Do"...
    if(ValueButton==LOW) //...se il pulsante "Do" risulta rilasciato...
    {
      noTone(Buzzer); //...spegni il "Buzzer"
    }
  }
 
  ValueButton=digitalRead(Re); //Associa a "ValueButton" il valore del pulsante "Re"
  while(ValueButton==HIGH) //Se il pulsante "Re" risulta premuto...
  {
    tone(Buzzer,294); //...fai suonare il "Buzzer" a 294Hz...
    ValueButton=digitalRead(Re); //...rileggi il valore del pulsante "Re"...
    if(ValueButton==LOW) //...se il pulsante "Re" risulta rilasciato...
    {
      noTone(Buzzer); //...spegni il "Buzzer"
    }
  }
 
  ValueButton=digitalRead(Mi); //Associa a "ValueButton" il valore del pulsante "Mi"
  while(ValueButton==HIGH) //Se il pulsante "Mi" risulta premuto...
  {
    tone(Buzzer,330); //...fai suonare il "Buzzer" a 330Hz...
    ValueButton=digitalRead(Mi); //...rileggi il valore del pulsante "Mi"...
    if(ValueButton==LOW) //...se il pulsante "Mi" risulta rilasciato...
    {
      noTone(Buzzer); //...spegni il "Buzzer"
    }
  }
 
  ValueButton=digitalRead(Fa); //Associa a "ValueButton" il valore del pulsante "Fa"
  while(ValueButton==HIGH) //Se il pulsante "Fa" risulta premuto...
  {
    tone(Buzzer,349); //...fai suonare il "Buzzer" a 349Hz...
    ValueButton=digitalRead(Fa); //...rileggi il valore del pulsante "Fa"...
    if(ValueButton==LOW) //...se il pulsante "Fa" risulta rilasciato...
    {
      noTone(Buzzer); //...spegni il "Buzzer"
    }
  }
 
  ValueButton=digitalRead(Sol); //Associa a "ValueButton" il valore del pulsante "Sol"
  while(ValueButton==HIGH) //Se il pulsante "Sol" risulta premuto...
  {
    tone(Buzzer,392); //...fai suonare il "Buzzer" a 392Hz...
    ValueButton=digitalRead(Sol); //...rileggi il valore del pulsante "Sol"...
    if(ValueButton==LOW) //...se il pulsante "Sol" risulta rilasciato...
    {
      noTone(Buzzer); //...spegni il "Buzzer"
    }
  }
 
  ValueButton=digitalRead(La); //Associa a "ValueButton" il valore del pulsante "La"
  while(ValueButton==HIGH) //Se il pulsante "La" risulta premuto...
  {
    tone(Buzzer,440); //...fai suonare il "Buzzer" a 440Hz...
    ValueButton=digitalRead(La); //...rileggi il valore del pulsante "La"...
    if(ValueButton==LOW) //...se il pulsante "La" risulta rilasciato...
    {
      noTone(Buzzer); //...spegni il "Buzzer"
    }
  }
 
  ValueButton=digitalRead(Si); //Associa a "ValueButton" il valore del pulsante "Si"
  while(ValueButton==HIGH) //Se il pulsante "Si" risulta premuto...
  {
    tone(Buzzer,494); //...fai suonare il "Buzzer" a 494Hz...
    ValueButton=digitalRead(Si); //...rileggi il valore del pulsante "Si"...
    if(ValueButton==LOW) //...se il pulsante "Si" risulta rilasciato...
    {
      noTone(Buzzer); //...spegni il "Buzzer"
    }
  }
}


Però così ti suona una nota per volta, giusto?
Ma l'hai provato il metodo suggerito da Leo?

leo72

Anche il mio codice suona una nota per volta. Avevamo consigliato di iniziare per gradi, il primo grado era appunto arrivare ad un codice che riproducesse 1 nota alla pressione di un tasto.

@francesco:
Adesso ottimizziamo il codice, eliminando tutte le parti ridondanti.  :P
Suggerimento. Hai 7 routine "identiche" che differiscono solo per il pin letto e la nota riprodotta... Perché non metti le note in un array da cui poi le estrai in base ad un indice, indice che sarà il numero di tasto letto?  ;)

francescobonassi

Credo di aver capito la logica di quello che mi hai suggerito XD

Un consiglio da dove iniziare a studiare?? Funzioni da approfondire ecc...?

Grazie a tutti :)

leo72

Ti fai un ciclo for che fa la scansione di tutti i pulsanti. Quando ne trovi uno premuto riproduci la nota corrispondente fino al rilascio del pulsante stesso.

Go Up