Evo, ideja je bila da krenem s menijem.
ZAHTJEVI:
- kreiranje strukturu menija po želji
- prikaz podataka bilokojom komponentom (LCD 1602, 2004, 640x480...)
- screen saver s osnovnim podatcima
- opcije kontrole termometra, hranilice, sata... i mogućnost dodavanja novih komponenti bez ikakvih problema
Kako biste razumjeli kod, ali i općenito programiranje na arduinu kako biste mogli napisati svoje komponente (recimo želite kod upotrijebiti za doziranje gnojiva).
Neću ulaziti u najjednostavije stvari kao što su petlje ili tipovi podataka, kad bismo ulazili u te detalje bilo bi predugo.
Za početak objasnit ću kako napraviti
liste,
stogove, što su
pointeri i kako baratati njima, te koristit ćemo klase u arduinu i objasniti što su
polimorfni pozivi i na koji način će nam koristiti.
POINTERI:
Pointeri za razliku od drugih varijabli ne sadržavaju podatak koji se koristi već adresu gdje se on nalazi. Na taj način možemo mijenjati sadržaj varijable iz različitih lokacija. On je definiran zvjezdicom *, a od nekog podatka možemo dobiti njegovu lokaciju znakom &. To nam i nije toliko važno kod malih varijabli, ali kasnije ćemo definirati velike varijable koje ne želimo cijele premještati ni kopirati.
Primjer:
int a=10;
int *b=&a;
KLASE:
Klasama se definiraju objekti koji sadrže određene atribute (varijable ili drugi objekti) te metode (funkcije koje rade nad tim objektom i njegovim atributima). Ako definiramo neki atribut ili motodu kao
private ne vidi se izvan te klase, a
public je vidljiv.
Primjer:
class Dog{
private:
String name;
public:
String bark(){
return "Vau Vau";
}
String getName(){
return name;
}
}
Dog snuppy;
void setup(){}
void loop(){
snuppy.bark();
}
POLIMORFNI POZIVI
zamislijmo da imamo 2 vrste pasa, jedan je doberman, a drugi chihuahua, iako su oba psi, opet su drugačiji. Stoga definirat ćemo u klasi Dog sve što je zajedničko psima, klasi Chihuahua definirat ćemo njihove posebnosti a Doberman klasi ono što je posebno njima. virtual dodatak kod metoda znači da će kod različitih nasljeđenih klasa, kao što su kod nas Doberman i Chihuahua ta metoda drugačije biti implementirana.
class Dog{
virtual String bark();
}
class Doberman:public Dog{
virtual String bark(){
return "VAU VAU";
}
class Chihuahua:public Dog{
virtual String bark(){
return "vau vau";
}
Dog *doggy;
Chihuahua zeus;
Doberman medo;
void setup(){
doggy = &zeus;
doggy->bark();
doggy = &medo;
medo->bark();
}
i ako pokrenemo ovaj kod vidjet ćemo da ista metoda je dala drugačiji rezultat.
LISTA
Polja nas ograničavaju svojom većinom, ali ako želimo da se izbornik lako može namještati, trebamo nešto što se lako može povećati i u ovisnosti o veličini menija, za to koristimo liste. Lista sadrži podatak koji želimo čuvati ali i pointer na sljedeći i/ili prošli element. Svaki put kad dodamo novi podatak, napravimo novi element i dojavimo susjednima gdje se nalazi.

STOG
Stog ćemo napraviti slično listi, ali važno je da ono što smo stavili prvo, mora izaći zadnje. Kao odjeljci u filteru, prvo stavite keramiku, onda spužva prva, pa druga... sve do vate, i onda ih morate i redom vaditi. To će nam trebati kod adresiranja u meniju.
u ovom linku je logika menija. Sutra ili preksutra će dobiti kontrolu preko rotacijskog enkoder i ispis na lcd1602 i onda će biti detaljnije testirano.
https://www.dropbox.com/sh/luwx1abky5mhdtj/AADtRX5-LCeOWJQ-VjsWzS_va