Pages: 1 2 3 [4]   Go Down
Author Topic: Pianola con Arduino  (Read 2995 times)
0 Members and 1 Guest are viewing this topic.
0
Online Online
Faraday Member
**
Karma: 46
Posts: 5893
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

bello if -do -while
non ci avrei mai pensato  smiley
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 332
Posts: 22798
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

bello if -do -while
non ci avrei mai pensato  smiley
Io vengo dalla "vecchia scuola", da linguaggi dove esistevano cicli while..wend, repeat..until, do..while ecc..  smiley-grin
Logged


Padova, Italy
Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Il nuovo listato finalmente funzionante a dovere   smiley-cool:
Code:
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"
    }
  }
}
Logged

Rome
Offline Offline
God Member
*****
Karma: 1
Posts: 643
La mia prima bromografata!!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Il nuovo listato finalmente funzionante a dovere   smiley-cool:
Code:
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?
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 332
Posts: 22798
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.  smiley-razz
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?  smiley-wink
Logged


Padova, Italy
Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Credo di aver capito la logica di quello che mi hai suggerito smiley-lol

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

Grazie a tutti smiley
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 332
Posts: 22798
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


Pages: 1 2 3 [4]   Go Up
Jump to: