Odpověď na: Jak na název s automatickým posunem jména
Úvodní stránka › Fórum › Hardware › Arduino › Jak na název s automatickým posunem jména › Odpověď na: Jak na název s automatickým posunem jména
Dobrý den, pošlu vám celý kód určený pro LEDky ze článku.
class LED{
private:
int pin;
boolean stav = LOW; //výchozí stav LED je vypnuto
void nastav(boolean);
public:
LED(int);
void zapni();
void vypni();
void prepni();
boolean vratStav();
};
LED::LED(int p){
pin = p;
pinMode(pin, OUTPUT);
digitalWrite(pin, stav);
}
void LED::zapni(){
nastav(HIGH);
}
void LED::vypni(){
nastav(LOW);
}
void LED::prepni(){
nastav(!stav); //nastaví LED na obrácenou hodnotu (0->1, 1->0)
}
void LED::nastav(boolean s){
stav = s;
Serial.print("Nastavuji ");
Serial.print(stav);
Serial.print(" na pinu ");
Serial.println(pin);
digitalWrite(pin, stav);
}
boolean LED::vratStav(){
return stav;
}
#define NO_OBJECTS 6
LED *LEDS = (LED*)malloc(NO_OBJECTS * sizeof(LED));
void setup() {
Serial.begin(9600);
for(int i = 0; i < NO_OBJECTS; i++){
LEDS[i] = LED(i);
}
for(int i = 0; i <= 10; i++){
LEDS[2].prepni();
delay(500);
}
}
void loop() {
}
Důležité části jsou:
#define NO_OBJECTS 6
Řekne programu, že bude celkem 6 LEDEK/TLAČÍTEK…
LED *LEDS = (LED*)malloc(NO_OBJECTS * sizeof(LED));
Vytvoří se ukazatel na datový typ LED. Funkce malloc alokuje v paměti prostor pro budoucí pole – potřebuje vědět, jak bude velké. Proto se jí jako parametr předá velikost jednoho objektu LED (sizeof) ponásobená počtem objektů v poli. Funkce malloc vrací datový typ void*, takže je potřeba ho ještě před uložením do LEDS přetypovat na LED*. Dále už se dá s LEDS pracovat jako s normálním polem.
Nevím, jestli je toto nejjednodušší cesta, ale nenapadla mě jednodušší.
for(int i = 0; i < NO_OBJECTS; i++){
LEDS[i] = LED(i);
}
Do pole LEDS poukládá objekty LED na daných pinech.
for(int i = 0; i <= 10; i++){
LEDS[2].prepni();
delay(500);
}
Postupně bliká ledkami.
Snad to je pochopitelné. Kód by měl jednoduše jít předělat pro vaše potřeby. Pole by mohlo vypadat takto:
RBD::Button *pole = (RBD::Button*)malloc(NO_OBJECTS * sizeof(RBD::Button));
Jeho naplnění potom:
for(...){
pole[i] = RBD::Button(i);
}