Arduino se mi hodně líbí, ale moje pokusy vždy paradoxně končí u programování. Rozběhám si nějaký projekt, který funguje jak po hw, tak i sw stránce, ale pak nastoupí moje programátorská duše a snaží se napsat obslužný program daleko elegantněji. A to je ten problém. Moje dlouhodobě budované návyky většinou moc nefungují.
Mám následující myšlenku:
1) vytvořím základní objekt např. tZaklad, od kterého budu odvozovat nějaké další. Společná bude metoda execute, která se bude v potomcích přepisovat.
2) budu mít "paměťový" objekt tPamet, který se na počátku běhu programu naplní a potom bude podle nějakého klíče připojené objekty spouštět přes metodu execute
3) pro účely testovaní budu mít pamet, která je objektem tPamet a bude obsahovat prvek1 a prvek2 (oba jsou potomky tZaklad)
v Zaklad.h
Kód: Vybrat vše
#ifndef Zaklad_h
#define Zaklad_h
#include "Arduino.h"
class tZaklad
{
private:
int cislo;
public:
tZaklad(int vCislo); //inicializace
virtual void execute(); //vykonej něco
}
#endif
Kód: Vybrat vše
#include "Arduino.h"
tZaklad::tZaklad(int vCislo) {
cislo=vCislo;
}
tZaklad::execute() {
cislo=cislo+1;
serial.println(cislo);
}
Kód: Vybrat vše
#ifndef Pamet_h
#define Pamet_h
#include "Arduino.h"
#include "Zaklad.h"
class tPamet
{
private:
tZaklad *obsah[20]; //muze obsahovat max 20 objektu
int pocet; //kolik jich obsahuje
public:
tPamet(); //inicializace
void registruj(tZaklad &vst); //přidej si prvek
void execute(); //vykonej něco
}
#endif
Kód: Vybrat vše
#include "Arduino.h"
tPamet::tPamet() {
pocet=0;
}
tPamet::registruj(tZaklad &vst) {
obsah[pocet]=vst; //Jednoduše bez kontroly přetečení, ta teď není podstatná
pocet++;
}
tPamet::execute() {
for (int i=0;i<pocet;i++) {
obsah[i]->execute();
}
}
Kód: Vybrat vše
#include "Pamet.h"
#include "Zaklad.h"
class tPrvek1 : tZaklad {
virtual void execute() {
cislo=cislo+2;
serial.println(cislo);
}
};
class tPrvek2 : tZaklad {
virtual void execute() {
cislo=cislo+3;
serial.println(cislo);
}
}
//tohle neumím vytvořit
tZaklad prvek0(0);
tPrvek1 prvek(1);
tPrvek2 prvek(2);
tPamet pamet();
void setup() {
Serial.begin(9600);
//A tady si to připojím do paměti
pamet->registruj(&prvek0);
pamet->registruj(&prvek1);
pamet->registruj(&prvek2);
}
void loop() {
pamet->execute();
delay(1000);
}
Základem je to, že nepočítám s nějakým dodatečným dynamickým vytvářením a rušením objektů a pod. Také počty připojených objektů můžou být max v desítkách kusů.
Díky
Petr