43 lines
1.4 KiB
C++
43 lines
1.4 KiB
C++
volatile unsigned long time1;
|
|
volatile unsigned long time2;
|
|
unsigned long time3;
|
|
volatile float ps;
|
|
volatile boolean data_available = false;
|
|
|
|
void setup()
|
|
{
|
|
Serial.begin(9600);
|
|
Serial.println();
|
|
pinMode(A3,INPUT);
|
|
pinMode(A5,INPUT);
|
|
attachInterrupt(A3,in1,RISING); //enable ISR1 for voltage signal at rising from zero crossing
|
|
attachInterrupt(A5,in2,RISING); //enable ISR2 for current signal at rising from zero crossing
|
|
interrupts();
|
|
}
|
|
void in1()
|
|
{
|
|
time1=micros(); //measure time in micro second for first zero crossing ISR1
|
|
}
|
|
void in2()
|
|
{
|
|
time2=micros(); //measure time in micro second for first zero crossing ISR2
|
|
data_available = true;
|
|
}
|
|
|
|
void loop()
|
|
{
|
|
if (data_available == true)
|
|
{
|
|
time3=time2-time1;
|
|
ps = ((time3*360.0)*50/1000000); //calculate the phase shift from measured time difference
|
|
Serial.print("Time1=");
|
|
Serial.println(time1);
|
|
Serial.print("Time2=");
|
|
Serial.println(time2);
|
|
Serial.print("Phase Shift = ");
|
|
Serial.println(ps,6);
|
|
Serial.print("degree\n\n");
|
|
data_available = false;
|
|
}
|
|
}
|