Mesure de temps et interruption externe FREQUENCE

Bonjour tout le monde je suis un élève de terminal S science de l’ingénieur et je doit réaliser un projet:
Mon projet et un accordeur automatique de guitare.
Mon montage et composée de :
-Un micro avec un filtre
-Un système de détection de passage a zéro (optocoupleur si je dit pas de bêtise)
-Un moteur et les pièce nécessaire a son adaptation a la guitare
-Une carte Arduino

Je sollicite votre aide car je doit faire un programme qui fasse tourné le moteur en fonction de la fréquence obtenue en entré par l'optocoupleur
Je suis débutant en arduino mais possède déjà un petit pac avec quelque élément et une carte arduino
Je veut apprendre à calculer la fréquence avec Arduino et avoir vos proposition de programme qui permettrai le bon fonctionnement de mon projet
Mon prof ma conseillé de d'apprendre a gérer une interruption externe et faire une mesure de temps (soustraction de deux registres liés aux timer).

Toute information serais la bienvenue

Je vous remercie d'avance

paulo3:
Toute information serais la bienvenue

Pour cela il faudrait:

-Lire et comprendre les messages de bienvenues et usages du forum.
-Poster dans la bonne section.
-Fournir un minimum de travail personnel

Je vous remercie immensément pour votre réponse d'une grande pertinence qui m'aide énormément; grâce à vous un lycéen en détresse a pu être sauvé vous êtes un véritable héros anonyme de la société.

Néanmoins, si d'autre personne on envie d'aider elle serait également les bienvenues...

Bonsoir

aides toi (en postant ton message au bon endroit et en prenant connaisssance des consignes) et le forum t'aidera !!

La réponse de jambe est on ne peut plus pertinente et a le mérite de conditionner l'aide

premier pas : faire déplacer (lien report to moderator) par un modérateur ton message dans le forum principal .

Içi ne viennent que les forumeurs désireux de prendre connaisance des réalisations complètes comme la superbe gestion d'aquarium proposée ce jour. Comprends leur déception quand il trouvent une esquisse de début de projet !!

Merci pour votre aide.
Je comprend votre déception en voyant mon début de projet.
J'ai demandé a ce que mon message soit déplacer au bon endroit.
Quant on m'explique correctement je comprend et j’espère que ce post sera rapidement déplacé...
Dsl pour le dérangement

J’espère qu'a l'avenir quelqu’un m'aidera a faire mon projet ...

Bonjour ,

Comme ta prof te l'a suggéré il faut utiliser les interruptions, mais tu n'as pas besoin d'utiliser les registres timer (sauf pour la beauté de l'art ) , il suffit de faire la différence des temps lus avec micros()

Bonsoir,
J'ai un doute kamill.

Il s'agit d'un projet d'accordeur de guitare donc les fréquences en jeu et la résolution de la mesure de fréquence me paraissent incompatibles avec l'utilisation classique de millis()
Le recours au Timer soit "à a la main" soit via une librairie existante" parait nécessaire.

peut être freqmesure de pjtc (disponible dans le menu librairies de l'IDE Arduino)
Cette librairie gère une entrée d'interruption et un timer en 'capture', elle fait (à première vue, je ne l'utilise pas)ce que ton prof t'as conseillé de faire.
infos içi : FreqMeasure Library, for Measuring Frequencies in the 0.1 to 1000 Hz range, or RPM Tachometer Applications

Tests à faire pour voir comment elle se comporte avec des signaux issus d'une guitare (harmoniques et forte variation d'amplitude à partir de l'attaque.

Bonsoir al1fch,

Je ne parle pas de millis (), mais de micros () qui donne le temps en micro secondes (avec une résolution de 4 micro sec )

Bonsoir kamill
j'ai lu sans lire !! :frowning:
les 4µs semblent permettre de faire mieux que le quart de ton sur la corde de mi E4

Voila mon programme actuel je sais qu’il est loin d’être fini mai je ne comprend pas ou placer le timer ou la fonction micro ni comment les intégrés au programme :

int frequence = 82; //la frequence de la corde de mi (accordé) est de 82hz

void setup() {

pinMode(4,OUTPUT); //je declare que j’ai un moteur sur la pin 4
pinMode(2, INPUT); //je declare que j’ai un micro sur la pin 2 en entrée
}

void loop() {

int corde = digitalRead(pushButton); // je ne sais pas comment gerer mon signal je le stocke dans la variable corde
//ici je ne sais pas quoi mettre

if (corde<82):
while (corde<82):
digitalWrite(pinMoteur,HIGH); //le moteur se lance

}