Cosa significa la funzioni tone, noTone Arduino

Il tone di Arduino viene utilizzato per generare un segnale PWM all’uscita del microcontrollore con una frequenza specificata. Per riprodurre un segnale audio, è necessario collegare al pin un altoparlante piezoelettrico o un altoparlante tramite un transistor. La durata del segnale può essere impostata da un parametro del comando di tone() oppure la generazione si interrompe quando la scheda viene riavviata o viene richiamata la funzione noTone() di Arduino.




Per questa attività sono necessari:

  • Arduino Uno / Arduino Nano / Arduino Mega
  • buzzer
  • breadboard
  • cavi di collegamento

Come si usa funzione tone(), noTone() di Arduino?

Il microcontrollore Arduino può riprodurre un solo segnale alla volta. Se un segnale viene già riprodotto su un’uscita della scheda, una nuova chiamata a tone() con un numero di porta diverso non produrrà alcun risultato. Se la funzione tone() di Arduino viene richiamata nel programma con lo stesso numero di porta, verrà riprodotto il segnale con una nuova frequenza. Ciò significa che è possibile riprodurre una sola frequenza di segnale su un pin.

Sintassi della funzione tone(), noTone() Arduino IDE

tone (pin, frequency);
tone (pin, frequency, duration);
noTone(pin);
  • pin – numero della porta di ingresso/uscita su cui verrà generato il segnale
  • frequenza – frequenza del segnale in Hertz
  • durata – durata del segnale in millisecondi
Collegamento del buzzer alla scheda Arduino
Collegamento del buzzer alla scheda Arduino

Funzione Arduino tone() frequenza massima. La frequenza del segnale generato dipende dalla dimensione del timer sulla scheda Arduino. Per il microcontrollore Arduino Uno o Arduino Nano, la frequenza minima del segnale generato è 31 Hz e la frequenza massima è 65535 Hz. La gamma di frequenze percepite dall’orecchio umano è molto più piccola.

Programma Arduino con funzione tone() e noTone()




void setup() {
  pinMode(11, OUTPUT); // initialise le broche
}

void loop() {
  tone(11, 600); // attivazione del buzzer
  delay(1000);
 
  noTone(11);    // spegnimento del buzzer
  delay(1000);
 
  tone(11, 900); // attivazione del buzzer
  delay(1000);
 
  noTone(11);    // spegnimento del buzzer
  delay(1000);
}

Spiegazione del codice per utilizzare tone() e noTone() Arduino



  1. per poter lavorare in multitasking, utilizzare la funzione millis invece di delay().

Programma Arduino per la riproduzione di musica

const byte COUNT_NOTES = 39;

int frequences[COUNT_NOTES] = {
  392, 392, 392, 311, 466, 392, 311, 466, 392,
  587, 587, 587, 622, 466, 369, 311, 466, 392,
  784, 392, 392, 784, 739, 698, 659, 622, 659,
  415, 554, 523, 493, 466, 440, 466,
  311, 369, 311, 466, 392
};

int durations[COUNT_NOTES] = {
  350, 350, 350, 250, 100, 350, 250, 100, 700,
  350, 350, 350, 250, 100, 350, 250, 100, 700,
  350, 250, 100, 350, 250, 100, 100, 100, 450,
  150, 350, 250, 100, 100, 100, 450,
  150, 350, 250, 100, 750
};

void setup() {
  pinMode(11, OUTPUT);
}

void loop() {
  for (int i = 0; i <= COUNT_NOTES; i++) {
    tone(11, frequences[i], durations[i] * 2);
    delay(durations[i] * 2);
    noTone(11);
  }
}

Conclusione. Le funzioni tone() e noTone() Arduino utilizzano un timer hardware, quindi non è possibile utilizzare un segnale PWM per l’altoparlante piezoelettrico nello sketch sulle porte di uscita 3 e 11 (tranne che sulla scheda Arduino Mega 2560). La generazione del segnale è semi-materiale, cioè il pin di Arduino è abilitato/disabilitato da un timer di interrupt (Timer 2), quindi il microcontrollore può bloccarsi ad alte frequenze sonore.

5/5 - (1 vote)


Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.