Code: Select all
volatile int Prosli, Prosli2 ,Period, Period_us,Period2, Period2_us;
volatile unsigned long zadnjemjerenje1=0, zadnjemjerenje2=0;
const byte ulaz1 = 2, ulaz2 = 3;
void resetiraj_timer1(){
TCCR1A = 0;
TCCR1B = 0;
TCCR1C = 0;
TIMSK1 = 0;
TCNT1 = 0;
}
void postavi_timer1(){
TCCR1B |= 0x02;
}
void setup(){
resetiraj_timer1();
postavi_timer1();
Serial.begin(9600);
pinMode(ulaz1, INPUT_PULLUP); //interruptPin = 2, na pin 2 spajas signal.
pinMode(ulaz2, INPUT_PULLUP); // na pin 3 ide drugi signal
attachInterrupt(digitalPinToInterrupt(ulaz1), prekid1, RISING);
attachInterrupt(digitalPinToInterrupt(ulaz2), prekid2, FALLING);
}
void loop(){
//Tu radiš kaj oćeš, u varijablama Period i Period2 su ti periodi, ali da ih skaliraš na us, moraš podjeli s 2
Period_us = Period/2; //Timer broji svakih 500ns pa to treba podjelit sa 2 da bi doil us, skaliranje
Period2_us = Period2/2;
Serial.print("Periodi 1 i 2:");
Serial.print(Period_us);
Serial.print("\t");
Serial.print(Period2_us);
if((millis()-zadnjemjerenje1)>1000){
//Tu postaviš frekv1 = 0, a period1 na beskonačno
//To mora ostat u glavnoj petlji
}
if((millis()-zadnjemjerenje2)>1000){
//Tu postaviš frekv2 = 0, a period2 na beskonačno
//To mora ostat u glavnoj petlji
}
}
void prekid1(){
int trenutno = TCNT1;
if(TIFR1&1){ //Ako je došlo do prelejva
Period = (65535-Prosli) + trenutno;
}
else{
Period = trenutno - Prosli;
}
Prosli = trenutno;
zadnjemjerenje1=millis();
}
void prekid2(){
int trenutno = TCNT1;
if(TIFR1&1){ //Ako je došlo do prelejva
Period2 = (65535-Prosli2) + trenutno;
}
else{
Period2 = trenutno - Prosli2;
}
Prosli2 = trenutno;
zadnjemjerenje2=millis();
}