BOnjour,
Je viens de rencontrer un problème dont la raison m'échappe .
Je suis avec un Arduino Duemilanove ATmega328 et j'ai un bus I2C qui y est connecté.
Mon but est d'avoir des interruptions qui vont lire mes valeur sur le bus de façon régulière.
Pb, mon appli gèle des que j'utilise la fonction, dans l'interruption, Wire.endTransmissionde la lib Wire.h.
Pourriez vous me dire pourquoi ? Est un problème de timer qui utilisé par la gestion d'interruption et la gestion du bus I²C ? (juste une hypothèse donc je n'ai pas moyen de vérifier par faute de savoir où chercher)
Merci par avance,
#include <Wire.h>
#include <MsTimer2.h>
int ID_pcf=0;
int Id_an=0;
int Id_in=0;
int tmps=0;
int mesure[8]; // tab des dernieres mesures
int id_an=0; // num entrée ana à lire
void setup()
{
Wire.begin();
Serial.begin(9600);
Serial.println("Start Calibration");
MsTimer2::set(400, myinterupt); // 500ms period
MsTimer2::start();
}
void loop() {
Serial.print(ID_pcf);
Serial.print("\t id an= ");
Serial.print(id_an);
Serial.print(" \tmesure= ");
Serial.println(tmps);
}
void myinterupt(){
MsTimer2::stop() ;
if (id_an<4) ID_pcf= B1001001;
else ID_pcf=B1001011;
int Id_in=id_an%4;
Wire.beginTransmission(ID_pcf);
Wire.send(Id_in);
// Wire.endTransmission();
//Wire.requestFrom(ID_pcf, 8);
//tmps++=Wire.receive();
// mesure[id_an]=tmps;
if (id_an==7) { id_an= 0;tmps++;}
else {id_an ++;tmps++;}
MsTimer2::start();
}