• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Przerwania programowe -poradnik.
#1
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);

}
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#2
To podmień.
Timer1.initialize(100000);
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości