
Video
Schema circuito

Codice sorgente
1int buzzerPin = 8;
2int btnOn = 7;
3int btnOff = 6;
4int btnIncrease = 5;
5int btnDecrease = 4;
6int frequency = 300;
7int state = 0;
8
9void setup() {
10 pinMode(btnOn, INPUT);
11 pinMode(btnOff, INPUT);
12 pinMode(btnIncrease, INPUT);
13 pinMode(btnDecrease, INPUT);
14}
15
16void loop() {
17 if (digitalRead(btnOn)) {
18 state = 1;
19 }
20
21 if (digitalRead(btnOff)) {
22 state = 0;
23 }
24
25 if (digitalRead(btnIncrease)) {
26 frequency = frequency + 50;
27 delay(100);
28 }
29
30 if (digitalRead(btnDecrease)) {
31 frequency = frequency - 50;
32 delay(100);
33 }
34
35 if (state == 1) {
36 tone(buzzerPin, frequency);
37 } else {
38 noTone(buzzerPin);
39 }
40}FAQ
Perché si utilizzano resistenze da 220 Ω per i pulsanti?▾
Nel progetto, i pulsanti vengono letti con INPUT_PULLUP o pull-down; le resistenze in serie proteggono il pin da eventuali cortocircuiti. Nella configurazione pull-down si preferisce generalmente un valore di 10 kΩ; l'impostazione di pinMode nel codice deve essere compatibile con queste valori, a seconda della configurazione del circuito.
In quale intervallo di frequenza va regolata?▾
L'orecchio umano percepisce frequenze comprese tra circa 20 Hz e 20 kHz, ma i piccoli cicalini producono suoni ottimali nella gamma tra 500 e 5000 Hz. Impostando l'incremento o la diminuzione a 50–100 Hz, la variazione diventa udibile.
Quando tengo premuto il pulsante, la frequenza cambia rapidamente: come faccio a rallentarla?▾
Se la frequenza viene modificata ad ogni ciclo, tenere premuto provoca un aumento troppo rapido. O modifica la frequenza una volta per ogni pressione (rilevamento dei bordi) oppure aggiungi una breve pausa dopo la modifica.
Come posso impedire che la frequenza superi i limiti?▾
Con `constrain(frequenza, 100, 5000)` puoi mantenere il valore entro un determinato intervallo. In questo modo non si scende a frequenze troppo basse o troppo alte da risultare impercettibili.
