Arduino Polska Forum
Przerwania programowe -poradnik. - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Inne (https://forum.arduinopolska.pl/dzial-inne)
+--- Dział: Poradniki (https://forum.arduinopolska.pl/dzial-poradniki)
+--- Wątek: Przerwania programowe -poradnik. (/watek-przerwania-programowe-poradnik)



Przerwania programowe -poradnik. - adix - 01-09-2016

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.

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
}
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.
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);

}



RE: Przerwania programowe -poradnik. - adix - 14-11-2017

To podmień.
Timer1.initialize(100000);