/*
- contatore impulsi con overflow
- ingresso di conteggio pin 5
- per prova vengono utilizzzati impulsi a frequenza molto bassa
*/
#include <TimerOne.h>
const int hardwareCounterPin =5; //ingresso impulsi per conteggio con timer 1
const int input9 = 9; //ingresso per monitor impulsi in ingresso
const int ledPin10 =10; // led per monitor avvenuto overflow ed esecuzione routinr interrupt
const int ledPin13 =13; //led monitor impulsi ingresso 9
int input9State = 0;
int byteLedPinState = 0;
int ledOn;
int ledState10 = LOW;
const int cycleLedOn=100; //costante per numero cicli in cui il ledPin10 rimane
//acceso dopo accensione da interrupt overflow timer 1
unsigned int costSincro=65526; //costante da caricare nei registri del timer 1 per contare 10 impulsi
void setup(){
pinMode(ledPin10,OUTPUT);
pinMode(ledPin13,OUTPUT);
pinMode(input9,INPUT_PULLUP);
pinMode(hardwareCounterPin,INPUT_PULLUP);
ledOn=cycleLedOn;
TCCR1A=0; //azzera valore timer 1
bitSet (TCCR1B,ICNC1); //abilita filtro ingresso durata 4 cicli di clock interni
bitSet (TCCR1B,ICES1); //abilita fronte di salita per conteggio
bitSet (TCCR1B,CS12); //abilita modalita ingresso clock esterno
bitSet (TCCR1B,CS11); //abilita modalita ingresso clock esterno
bitSet (TCCR1B,CS10); //abilita modalita ingresso clock esterno
bitSet (TIMSK1,ICIE1); //abilita interrupt timer 1
bitSet (TIMSK1,TOIE1); //abilita interrupt timer 1
bitSet (TIFR1,TOV1); //abilita interrupt overflow timer 1
TCNT1==costSincro;
Timer1.attachInterrupt( TIMER1_OVF_vect ); // abilita l'interrupt di overflow di timer 1
}
void loop(){
led1();
led2();
}
void led1(){
if (ledState10 == 1){
ledOn-=1;
}
}
void led2(){
if (ledOn == 0){
ledOn=cycleLedOn;
digitalWrite(ledPin10, LOW);
}
input9State = digitalRead(input9);
if (input9State == HIGH) {
digitalWrite(13, HIGH);
}
if (input9State == LOW){
digitalWrite(13, LOW);
}
}
//}
/// ----------------------------------------
/// Routine di servizio interrupt di timer 1
/// ----------------------------------------
void TIMER1_OVF_vect()
{
Timer1.detachInterrupt(); // disabilita interrupt overflow timer 1
TCNT1 == costSincro;
digitalWrite(ledPin10, HIGH);
ledState10 = HIGH;
Timer1.attachInterrupt( TIMER1_OVF_vect ); // riabilita interrupt overflow timer 1
}