a.) Cilj učne aktivnosti
Razložiti uporabo razreda na praktičnem primeru z uporabo zunanje periferije (Arduino + LED mini shield)
b.) Ciljna skupina
2. letnik tehniške gimnazije pri predmetu programiranje
c.) Podroben opis izvedbe učne aktivnosti
UVOD
Za začetek bi na tablo napisali primer razreda:
class LED {
public:
LED(); // konstruktor
~LED(); // destruktor
};
Razložil bi jim pomena besed konstruktor in destruktor, ter da se konstruktor metoda proži ko instanciramo spremenljivko tipa LED, ter da se destruktor proži, ko se gre spremenljivka tipa LED izven konteksta ali takrat ko jo ročno pobrišemo.
METODE (PO DOMAČE FUNKCIJE)
Dijakom bi razložil da funkcije v razredu kličemo metode, ter da poznamo metode ki vračajo vrednost (int, char, String, …) in metode ki ne vračajo vrednosti. Opozoril bi jih tudi na uporabo argumentov, ki so praktično vstopni podatki v naše metode, ter da lahko imamo več metod z istim imenom, z različnim številom vhodnih argumentov.
Dijakom bi razložil in na tablo narisal objekt, kocko ki bi predstavljala naš razred LED. Razložil bi pomen besed private in public, ki se uporabljajo v razredih in takoj bi formulirali eno privatno spremenljivko pin ter tri metode Init(), On() in Off(). V našo kocko na tabli bi slednje tudi napisali da si dijaki lažje predstavljajo o čem govorimo. Dijakom bi razdelil Arduino, povezovalni kabel (USB) in mini LED shield*, ter bi skupaj po nareku prepisali spodnji program:
class LED {
private:
int pin;
public:
// konstruktor
LED(int a_pin) {
pin = a_pin;
}
void Init() {
pinMode(pin, OUTPUT); // poudaril bi da se rezervirana funkcija pinMode mora klicati v setup();
}
void On() {
digitalWrite(pin, HIGH);
}
void Off() {
digitalWrite(pin, LOW);
}
};
Za tem ko bi naš razred prepisali (in zbuildali brez napak), bi ga tudi testirali z enim enostavnim programom, ki ga bi podal na projektor:
LED led1(2);
void setup() {
led1.Init();
}
void loop() {
led1.On();
}
Z dijaki bi razširili metodo On(), tako da bi napisali še eno metodo On(int a_delay) ter podali še kot argument, število trajanja zakasnitve.
void On(int a_delay) {
digitalWrite(pin, HIGH);
delay(a_delay); // zakasnitev
}
Skupaj z dijaki bi svoj razred razširili tako, da bi dodali še metodi Off(a_delay) in Blink(a_on, int a_off);
void Off(int a_delay) {
digitalWrite(pin, LOW);
delay(a_delay); // zakasnitev
}
void Blink(int a_on, int a_off) {
digitalWrite(pin, HIGH);
delay(a_on); // zakasnitev
digitalWrite(pin, LOW);
delay(a_on); // zakasnitev
}
VAJE
Sledile bi praktične vaje z individualno pomočjo in frontalno podajanje skupnih nasvetov in napotkov pri pisanju programa.
Vaje bi skupaj prebrali in na hitro formulirali algoritme poteka na tablo z uporabo gradnikov: kvader, elipsa, romb in paralelogram.
1.) Z uporabo pravkar narejenega razreda LED instancirajte tri LED in jih poimenujte led1, led2 in led3. Led1 naj bo na nožici 2, led2 na nožici 3 ter led3 na nožici 4.
Rešitev:
LED led1(2);
LED led2(3);
LED led3(4);
2.) Inicializirajte pravkar instancirane led1, led2 in led3 v funkciji setup();
led1.Init();
led2.Init();
led3.Init();
3.) Napišite program ki prižiga in ugaša LED od led1 -> led3 in potem nazaj, od led3 -> led1. Vmes naj bo vsaj toliko premora da ga lahko zaznamo.
led1.Blink(100, 50);
led2.Blink(100, 50);
led3.Blink(100, 50);
Za domačo nalogo: http://www.cplusplus.com/doc/tutorial/classes/