www.elektronik.si
Optimiziranje arduino code
Pojdi na stran Prejšnja  1, 2  :||:
www.elektronik.si -> Arduino sekcija

Avtor: Jaka57Kraj: Grosuplje PrispevekObjavljeno: Ned Dec 09, 2018 8:40 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Ja, vrne napako.
Toda tole pa prenese brez težav:

Koda:
const char Maximalni_tok='A';
const char Prvi_izpis='B';
const char Drugi_izpis='H';

switch (nekaj){

case Maximalni_tok:
        kar nekaj;

case Prvi_izpis:
        karnekaj;

cse Drugi_izpis:
       karnekaj;

default:
       karnekaj;
       break;
}

Avtor: tilz0RKraj: Črnomelj PrispevekObjavljeno: Pon Dec 10, 2018 8:30 am    Naslov sporočila:  
----------------------------------------------------------------------------
Mnogo bolje.

Jaka57 je napisal/a:
tilz0R je napisal/a:
...Spremenljivka ne more biti del case stavka v C++, ker ni konstantna vrednost. Razen, če bo const ali constexpr.

Drži!

Avtor: gustinmi PrispevekObjavljeno: Tor Feb 26, 2019 3:41 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Zares elegantno lahko to rešiš z t.i. frame-ingom in objektno orientirano rešitvijo. Frames ali okvirji so lahko bazirani na dolžini, in se sestojijo iz: UKAZA in podatka.
Seveda morajo biti vsi ukazi enako dolgi, ali pa zapolniti manjkajoče dele z 0 paddingom.

Koda tako čaka na prve štiri znake (imax, umax, tx00), nato pa se v if zanki zgolj odloči, ali bo naredila objekt tipa imaxHandler ali umaxHandler. Koda objekta potem poskrbi za prebranje podatka in izpis na Serial.

Arduino IDE ima zelo dobro podporo za tovrstno programiranje, saj se v času prevajanja prevedejo kot celota vse podprte skripte ki so v direktoriju projekta. Podrobnosti so v : https://github.com/arduino/Arduino/wiki/Build-Process

Drugače bo pa vse lepše že z ena namensko funkcijo :

Koda:
void printCommandData(String commandName, String sprejem){
 
   String sprejemToPrint = sprejem.substring(sprejem.indexOf(commandName)+4, sprejem.indexOf(commandName)+7);     

   Serial.println (commandName + sprejemToPrint);                                   

}

// in njen klic

if (sprejem.indexOf("imax")>-1){           
  printCommandData("imax", sprejem);
}

// .. in tako naprej

Stran 2 od 2

Powered by phpBB © 2001,2002 phpBB Group