Bonjour,
Désolé je suis un début sur l'arduino et voici mon nouveau programme qui fonctionne.
#include <Wire.h>
///#include <LiquidCrystal_I2C.h>
#include <LiquidCrystal.h>
#include <SoftwareSerial.h>
#include <TimerOne.h>
#include <math.h>
#define A1 20 // transformateur de tension
#define A2 21 //transformateur de courent
#define LED13 13
LiquidCrystal lcd(9, 8, 4, 5, 6, 7); // LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
float T1,T0;
float pi;
float temps; //
float Time0, Time1; // peridiode des signaux
float dephasage, dephasagerad,fp;
float fe; //frequence d'entrée
void setup()
{
pinMode(LED13, OUTPUT);
pinMode(A1, INPUT);
pinMode(A2,INPUT);
Timer1.initialize(1000); // initialize timer1, and set a 0,1 second period => 100 000 pour 0.01s 10 000
lcd.begin(20, 4); //modifier pour un afficheur 16x2
Serial.begin(9600);
attachInterrupt(0, func_k, RISING); // broche2
T0 = millis();
attachInterrupt(1, powerfactor, RISING); // broche3
// TCCR2B = (TCCR2B & 0b11111000) | 0x01; //pin 3 32khz http://playground.arduino.cc/Main/TimerPWMCheatsheet
}
// faisons deux interruotion pour pouvoir calculer le temps
void func_k() // la fonction appelée par l'interruption externe n°0
{
Time0=(micros()-T0); //pour mesurer la perriode du signal broche 2
T0= micros();
T1= T0;
}
void powerfactor() // la fonction appelée par l'interruption externe n°1
{
temps=Time0-micros()+T1; //pour mesurer l'ecart du temps
}
void callback()
{
digitalWrite(LED13,HIGH); //permet de mesurer à l'oscillo, le temps du calcul du filtre et le temps de la routine d'interruption
digitalWrite(LED13,LOW);
}//fin routine
void loop()
{
fe=1000000/Time0;
dephasage=((360*temps)/Time0);
dephasagerad=((dephasage*PI)/180);
fp = cos(dephasagerad);// factor power
lcd.setCursor(0,0);
lcd.print("Frequence="); //
lcd.print(fe);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print("Delta T=");
lcd.print(temps,0);
lcd.print(" ");
lcd.setCursor(0,2);
lcd.print("Dephasage=");
lcd.print(dephasage);
lcd.print(" ");
lcd.setCursor(0,3);
lcd.print("Factor Power=");
lcd.print(fp,3);
lcd.print(" ");
} // fin loop
J'ai fais quels test pour vérifier le bon fonctionnement du programme.
Pour une fréquence d’entrée de 50hz, avec des phasages imposés entres les 2 signaux, le programme mesure les valeurs suivantes:
Pour une fréquence d’entrée de 500Hz, avec des phasages imposés entres les 2 signaux, le programme mesure les valeurs suivantes:

