Show Posts
Pages: 1 ... 15 16 [17] 18 19 20
241  Using Arduino / Audio / Re: tone.h melody when led is ON on: September 03, 2011, 08:10:58 am
Your code does not change LEDbrightness except inb loop().  Checking LEDbrightness after each note (or rest) won't cause the music to stop because LEDbrightness will have the same value it had when you started playing the melody.

So what?! how can I fix this?! Any ideas? smiley-sad

Thanks ..

See reply #3.  Move the analogRead() code out of loop() and put it in a function you can call between notes.

You're fantastic! smiley Works perfectly! smiley I did not realize I had to use an other function that managed if the LED was turned on or off .. xD
Now is perfect!! I did not realize your sketches .. (maybe because I saw it late at night .. xD)

Now, one thing, if I wanted to save the point where the melody stops, the situation is complicated right?! smiley

thanks again!
242  Using Arduino / Audio / Re: tone.h melody when led is ON on: September 03, 2011, 04:08:27 am
Your code does not change LEDbrightness except inb loop().  Checking LEDbrightness after each note (or rest) won't cause the music to stop because LEDbrightness will have the same value it had when you started playing the melody.

So what?! how can I fix this?! Any ideas? smiley-sad

Thanks ..
243  Using Arduino / Audio / Re: tone.h melody when led is ON on: September 02, 2011, 06:40:49 pm
Something like this:
Code:
boolean setBrightness()
  {
  photocellReading = analogRead(photocellPin); 
  photocellReading = 1023 - photocellReading;
  photocellReading = constrain(photocellReading, 600, 1023); //<-- il 970 potete cambiarlo 
  LEDbrightness = map(photocellReading, 600, 1023, 0, 255);
  analogWrite(LEDpin, LEDbrightness);
  return LEDbrightness > 0;  //  Return 'true' if the LED is on
  }

void loop()
  {
  if (setBrightness())
    play_rtttl(song);
  }


[...]
  if (note)
  {
    //  Play note
    tone1.play(notes[(scale - 4) * 12 + note]);
    delay(duration);
    tone1.stop();
  }
  else
  {
    // Play rest
    delay(duration);
  }

  if (!setBrightness())
    return;    // LED is off, time to stop playing the melody
[...]

tanks, I have tried in this mode:
Code:
#include <Tone.h>
#include <LiquidCrystal.h>
int controllo_lum(int);

// inizializzo display LCD
LiquidCrystal lcd (12, 11, 5, 4, 3, 2);


Tone tone1;

//setto i PIN
int photocellPin = 0;     // the cell and 10K pulldown are connected to a0
int photocellReading;     // the analog reading from the sensor divider
int LEDpin = 6;          // connect Red LED to pin 11 (PWM pin)
int LEDbrightness;

#define OCTAVE_OFFSET 0

int notes[] = { 0,
NOTE_C4, NOTE_CS4, NOTE_D4, NOTE_DS4, NOTE_E4, NOTE_F4, NOTE_FS4, NOTE_G4, NOTE_GS4, NOTE_A4, NOTE_AS4, NOTE_B4,
NOTE_C5, NOTE_CS5, NOTE_D5, NOTE_DS5, NOTE_E5, NOTE_F5, NOTE_FS5, NOTE_G5, NOTE_GS5, NOTE_A5, NOTE_AS5, NOTE_B5,
NOTE_C6, NOTE_CS6, NOTE_D6, NOTE_DS6, NOTE_E6, NOTE_F6, NOTE_FS6, NOTE_G6, NOTE_GS6, NOTE_A6, NOTE_AS6, NOTE_B6,
NOTE_C7, NOTE_CS7, NOTE_D7, NOTE_DS7, NOTE_E7, NOTE_F7, NOTE_FS7, NOTE_G7, NOTE_GS7, NOTE_A7, NOTE_AS7, NOTE_B7
};

//CANZONI DISPINIBILI IN RTTTL

MissionImp:d=16,o=6,b=95:32d,32d#,32d,32d#,32d,32d#,32d,32d#,32d,32d,32d#,32e,32f,32f#,32g,g,8p,g,8p,a#,p,c7,p,g,8p,g,8p,f,p,f#,p,g,8p,g,8p,a#,p,c7,p,g,8p,g,8p,f,p,f#,p,a#,g,2d,32p,a#,g,2c#,32p,a#,g,2c,a#5,8c,2p,32p,a#5,g5,2f#,32p,a#5,g5,2f,32p,a#5,g5,2e,d#,8d";

void setup(void)
{
 
  Serial.begin(9600);
  tone1.begin(7);          //porta a cui e connesso lo speaker
  lcd.begin(16, 2);        //setto colonne e righe display
   lcd.setCursor(0,0);      //setto il cursore sopra a sinistra
  lcd.print("CIAO");
}

void loop()
{
  photocellReading = analogRead(photocellPin); 
 
  //Serial.print("Analog reading = ");
  //Serial.println(photocellReading);     // the raw analog reading
 
  // LED gets brighter the darker it is at the sensor
  // that means we have to -invert- the reading from 0-1023 back to 1023-0
 
  photocellReading = 1023 - photocellReading;
  //now we have to map 0-1023 to 0-255 since thats the range analogWrite uses
 
  photocellReading = constrain(photocellReading, 600, 1023); //<-- il 970 potete cambiarlo
 
  LEDbrightness = map(photocellReading, 600, 1023, 0, 255);
 
  analogWrite(LEDpin, LEDbrightness);
  delay(100);
   {
  if (LEDbrightness)
  {
  play_rtttl(song);
  }
   }
}
 
 
 

#define isdigit(n) (n >= '0' && n <= '9')

void play_rtttl(char *p)

{
 
  // Absolutely no error checking in here

  byte default_dur = 4;
  byte default_oct = 6;
  int bpm = 63;
  int num;
  long wholenote;
  long duration;
  byte note;
  byte scale;
  int luce;
  luce = LEDbrightness;

  // format: d=N,o=N,b=NNN:
  // find the start (skip name, etc)

  while(*p != ':') p++;    // ignore name
  p++;                     // skip ':'

  // get default duration
  if(*p == 'd')
  {
    p++; p++;              // skip "d="
    num = 0;
    while(isdigit(*p))
    {
      num = (num * 10) + (*p++ - '0');
    }
    if(num > 0) default_dur = num;
    p++;                   // skip comma
  }

  Serial.print("ddur: "); Serial.println(default_dur, 10);

  // get default octave
  if(*p == 'o')
  {
    p++; p++;              // skip "o="
    num = *p++ - '0';
    if(num >= 3 && num <=7) default_oct = num;
    p++;                   // skip comma
  }

  Serial.print("doct: "); Serial.println(default_oct, 10);

  // get BPM
  if(*p == 'b')
  {
    p++; p++;              // skip "b="
    num = 0;
    while(isdigit(*p))
    {
      num = (num * 10) + (*p++ - '0');
    }
    bpm = num;
    p++;                   // skip colon
  }

  Serial.print("bpm: "); Serial.println(bpm, 10);

  // BPM usually expresses the number of quarter notes per minute
  wholenote = (60 * 1000L / bpm) * 4;  // this is the time for whole note (in milliseconds)

  Serial.print("wn: "); Serial.println(wholenote, 10);


  // now begin note loop
  while((*p) && (luce>1))
  {
    // first, get note duration, if available
    num = 0;
    while(isdigit(*p))
    {
      num = (num * 10) + (*p++ - '0');
    }
   
    if(num) duration = wholenote / num;
    else duration = wholenote / default_dur;  // we will need to check if we are a dotted note after

    // now get the note
    note = 0;

    switch(*p)
    {
      case 'c':
        note = 1;
        break;
      case 'd':
        note = 3;
        break;
      case 'e':
        note = 5;
        break;
      case 'f':
        note = 6;
        break;
      case 'g':
        note = 8;
        break;
      case 'a':
        note = 10;
        break;
      case 'b':
        note = 12;
        break;
      case 'p':
      default:
        note = 0;
    }
    p++;

    // now, get optional '#' sharp
    if(*p == '#')
    {
      note++;
      p++;
    }

    // now, get optional '.' dotted note
    if(*p == '.')
    {
      duration += duration/2;
      p++;
    }
 
    // now, get scale
    if(isdigit(*p))
    {
      scale = *p - '0';
      p++;
    }
    else
    {
      scale = default_oct;
    }

    scale += OCTAVE_OFFSET;

    if(*p == ',')
      p++;       // skip comma for next note (or we may be at the end)

    // now play the note
   
   
   
    if(note)
    {
      Serial.print("Playing: ");
      Serial.print(scale, 10); Serial.print(' ');
      Serial.print(note, 10); Serial.print(" (");
      Serial.print(notes[(scale - 4) * 12 + note], 10);
      Serial.print(") ");
      Serial.println(duration, 10);
      tone1.play(notes[(scale - 4) * 12 + note]);
      delay(duration);
      tone1.stop();
    }
    else
    {
   
   Serial.print("Pausing: ");
   Serial.println(duration, 10);
    delay(duration);
   
    }
   
    if(!LEDbrightness)
    {
      return;
    }
   
  }
  }
ma quando la melodia inzia, anche se dopo nella stanza ce luce, il led non si spenge, perchè la melodia deve finire di suanare per intero!  smiley-cry
244  International / Generale / Re: riproduzione melodia solo se il LED è acceso.. si può?! on: September 02, 2011, 06:26:03 pm
miiiii non l'avevo visto smiley-razz
è agli antipodi dell'if.
e se i facessi while una cosa tipo play_rtttl & luce = true?

mmm... puoi spiegarmi meglio non ho capito scusaa..
245  International / Generale / Re: riproduzione melodia solo se il LED è acceso.. si può?! on: September 02, 2011, 01:10:53 pm
esattamente... solo che non va..
246  International / Generale / Re: riproduzione melodia solo se il LED è acceso.. si può?! on: September 02, 2011, 12:55:16 pm
scusa ma la funzione che suona la melodia non è play_rtttl ?

sisi è proprio lei.. play_rtttl si occupa di suonare la melodia..
247  International / Generale / Re: riproduzione melodia solo se il LED è acceso.. si può?! on: September 02, 2011, 12:39:46 pm
e io che pensavo che quel delay servisse a far finire tutta la melodia e non solo una nota  smiley-sad-blue
ma la variabile note dove viene inizializzata?

guarda questo è il codice completo.. così controlli per bene stesso tu..
Code:
#include <Tone.h>
#include <LiquidCrystal.h>
int controllo_lum(int);

// inizializzo display LCD
LiquidCrystal lcd (12, 11, 5, 4, 3, 2);


Tone tone1;

//setto i PIN
int photocellPin = 0;     // the cell and 10K pulldown are connected to a0
int photocellReading;     // the analog reading from the sensor divider
int LEDpin = 6;          // connect Red LED to pin 11 (PWM pin)
int LEDbrightness;

#define OCTAVE_OFFSET 0

int notes[] = { 0,
NOTE_C4, NOTE_CS4, NOTE_D4, NOTE_DS4, NOTE_E4, NOTE_F4, NOTE_FS4, NOTE_G4, NOTE_GS4, NOTE_A4, NOTE_AS4, NOTE_B4,
NOTE_C5, NOTE_CS5, NOTE_D5, NOTE_DS5, NOTE_E5, NOTE_F5, NOTE_FS5, NOTE_G5, NOTE_GS5, NOTE_A5, NOTE_AS5, NOTE_B5,
NOTE_C6, NOTE_CS6, NOTE_D6, NOTE_DS6, NOTE_E6, NOTE_F6, NOTE_FS6, NOTE_G6, NOTE_GS6, NOTE_A6, NOTE_AS6, NOTE_B6,
NOTE_C7, NOTE_CS7, NOTE_D7, NOTE_DS7, NOTE_E7, NOTE_F7, NOTE_FS7, NOTE_G7, NOTE_GS7, NOTE_A7, NOTE_AS7, NOTE_B7
};
//CANZONI DISPINIBILI IN RTTTL

char *song = "The Simpsons:d=4,o=5,b=160:c.6,e6,f#6,8a6,g.6,e6,c6,8a,8f#,8f#,8f#,2g,8p,8p,8f#,8f#,8f#,8g,a#.,8c6,8c6,8c6,c6";
//char *song = "Indiana:d=4,o=5,b=250:e,8p,8f,8g,8p,1c6,8p.,d,8p,8e,1f,p.,g,8p,8a,8b,8p,1f6,p,a,8p,8b,2c6,2d6,2e6,e,8p,8f,8g,8p,1c6,p,d6,8p,8e6,1f.6,g,8p,8g,e.6,8p,d6,8p,8g,e.6,8p,d6,8p,8g,f.6,8p,e6,8p,8d6,2c6";

void setup(void)
{
 
  Serial.begin(9600);
  tone1.begin(7);          //porta a cui e connesso lo speaker
  lcd.begin(16, 2);        //setto colonne e righe display
   lcd.setCursor(0,0);      //setto il cursore sopra a sinistra
  lcd.print("CIAO");
}

void loop()
{
  photocellReading = analogRead(photocellPin); 
 
  //Serial.print("Analog reading = ");
  //Serial.println(photocellReading);     // the raw analog reading
 
  // LED gets brighter the darker it is at the sensor
  // that means we have to -invert- the reading from 0-1023 back to 1023-0
 
  photocellReading = 1023 - photocellReading;
  //now we have to map 0-1023 to 0-255 since thats the range analogWrite uses
 
  photocellReading = constrain(photocellReading, 600, 1023); //<-- il 970 potete cambiarlo
 
  LEDbrightness = map(photocellReading, 600, 1023, 0, 255);
 
  analogWrite(LEDpin, LEDbrightness);
  delay(100);
   play_rtttl(song);
  }
#define isdigit(n) (n >= '0' && n <= '9')

void play_rtttl(char *p)
{
  // Absolutely no error checking in here

  byte default_dur = 4;
  byte default_oct = 6;
  int bpm = 63;
  int num;
  long wholenote;
  long duration;
  byte note;
  byte scale;
  int luce;
  luce = LEDbrightness;

  // format: d=N,o=N,b=NNN:
  // find the start (skip name, etc)

  while(*p != ':') p++;    // ignore name
  p++;                     // skip ':'

  // get default duration
  if(*p == 'd')
  {
    p++; p++;              // skip "d="
    num = 0;
    while(isdigit(*p))
    {
      num = (num * 10) + (*p++ - '0');
    }
    if(num > 0) default_dur = num;
    p++;                   // skip comma
  }

  Serial.print("ddur: "); Serial.println(default_dur, 10);

  // get default octave
  if(*p == 'o')
  {
    p++; p++;              // skip "o="
    num = *p++ - '0';
    if(num >= 3 && num <=7) default_oct = num;
    p++;                   // skip comma
  }

  Serial.print("doct: "); Serial.println(default_oct, 10);

  // get BPM
  if(*p == 'b')
  {
    p++; p++;              // skip "b="
    num = 0;
    while(isdigit(*p))
    {
      num = (num * 10) + (*p++ - '0');
    }
    bpm = num;
    p++;                   // skip colon
  }

  Serial.print("bpm: "); Serial.println(bpm, 10);

  // BPM usually expresses the number of quarter notes per minute
  wholenote = (60 * 1000L / bpm) * 4;  // this is the time for whole note (in milliseconds)

  Serial.print("wn: "); Serial.println(wholenote, 10);


  // now begin note loop
  while(*p)
  {
    // first, get note duration, if available
    num = 0;
    while(isdigit(*p))
    {
      num = (num * 10) + (*p++ - '0');
    }
   
    if(num) duration = wholenote / num;
    else duration = wholenote / default_dur;  // we will need to check if we are a dotted note after

    // now get the note
    note = 0;

    switch(*p)
    {
      case 'c':
        note = 1;
        break;
      case 'd':
        note = 3;
        break;
      case 'e':
        note = 5;
        break;
      case 'f':
        note = 6;
        break;
      case 'g':
        note = 8;
        break;
      case 'a':
        note = 10;
        break;
      case 'b':
        note = 12;
        break;
      case 'p':
      default:
        note = 0;
    }
    p++;

    // now, get optional '#' sharp
    if(*p == '#')
    {
      note++;
      p++;
    }

    // now, get optional '.' dotted note
    if(*p == '.')
    {
      duration += duration/2;
      p++;
    }
 
    // now, get scale
    if(isdigit(*p))
    {
      scale = *p - '0';
      p++;
    }
    else
    {
      scale = default_oct;
    }

    scale += OCTAVE_OFFSET;

    if(*p == ',')
      p++;       // skip comma for next note (or we may be at the end)

    // now play the note
   
   
   
    if((note) && (luce>1))
    {
      Serial.print("Playing: ");
      Serial.print(scale, 10); Serial.print(' ');
      Serial.print(note, 10); Serial.print(" (");
      Serial.print(notes[(scale - 4) * 12 + note], 10);
      Serial.print(") ");
      Serial.println(duration, 10);
      tone1.play(notes[(scale - 4) * 12 + note]);
      delay(duration);
      tone1.stop();
    }
    else
    {
    return;
   //Serial.print("Pausing: ");
   //Serial.println(duration, 10);
    //delay(duration);
    }
    }
   
  }

sembra faccia uso di uno switch..
248  Using Arduino / Audio / Re: tone.h melody when led is ON on: September 02, 2011, 11:21:10 am
If you want the turning off of the LED to be more responsive, change play_rtttl(char *p) to check after every note to see if the LED should be turned off.  If you turn off the LED, return from the play_rtttl(char *p) function to end the melody.

ok.. but, when i can chek if the led is on or off ?!

this is the complete code:
Code:
#include <Tone.h>
#include <LiquidCrystal.h>
int controllo_lum(int);

// inizializzo display LCD
LiquidCrystal lcd (12, 11, 5, 4, 3, 2);


Tone tone1;

//setto i PIN
int photocellPin = 0;     // the cell and 10K pulldown are connected to a0
int photocellReading;     // the analog reading from the sensor divider
int LEDpin = 6;          // connect Red LED to pin 11 (PWM pin)
int LEDbrightness;

#define OCTAVE_OFFSET 0

int notes[] = { 0,
NOTE_C4, NOTE_CS4, NOTE_D4, NOTE_DS4, NOTE_E4, NOTE_F4, NOTE_FS4, NOTE_G4, NOTE_GS4, NOTE_A4, NOTE_AS4, NOTE_B4,
NOTE_C5, NOTE_CS5, NOTE_D5, NOTE_DS5, NOTE_E5, NOTE_F5, NOTE_FS5, NOTE_G5, NOTE_GS5, NOTE_A5, NOTE_AS5, NOTE_B5,
NOTE_C6, NOTE_CS6, NOTE_D6, NOTE_DS6, NOTE_E6, NOTE_F6, NOTE_FS6, NOTE_G6, NOTE_GS6, NOTE_A6, NOTE_AS6, NOTE_B6,
NOTE_C7, NOTE_CS7, NOTE_D7, NOTE_DS7, NOTE_E7, NOTE_F7, NOTE_FS7, NOTE_G7, NOTE_GS7, NOTE_A7, NOTE_AS7, NOTE_B7
};
//CANZONI DISPINIBILI IN RTTTL

char *song = "The Simpsons:d=4,o=5,b=160:c.6,e6,f#6,8a6,g.6,e6,c6,8a,8f#,8f#,8f#,2g,8p,8p,8f#,8f#,8f#,8g,a#.,8c6,8c6,8c6,c6";
//char *song = "Indiana:d=4,o=5,b=250:e,8p,8f,8g,8p,1c6,8p.,d,8p,8e,1f,p.,g,8p,8a,8b,8p,1f6,p,a,8p,8b,2c6,2d6,2e6,e,8p,8f,8g,8p,1c6,p,d6,8p,8e6,1f.6,g,8p,8g,e.6,8p,d6,8p,8g,e.6,8p,d6,8p,8g,f.6,8p,e6,8p,8d6,2c6";

void setup(void)
{
 
  Serial.begin(9600);
  tone1.begin(7);          //porta a cui e connesso lo speaker
  lcd.begin(16, 2);        //setto colonne e righe display
   lcd.setCursor(0,0);      //setto il cursore sopra a sinistra
  lcd.print("CIAO");
}

void loop()
{
  photocellReading = analogRead(photocellPin); 
 
  //Serial.print("Analog reading = ");
  //Serial.println(photocellReading);     // the raw analog reading
 
  // LED gets brighter the darker it is at the sensor
  // that means we have to -invert- the reading from 0-1023 back to 1023-0
 
  photocellReading = 1023 - photocellReading;
  //now we have to map 0-1023 to 0-255 since thats the range analogWrite uses
 
  photocellReading = constrain(photocellReading, 600, 1023); //<-- il 970 potete cambiarlo
 
  LEDbrightness = map(photocellReading, 600, 1023, 0, 255);
 
  analogWrite(LEDpin, LEDbrightness);
  delay(100);
   play_rtttl(song);
  }
#define isdigit(n) (n >= '0' && n <= '9')

void play_rtttl(char *p)
{
  // Absolutely no error checking in here

  byte default_dur = 4;
  byte default_oct = 6;
  int bpm = 63;
  int num;
  long wholenote;
  long duration;
  byte note;
  byte scale;
  int luce;
  luce = LEDbrightness;

  // format: d=N,o=N,b=NNN:
  // find the start (skip name, etc)

  while(*p != ':') p++;    // ignore name
  p++;                     // skip ':'

  // get default duration
  if(*p == 'd')
  {
    p++; p++;              // skip "d="
    num = 0;
    while(isdigit(*p))
    {
      num = (num * 10) + (*p++ - '0');
    }
    if(num > 0) default_dur = num;
    p++;                   // skip comma
  }

  Serial.print("ddur: "); Serial.println(default_dur, 10);

  // get default octave
  if(*p == 'o')
  {
    p++; p++;              // skip "o="
    num = *p++ - '0';
    if(num >= 3 && num <=7) default_oct = num;
    p++;                   // skip comma
  }

  Serial.print("doct: "); Serial.println(default_oct, 10);

  // get BPM
  if(*p == 'b')
  {
    p++; p++;              // skip "b="
    num = 0;
    while(isdigit(*p))
    {
      num = (num * 10) + (*p++ - '0');
    }
    bpm = num;
    p++;                   // skip colon
  }

  Serial.print("bpm: "); Serial.println(bpm, 10);

  // BPM usually expresses the number of quarter notes per minute
  wholenote = (60 * 1000L / bpm) * 4;  // this is the time for whole note (in milliseconds)

  Serial.print("wn: "); Serial.println(wholenote, 10);


  // now begin note loop
  while(*p)
  {
    // first, get note duration, if available
    num = 0;
    while(isdigit(*p))
    {
      num = (num * 10) + (*p++ - '0');
    }
   
    if(num) duration = wholenote / num;
    else duration = wholenote / default_dur;  // we will need to check if we are a dotted note after

    // now get the note
    note = 0;

    switch(*p)
    {
      case 'c':
        note = 1;
        break;
      case 'd':
        note = 3;
        break;
      case 'e':
        note = 5;
        break;
      case 'f':
        note = 6;
        break;
      case 'g':
        note = 8;
        break;
      case 'a':
        note = 10;
        break;
      case 'b':
        note = 12;
        break;
      case 'p':
      default:
        note = 0;
    }
    p++;

    // now, get optional '#' sharp
    if(*p == '#')
    {
      note++;
      p++;
    }

    // now, get optional '.' dotted note
    if(*p == '.')
    {
      duration += duration/2;
      p++;
    }
 
    // now, get scale
    if(isdigit(*p))
    {
      scale = *p - '0';
      p++;
    }
    else
    {
      scale = default_oct;
    }

    scale += OCTAVE_OFFSET;

    if(*p == ',')
      p++;       // skip comma for next note (or we may be at the end)

    // now play the note
   
   
   
    if((note) && (luce>1))
    {
      Serial.print("Playing: ");
      Serial.print(scale, 10); Serial.print(' ');
      Serial.print(note, 10); Serial.print(" (");
      Serial.print(notes[(scale - 4) * 12 + note], 10);
      Serial.print(") ");
      Serial.println(duration, 10);
      tone1.play(notes[(scale - 4) * 12 + note]);
      delay(duration);
      tone1.stop();
    }
    else
    {
    return;
   //Serial.print("Pausing: ");
   //Serial.println(duration, 10);
    //delay(duration);
    }
    }
   
  }

where i can check the led?!

I am a beginner with arduino  smiley-sad

Thanks !!
249  International / Generale / Re: riproduzione melodia solo se il LED è acceso.. si può?! on: September 02, 2011, 10:51:15 am
io non ho capito ancora se non cammima il puntatore o se il delay(duation) non dà il tempo di avanzare smiley-sweat
per prova potresti sostituire duration con un numero tipo 5000?

"delay (duration)" è fondamentale a quanto pare.. già avevo provato a fare questo tentativo... praticamente se si sostituisce a duration un intero tipo 5000... ogni nota suona per 5 secondi.. quindi è una cosa fondamentale, sarebbe i millisecondi che la nota deve suonare..
250  International / Generale / Re: riproduzione melodia solo se il LED è acceso.. si può?! on: September 02, 2011, 09:57:42 am
ma usare while in entrata no? smiley-roll

Ho provato in questo modo:
Code:

 while (luce>1)

   

     if(note)
     {
   
      Serial.print("Playing: ");
      Serial.print(scale, 10); Serial.print(' ');
      Serial.print(note, 10); Serial.print(" (");
      Serial.print(notes[(scale - 4) * 12 + note], 10);
      Serial.print(") ");
      Serial.println(duration, 10);
      tone1.play(notes[(scale - 4) * 12 + note]);
      delay(duration);
      tone1.stop();
     }
   
    else
    {
     // return;
   Serial.print("Pausing: ");
   Serial.println(duration, 10);
   delay(duration);
      }

ho messo quindi
Code:
while (luce >1)

ma non va a quanto pare.. appena rivela la luce il risultato è quello che ho messo in allegato.. suona sempre una nota.. e ad esempio riaccendendo la luce nella stanza.. la fotoresistenza non rivela niente, il led non si spenge.. e la nota continua all'infinito.. smiley-roll
251  International / Generale / Re: riproduzione melodia solo se il LED è acceso.. si può?! on: September 02, 2011, 09:45:30 am
No, solo per il PWM .

Capito.. quindi non ci dovrebbero essereci di questi problemi.. Oddio inizio a non sopportare questo problema..xD E' anche poco documentato questo argomento comunque.. cioè alemno io non ho trovato quasi niente su qualcuno che vorrebbe far riprodurre una melodia quando si verifica una condizione.. e poi staccarsi quando quella condizione non ce.. anche di esempi con la tone.h non ne ho travati granchè..  smiley-confuse
252  International / Generale / Re: riproduzione melodia solo se il LED è acceso.. si può?! on: September 02, 2011, 09:27:24 am
Ah, ho capito. Luce indica l'intensità del led, non il rilevamento fatto dalla fotocellula.
Però ti suona sempre la stessa nota. Quindi nell'if ci entra ma il puntatore non viene aggiornato e ad ogni passatto nell'if ripete la stessa nota.

Ricorda che l'if non è come il while. L'If è una condizione controllata per entrare in una porzione di codice. Mentre il while è un controllo sull'uscita. Quindi dall'if il micro esce.

C'è un'altra possibilità. Nell'if hai:
tone1.play(notes[(scale - 4) * 12 + note]);
delay(duration);
tone1.stop();

Ho letto che tone() non è compatibile con la funzione PWM sui pin 3 e 11 perché usa lo stesso timer del segnale PWM. Tu che pin usi?

Questi sono i pin che uso:

Fotoresistenza: PIN analogico 0
LED: PIN digitale 6
Speaker: PIN digitale7

Quindi non dobrebbero esserci problemi di compatibilità giusto?

Comunque il pin digitale 3 ed 11 sono collegati al display.. (potrebbe essere questo il problema?)

Grazie!
253  International / Generale / Re: riproduzione melodia solo se il LED è acceso.. si può?! on: September 02, 2011, 09:04:30 am
Hai stampato sulla seriale i valori delle variabili prima dell'if?

Ciao, ho fatto le prove che mi avevi detto, lascio in allegato un file che mostra la situazione! La condizione if a questo punto dovrebbe funzionare tranquillamente o no? solo che non va per niente. smiley-sad Secondo me sto sbagliando il controllo dell'if.. non devo farlo lì.. perchè praticamente quello dice che se ce una nota, riproducila.. altrimenti "pausing..."  smiley-confuse
254  Using Arduino / Audio / tone.h melody when led is ON on: September 02, 2011, 08:01:50 am
Hello, I'm Italian, it is possible to make a melody to arduino ONLY when the LED is on?! Let me explain:

I connected a LED that lights up with photoresistor, if the LED is dark.

I wish that when the LED is on starts a tune, but as soon as the LED turns off the melody stops suddenly!

I'm finding some difficulties because I have basically implemented <tune.h> the library, and the melody part peacefully as soon as I turn on the LED lights up, but then to make sure that the LED turns off I have to wait until the end of the melody! smiley-eek-blue

That is how I found that if the function to play the melody RTTTL need to finish to complete the whole ..

LINK WITH CODE THAT I HAVE USED:
http://code.google.com/p/arduino-tone/source/browse/trunk/examples/RTTTL/RTTTL.pde?r=4

As soon as the song ends the LED turns off .. but I would like to return possibly as soon as the light, the LED goes out, and the melody stops.

Thanks in advance!
255  International / Generale / Re: riproduzione melodia solo se il LED è acceso.. si può?! on: September 02, 2011, 05:27:01 am
Se l'if non funziona è perché una delle due condizioni è false.
Magari metti le parentesi fra le condizioni:
if ((tone) && (luce>1))
non vorrei che ti eseguisse (tone && luce) e poi (>1)

Il fatto secondo me è che l'if funziona.. perchè lui si accorge che luce è maggiore di 1, e che note sta ad indicare che ce una nota da suonare..
quindi,  se (ce una nota da suonare && luce è maggiore di 1) riproduci quella nota.. Infatti appena con l'arduino avviato e la luce in camera accesa non succede nulla.. (perchè luce non è maggiore di 1 in quel momento). Non appena spengo la luce inizia a suonare (perchè luce in quel momento è maggiore di 1). Per questo dico che l'if dovrebbe funzionare.. solo che non suona tutte le note come dovrebbe.. Lui una volta entrato nell'if dovrebbe suonarmi tutta la melodia fino a quando il led non si spenge.. invece è come se costringe il led a restare acceso.. In pratica, entra nell'if ma non riesce ad uscirne quando dovrebbe... forse è questo.. smiley-confuse
Pages: 1 ... 15 16 [17] 18 19 20