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 bouncinga, 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