Bonjour à tous, dans le cadre de mon tipe j’aimerais mesurer la fréquence (440hz) d’un signal sinusoidal avec Arduino. Mon code ci dessous renvoie des valeurs très incohérentes et je ne comprend pas pourquoi,
const int sensorPin = A0; // Pin analogique où le signal du GBF est connecté
int signalValue = 0; // Valeur lue par la broche analogique
int threshold = 512; // Seuil de détection (au centre de la plage de lecture analogique)
unsigned long startTime, endTime;
float frequency;
void setup() {
Serial.begin(9600); // Initialisation de la communication série
}
void loop() {
// Trouver la crête montante du signal
signalValue = analogRead(sensorPin);
if (signalValue > threshold) {
startTime = micros(); // Capturer le temps du début du cycle sinusoïdal
// Attendre la prochaine crête descendante
while (analogRead(sensorPin) > threshold) {
// Attend que le signal redescende en dessous du seuil
}
endTime = micros(); // Capturer le temps du cycle complet
// Calculer la période du signal
unsigned long period = endTime - startTime;
// Calculer la fréquence en Hertz
frequency = 1000000.0 / period; // Conversion microsecondes en Hertz
// Afficher la fréquence
Serial.print(« Fréquence : « );
Serial.print(frequency);
Serial.println( » Hz »);
// Attendre un peu avant de recommencer
delay(500);
} }