// C++ code
//
int buzzPin=8;
int potPin=A1;
int potVal;
int toneVal;
void setup()
{
//Serial.begin(9600);
pinMode(buzzPin, OUTPUT);
pinMode(potPin, INPUT);
}
void loop()
{
potVal=analogRead(potPin); // Citirea valorii analogice de la potențiometru returnează un număr între 0 și 1023 (deoarece citirile de pe un pin analogic de pe Arduino sunt pe 10 biți)
toneVal=(10000./1023.)*potVal;//+60 În această linie, valoarea citită de la potențiometru este transformată într-o valoare pentru întârzierea buzzer-ului. Aceasta determină frecvența sunetului emis de buzzer.
//Calcularea unei întârziere în microsecunde (toneVal) bazată pe valoarea potențiometrului. Această întârziere va controla frecvența semnalului trimis la buzzer, deci indirect tonul emis de acesta.
digitalWrite(buzzPin, HIGH);
delayMicroseconds(toneVal);
//definește o întârziere în microsecunde. Întârzierea totală pentru un ciclu complet de semnal HIGH și LOW este de 2 * toneVal. Aceasta corespunde perioadei semnalului (timpul necesar pentru un ciclu complet).
//Frecvența sunetului este invers proporțională cu perioada semnalului. Deci, pentru a obține frecvențe de sunet audibile, trebuie să ajustăm valoarea perioadei.
//Frecvențele audibile sunt, în general, între 20 Hz și 20.000 Hz. Frecvențele mai joase corespund unor valori mai mari pentru toneVal, iar frecvențele mai înalte corespund unor valori mai mici.
digitalWrite(buzzPin, LOW);
delayMicroseconds(toneVal);
}
//digitalWrite() și digitalRead() folosesc valori digitale pe 1 bit (0 sau 1, HIGH sau LOW).
//analogWrite() folosește valori pe 8 biți (de la 0 la 255).
//analogRead() folosește valori pe 10 biți (de la 0 la 1023).
//Un buzzer (mai exact un buzzer piezoelectric sau electromagnetic) produce sunet prin vibrații. Aceste vibrații sunt create de o fluctuație rapidă a curentului, adică prin alternarea între stările de HIGH (curent trece) și LOW (curent nu trece).