/**************************************************************************
trafic light without instruction in the loop
**************************************************************************/
#define led1 11
#define led2 8
#define led3 4
volatile int state;
void setup() {
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
cli(); // Nointerrupt
TCCR1A = 0;
TCCR1B = 0;
// fattore di divisione del prescaler
TCCR1B |= (1 << CS12) |(1 << CS10) ; //(1 << CS12)|(1 << CS11)|(1 << CS10);
/*
WGM Waveform Generation Mode
con WGM 10 11 12 13 puoi impostare una delle seguenti modalità
- PWM, phase correct 8-10bit
- CTC
- Fast PWM 8-10bit
- PWM, phase and Frequency Correct
*/
TCCR1B |= (1 << WGM10);
// frequenza con prescaler
// con le soglie definisco il duty cycle
// lento medio veloce
OCR1A = 43000; //37000; // 58000 // soglia alta max 64k
OCR1B = 21600; //26000; // 52000 // soglia bassa
TCNT1 = 1000; //15000; // 46000 // valore di inizio conteggio stesso numero in ISR_OVR
TIMSK1 |= (1 << OCIE1B);
TIMSK1 |= (1 << OCIE1A);
TIMSK1 |= (1 << TOIE1);
sei(); // ok interrupt
// START
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
delay(300);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
}
ISR(TIMER1_COMPB_vect) {
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
digitalWrite(led3,LOW);
}
ISR(TIMER1_COMPA_vect) {
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);
}
ISR(TIMER1_OVF_vect) {
digitalWrite(led1,HIGH);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
TCNT1=1000;
}
void loop() {
/*
your code
*/
}