Bonjour lorsque j'effectue ce programme :
/* Ce code a pour but de mesurer la vitesse d'un MCC.
La rapport cyclique du hacheur est réglé par potentiomètre
Cablage : Codeurs sur broches 2 et 3
*/
#include <SimpleTimer.h>
SimpleTimer timer; // Timer pour échantillonnage
const int frequence_echantillonnage = 50; // Fréquence d'exécution de l'asservissement
// Définition des données du moteur
int rapport_reducteur = 34; // Réducteur du moteur
int resolution = 24; // Résolution du codeur
unsigned int time = 0;
long debut = 0;
// Définition des entrées
const int vitesseMotB = 6; // 11 (Arduino Shield) ou 6 (DFRobot Shield)
const int sensMotB = 7; // 13 (Arduino Shield) ou 7 (DFRobot Shield)
const int freinMotB = 8; // 8 (Arduino Shield)
const int encoderPinA = 2;// Broche Codeur A
const int encoderPinB = 3;// Broche Codeur B
// ----------------------------------------------------------------
// Initialisations
// ----------------------------------------------------------------
//init compteur :
int encoder0Pos = 0; //position de départ
int encoder0Pos_precedente = 0;
boolean A_set = false;
boolean B_set = false;
int PWM;
/* ==================================================================
ROUTINE D'INITIALISATION
==================================================================
*/
void setup() {
Serial.begin(9600); // Initialisation port COM
pinMode(encoderPinA, INPUT); // Broche Codeur A
pinMode(encoderPinB, INPUT); // Broche Codeur B
pinMode (vitesseMotB, OUTPUT); // Broche vitesseMotA configurée en sortie
pinMode (freinMotB, OUTPUT); // Broche freinMotA configurée en sortie
pinMode (sensMotB, OUTPUT); // Broche sensMotA configurée en sortie
digitalWrite(vitesseMotB, LOW); // Moteur à l'arret
digitalWrite(sensMotB, LOW); // Sens moteur
digitalWrite(freinMotB, LOW); // Frein off
// Interruption de l'encodeur A en sortie 0 (pin 2)
attachInterrupt(0, doEncoderA, RISING);
// Interruption de l'encodeur B en sortie 1 (pin 3)
attachInterrupt(1, doEncoderB, RISING);
// Echantillonage pour calcul de la vitesse
// A chaque période on recommence la routine "asservissement"
timer.setInterval(1000 / frequence_echantillonnage, asservissement);
}
/* ==================================================================
FONCTION PRINCIPALE
==================================================================
*/
void loop() {
timer.run();
PWM = analogRead(A2);
if (PWM < 512) {
digitalWrite(sensMotB, LOW);
}
else {
digitalWrite(sensMotB, HIGH);
}
analogWrite( vitesseMotB, abs(PWM - 512) / 2 );
Serial.println(abs(PWM - 512) / 2);
}
/* ===================================================
ROUTINE D'ASSERVISSEMENT
Appelée à chaque période pour calcul de la vitesse
=================================================== */
void asservissement()
{
Serial.print(millis()); Serial.print(" | ");
float frequence_codeuse = frequence_echantillonnage * (encoder0Pos - encoder0Pos_precedente);
float vit_roue_tour_sec = (float)frequence_codeuse / resolution / rapport_reducteur;
encoder0Pos_precedente = encoder0Pos;
Serial.print("Vitesse : ");
Serial.print(vit_roue_tour_sec * 60); Serial.println(" tr/mn");
}
/* ===================================================
ROUTINES D'INCREMENT CODEURS
Appelée à tous les changements d'état de A et B
=================================================== */
void doEncoderA() {
B_set = digitalRead(encoderPinB) == HIGH;
if (B_set) {
encoder0Pos = encoder0Pos + 1;
}
else {
encoder0Pos = encoder0Pos - 1;
}
}
void doEncoderB() {
A_set = digitalRead(encoderPinA) == HIGH;
if (A_set) {
encoder0Pos = encoder0Pos - 1;
}
else {
encoder0Pos = encoder0Pos + 1;
}
}
Lors de son execution je reçois ce message d'erreur : no matching function for call to 'SimpleTimer::setInterval(int, void (&)())'
Savez vous pourquoi ? Merci d'avance