#include <avr/io.h>
#include <avr/interrupt.h>
const int LED_pin = 13; //interní led
const int sekce1 = 12;
const int sekce2 = 11;
const int sekce3 = 10;
const int sekce4 = 9;
const int sekce5 = 8;
const int sekce6 = 7;
const int sekce7 = 6;
const int MV = 5;
const int tlac1 = A0; //PC0, spouštěcí tlačítko
const int tlac2 = A1;
const int tlac3 = A2;
const int tlac4 = A3;
const int tlac5 = A4;
const int tlac6 = A5;
const int tlac7 = 3;
int stav_tlac1;
int stav_tlac2;
int lastState = HIGH;
int lastState2 = HIGH;
unsigned int reload = 0xF424; // dec 62 500
unsigned long previousTime = 0; // previusTime
unsigned long previousTime2 = 0;
unsigned long interval = 10000; //nastavení delay
volatile int sec;
volatile int min;
volatile int hod;
//byte maskPort
void setup()
{
pinMode(LED_pin, OUTPUT); //nastaveni portu s LED na vystup
pinMode(sekce1, OUTPUT);
pinMode(sekce2, OUTPUT);
pinMode(MV,OUTPUT); //hlavní ventil, bude slouzit i jako pomocná proměná
pinMode(tlac1, INPUT_PULLUP);
pinMode(tlac2, INPUT_PULLUP);
digitalWrite(LED_pin, LOW); //zhasne led na ARDUINO pin 13
digitalWrite(sekce1,LOW);
digitalWrite(sekce2,LOW);
digitalWrite(MV,LOW);
cli(); // zákaz vsech prerusení
TCCR1A = 0;
TCCR1B = 0;
OCR1A = reload; // porovnavaci registr - zadani hodnoty 62 500
TCCR1B = (1<<WGM12) | (1<<CS12); // delicka hodin
TIMSK1 = (1<<OCIE1A); // povoleni interrupt preteceni citace
sei(); // povoleni vsech interruptů
} //konec setup
void loop()
{
// start button 1
stav_tlac1 = digitalRead(tlac1); //stisknuti tlacitka prida minutu do citace
if (lastState == LOW && stav_tlac1 == HIGH) //pokud plati, vykoná se nasledujici funkce
{
min = min + 1; // ve finále smazat, test
digitalWrite(sekce1,HIGH); // zapne první sekci
digitalWrite(MV,HIGH); // zapne hlavní ventil
}
lastState = stav_tlac1; // pro nasledujici cteni stavu tlacitka
//delay(100); // debouncing, ve finale povolit
// konec tlačítka
unsigned long currentTime = millis(); // délka svícení led (promena interval)
if (currentTime - previousTime >= interval) // pokud plati, vykona se dalsi instrukce
{
digitalWrite(sekce1,LOW);
digitalWrite(MV,LOW);
previousTime = currentTime;
}
//end of button 1
/*
stav_tlac2 = digitalRead(tlac2); //stisknuti tlacitka prida minutu do citace
if (lastState2 == LOW && stav_tlac2 == HIGH)
{
min = min + 1; // ve finále smazat, test
digitalWrite(sekce2,HIGH); // zapne první sekci
digitalWrite(MV,HIGH); // zapne hlavní ventil
}
lastState2 = stav_tlac2;
delay(100); // debouncing
// konec tlačítka
unsigned long currentTime2 = millis();
if (currentTime2 - previousTime2 >= interval) // ted cas - predchozi cas >= runtime
{
digitalWrite(sekce2,LOW);
previousTime2 = currentTime2;
}
*/
} //konec loop
void flash() // funkce bliknuti_negace led ------------------------------------------------
{
static boolean output = HIGH;
digitalWrite(LED_pin, output);
output = !output;
}
void run_sekce1()
{
}
ISR(TIMER1_COMPA_vect) //obsluha vektoru přerušeni od čítače 1
{
sec++; // pricte impuls do citace vterin
flash(); //neguje led
if(sec==60) //
{
sec = 0;
min=min+1; // pricte minutu do promene minut
}
if(min>=10)
{min = 0;
hod=hod+1;
}
if(hod==24) {hod=0;}
} //konec preruseni