volatile signed char temps;
volatile signed char direction;
void setup() {
Serial.begin(9600);
temps = 0;
direction = 0;
DDRD = 0b11111111;
PORTD = 0b11110000;
TCCR1A = 0; // Init Timer1A
TCCR1B = 0; // Init Timer1B
TCCR1B |= 0b00000100; // Prescaler = 256
TCNT1 = 3035; // Timer Preloading
TIMSK1 |= 0b00000001; // Enable Timer Overflow Interrupt
}
ISR(TIMER1_OVF_vect)
{
TCNT1 = 3035; // Timer Preloading
if (direction == 0) {
temps++;
if (temps > 15) {
direction = 1;
temps = 14;
}
}
else {
temps--;
if (temps < 0) {
direction = 0;
temps = 0;
}
}
}
void loop() {
Effacer();
Afficher(temps);
Serial.print("Temps : ");
Serial.println(temps);
}
void Afficher(unsigned char valeur) {
if (valeur > 7) {
digitalWrite(7, HIGH);
valeur -= 8;
}
if (valeur > 3) {
digitalWrite(6, HIGH);
valeur -= 4;
}
if (valeur > 1) {
digitalWrite(5, HIGH);
valeur -= 2;
}
if (valeur > 0) {
digitalWrite(4, HIGH);
}
}
void Effacer(void) {
digitalWrite(7, LOW);
digitalWrite(6, LOW);
digitalWrite(5, LOW);
digitalWrite(4, LOW);
}