Bonjour, Je dispose d'un arduino MEGA et j'ai besoin de contrôler un injecteur pendant 14 millisecondes touts les 20 fronts montants. Je m'explique: une roue perforée fournie un signal carré d'une fréquence variable, je voudrais que mon arduino compte les fronts montants et qu'il puisse envoyer un signal de commande a l'injecteur (signal qui devra duré 14 ms). Voir schéma en pièce jointe. J'arrive a compter le nombre de fronts montants grace a un petit bout de code mis dans la boucle principale, mais avec ce protocole durant l'envoi du signal a l'injecteur (soit pendant 14 ms) le comptage des fronts montants en provenance de l'horloge est interrompu.C'est pour cette raison que j'ai besoin d'un multitache ou d'une technique similaire tel que l'utilisation des timer hardware interne... quelqu'un aurait il une idée sur l'utilisation de ces timers?
Code://num des broches arduino int BrRoueCodeuse=0; int BrInjecteur1=1; //variables utiles lors de l'execution du prg int buttonPushCounter = 0; // variable pour le comptage du nombre d'appuis sur le bouton poussoir int buttonState = 0; //Variable pour l'état actuel du bouton poussoir int lastButtonState = 0; // Variable pour l'état précédent du bouton poussoir void setup() { //initialisation de broches arduino pinMode(BrRoueCodeuse, INPUT); pinMode(BrInjecteur1, OUTPUT); } void loop() { // ------------Mécanisme de comptage des fronts montants en provenance de la roue codeuse---------- buttonState = digitalRead(BrRoueCodeuse);//lecture de l'etat du signal (HIGW / LOW) // compare l'état actuel du bouton poussoir à l'état précédent mémorisé if (buttonState != lastButtonState) { // si l'état du bouton poussoir a changé et est HAUT, on incrémente la variable de comptage if (buttonState == HIGH) { buttonPushCounter++; } lastButtonState = buttonState;//on memorise le nouvel état } //-------------------------------------Fin du mécanisme de comptage ------------------------------ //----------------------------------------gestion injecteur n°1----------------------------------- if (buttonPushCounter % 20 == 0) { digitalWrite(BrInjecteur1, HIGH); delay(14); // attente de 14 ms } else { // sinon digitalWrite(BrInjecteur1, LOW); } }
Merci de me dire comment vous auriez procédé pour régler ce problème.
Bonne journée
-----