callBack

Bonjour,

Je cherche à faire une fonction callback depuis une class. j’ai donc:

maClas.hpp

#if defined(ARDUINO) && ARDUINO >= 100
  #include "Arduino.h"
 #else
  #include "WProgram.h"
#endif

class maClass{
  private:
    void (*note_on_callback)(int i);
    void doJob();
  public:
    lipo();
    void begin();
    void loop();
    void setNoteOnCallback(void(*note_on_callback)(int* i));
};

maClass.cpp

#include "maClass.h"

maClass::maClass(){
  
}

void maClass::setNoteOnCallback(
                void (*note_on_callback)(int* i)) {
        this->note_on_callback = note_on_callback;
}
void maClass::doJob(){
  int v = 0;
  for(int i =0; i < 10; i++){
    v = i;
    delay(50);  
  }
  if(note_on_callback){
    note_on_callback(v);  
  }
}

void maClass::loop(){
  Serial.println("maClass::loop");  
}

puis enfin mon fichier .ino

#include "maClass.h";
maClass maClassA
void note_on_callback(int i) {
        printf("Note on : channel %d\n", i);
}

void setup(){
  Serial.begin(9600);
}

void loop(){
  Serial.println("main::loop");
  maClassA.loop();
  delay(1000);
}

A la compilation j’ai l’erreur:

lipo.cpp: In member function ‘void lipo::setNoteOnCallback(void ()(int))’:
lipo.cpp:19: error: invalid conversion from ‘void ()(int)’ to ‘void (*)(int)’

pourant je pass bien un int …

Une explication SVP.

void setNoteOnCallback(void(note_on_callback)(int i));

il faut remplacer (int* i) par (int i)

Merci XavierMiller,

Plus d'erreur à la compil. Tutefois je ne passe jamais par la fonction callBack.
J'ai fait le retrait du test:
if(note_on_callback){
note_on_callback(v);
mais ça change rien ...

Une idée svp.

nicephore:
Merci XavierMiller,

Plus d'erreur à la compil. Tutefois je ne passe jamais par la fonction callBack.
J'ai fait le retrait du test:
if(note_on_callback){
note_on_callback(v);
mais ça change rien ...

Une idée svp.

Je ne vois pas d'appel à la méthode setNoteOnCallback()

Merci fdufnews,

Mais comment faire cette appel ?

Je ne comprends pas grand chose à ces callBacks et je bloque dessus depuis ce matin, même les lecture ici où là.

C'est bon j'ai trouvé.

Dans mon setup() du fichier ino j'ai simplement fait:

maClass..setNoteOnCallback(note_on_callback);

Merci.

certes, mais dans maClass, fais-tu appel ensuite à ce callback ?

nicephore:
C’est bon j’ai trouvé.

Dans mon setup() du fichier ino j’ai simplement fait:

maClass…setNoteOnCallback(note_on_callback);

Merci.

D’accord maintenant note_on_callback pointe bien sur quelque chose mais si la méthode doJob n’est jamais appellée il ne se passera rien