TVZ Mechatronics Team


Zagreb University of Applied Sciences, Professional Study in Mechatronics

Tajmeri i prekidi

U sljedećim vježbama naučit ćete koristiti klase Timer, Timeout, Ticker i InterruptIn iz standardne mbed biblioteke. Programski kôdovi su dijelom preuzeti iz preporučene literature: Toulson, R. & Wilmshurst, T. (2016). Fast and Effective Embedded Systems Design - Applying the ARM mbed (2nd edition), Newnes, Oxford, ISBN: 978-0-08-100880-5.

Korištenje mbed klase Timer

Proučite API dokumentaciju klase Timer.

Proučite sljedeći programski kôd i pokušajte zaključiti što će se događati s LED-icama. Nakon toga testirajte program na mbed-u i provjerite da li su vaša predviđanja bila točna. Ako nisu, vratite se natrag na programski kôd i zaključite zašto.

#include "mbed.h"

Timer timer_fast;
Timer timer_slow;
DigitalOut ledA(LED1);
DigitalOut ledB(LED4);

void task_fast(void);
void task_slow(void);

int main() {
  timer_fast.start();
  timer_slow.start(); 
  while(true){
    if (timer_fast.read() > 0.2) {
      task_fast();
      timer_fast.reset();
    }
    if (timer_slow.read() > 1) {
      task_slow();
      timer_slow.reset();
    }
  }
}

void task_fast(void) {
  ledA = !ledA;
}
void task_slow(void) {
  ledB = !ledB;
}

Korištenje mbed klase Timeout

Proučite API dokumentaciju klase Timeout.

Proučite sljedeći programski kôd i pokušajte zaključiti što će se događati s LED-icama. Nakon toga testirajte program na mbed-u i provjerite da li su vaša predviđanja bila točna. Ako nisu, vratite se natrag na programski kôd i zaključite zašto.

#include "mbed.h"

Timeout response;
DigitalIn button (p14);
DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led3(LED3);

void blink() {
  led2 = 1;
  wait(0.5);
  led2 = 0;
}

int main() {
  while(true) {
    if(button == 1){
      response.attach(&blink, 3.0);
      led3=1;
    } else {
      led3=0;
    }
    led1=!led1;     
    wait(0.2);
  }
}

Modificirajte gornji programski kôd tako da dodate drugo tipkalo, čijim pritiskom se poništava pridruživanje blink() funkcije s objekta response (izvršite detach()).

Korištenje mbed klase Ticker

Proučite API dokumentaciju klase Ticker.

Proučite sljedeći programski kôd i pokušajte zaključiti što će se događati s LED-icama. Nakon toga testirajte program na mbed-u i provjerite da li su vaša predviđanja bila točna. Ako nisu, vratite se natrag na programski kôd i zaključite zašto.

#include "mbed.h"

void led_switch(void);
Ticker time_up;
DigitalOut myled(LED1);

void led_switch() {
    myled=!myled;       
}

int main(){
    time_up.attach(&led_switch, 0.2);
    while(true) {
        wait(1);
    }
}

Modificirajte gornji kôd tako da neka druga LED-ica blinka svaku sekundu.

Korištenje mbed klase InterruptIn

Proučite API dokumentaciju klase InterruptIn.

Proučite sljedeći programski kôd i pokušajte zaključiti što će se događati s LED-icama. Nakon toga testirajte program na mbed-u i provjerite da li su vaša predviđanja bila točna. Ako nisu, vratite se natrag na programski kôd i zaključite zašto.

#include "mbed.h"

InterruptIn button(p14);
DigitalOut led(LED1);       
DigitalOut flash(LED4);

void isr1() {
  led = !led;
}

int main() {
  button.rise(&isr1);                              
  while(true) {
    flash = !flash;
    wait(0.2);
  }
}

Pritišćite button nekoliko puta i pažljivo promatrajte ponašanje diode LED1. Da li ste se prisjetili bouncing efekta?

Uklanjanje bouncing efekta (debouncing)

Modificirajte program iz prethodne vježbe tako da se ukloni problem bouncing-a, odnosno izvršite debouncing tipkala. Moguće rješenje dano je u sljedećem programskom kôdu:

#include "mbed.h"

InterruptIn button(p14);
DigitalOut led(LED1);       
DigitalOut flash(LED4);
Timer debounce;

void isr1() {
  if (debounce.read_ms() > 200) {
    led = !led;
    debounce.reset();
  }
}

int main() {
  debounce.start();
  button.rise(&isr1);                              
  while(true) {
    flash = !flash;
    wait(0.2);
  }
}

Pogledajte također i dokumentaciju klasa DebounceIn i PinDetect, koje su napisane u svrhu debouncinga sklopki i tipkala. Dodatni korisni tutorial o tipkalima i sklopkama možete pročitati ovdje.

Mjerenje udaljenosti pomoću ultrazvučnog senzora HC-SR04

Na raspolaganju je ultrazvučni senzor udaljenosti HC-SR04. Napišite program za mjerenje udaljenosti pomoću navedenog senzora.

Čestitke!

Završili ste sve vježbe iz teme Tajmeri i prekidi.

Povratak na naslovnu stranicu TVZ Mechatronics Team-a.


All wikipages