Przerwania programowe to funkcja działająca nie zależnie co dzieje się w uc i niezależnie w jakim miejscu działa nasz program.
Do tego służy Bibliotek "TimerOne.h"-możemy ja pobrać bezpośrednio z arduino IDE wchodzimy: Szkic>doaj bibliotekę>zaradzaj bibliotekami >i wpisujemy TimerOne , nastepnie dajemy instal.
Opis działania przykładowego programu.
Tu zamieszczamy kod odpowiedzialny za niezależne powtarzanie np odliczanie sekund w zegarku.
//.....................................................
Przykładowy program wykorzystując ta bibliotek to zegarek na lcd 4x20.
Do tego służy Bibliotek "TimerOne.h"-możemy ja pobrać bezpośrednio z arduino IDE wchodzimy: Szkic>doaj bibliotekę>zaradzaj bibliotekami >i wpisujemy TimerOne , nastepnie dajemy instal.
Opis działania przykładowego programu.
Kod:
#include "TimerOne.h"
void setup()
{
pinMode(13, OUTPUT);
Timer1.initialize(500000); // initialize timer1, and set a 1/2 second period
Timer1.pwm(9, 512); // setup pwm on pin 9, 50% duty cycle
Timer1.attachInterrupt(Przerwanie); // attaches Przerwanie() as a timer overflow interrupt
}
void Przerwanie()
{
digitalWrite(13, digitalRead(13) ^ 1); //miganie diody 13
}
void loop()
{
//Twij kod programu
}
Kod:
Timer1.initialize(500000); -tu zmieniamy czas powtazania obecie to 0.5 sekundy 1000000=1 sekuda
Kod:
void Przerwanie()
{
digitalWrite(10, digitalRead(13) ^ 1); //miganie diody 13
}
//.....................................................
Przykładowy program wykorzystując ta bibliotek to zegarek na lcd 4x20.
Kod:
#include "TimerOne.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
int sek,minut,godz;
void setup()
{
pinMode(13, OUTPUT);
Timer1.initialize(200000); // initialize timer1, and set a 1/2 second period
Timer1.pwm(9, 512); // setup pwm on pin 9, 50% duty cycle
Timer1.attachInterrupt(callback); // attaches callback() as a timer overflow interrupt
lcd.init(); // initialize the lcd
lcd.init();
lcd.backlight();
minut=59;
godz=23;
}
void callback()
{
digitalWrite(13, digitalRead(13) ^ 1);
sek++;
if (sek==60) {
minut++;
sek=0;}
if (minut==60) {
godz++;
minut=0;}
if (godz==24) {
godz=0;
sek=0;}
}
void loop()
{
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,0);
lcd.print("Godzina");
lcd.setCursor(7,0);
lcd.print("-");
lcd.setCursor(9,0);
lcd.print(godz);
lcd.setCursor(11,0);
lcd.print(":");
lcd.setCursor(13,0);
lcd.print(minut);
lcd.setCursor(15,0);
lcd.print(":");
lcd.setCursor(17,0);
lcd.print(sek);
delay(800);
}
Jeśli pomogłem podziękuj punktem reputacji