Ни с одним, ни со вторым у меня со старта не получилось.
Соответственно, прошу знающих помочь мне.
Приведенный ниже код отражает не столько отправную точку, сколько идею создания менюшки.
Хотя, вероятно, это и не лучший способ.
Код
#include <avr/pgmspace.h>
const char string1[] PROGMEM = "someValue1";
const char string2[] PROGMEM = "someValue2";
const char string3[] PROGMEM = "someValue3";
const char string4[] PROGMEM = "someValue4";
const char stringName[] PROGMEM = "someNameMenu";
const char* strings[4] PROGMEM = {string1, string2, string3, string4};
template <class T>
struct ItemValue{
char* name;
T valueCurrent;
T valueDefault;
const PROGMEM T min;
const PROGMEM T max;
// const PROGMEM bool modify : 1;
};
ItemValue <u08> comeParameter1 = {pgm_read_byte(&(strings[1][])), 100, 0, 200, 100};
ItemValue <float> comeParameter2 = {pgm_read_byte(&(strings[2][])), 3.0F, -100.0F, 100.0F, 100.0F};
ItemValue <bool> comeParameter3 = {pgm_read_byte(&(strings[3][])), true, false, true, true};
#define COUNTITEM 3
template <class T>
class MenuItem{
public:
MenuItem(const char* name, const ItemValue *_items, u08 count) :
nameMenu(name),
items(_items),
countItems(count){}
void setParameter(T param){items[currentParametr].valueCurrent = param}
T getParameter(void){return items[currentParametr].valueCurrent;}
private:
const char *nameMenu;
const ItemValue *items;
const u08 countItems;
u08 currentParametr;
};
MenuItem <u08> menuItem(pgm_read_byte(&(stringName[])),
&{comeParameter1,
comeParameter2,
comeParameter3},
COUNTITEM);
const char string1[] PROGMEM = "someValue1";
const char string2[] PROGMEM = "someValue2";
const char string3[] PROGMEM = "someValue3";
const char string4[] PROGMEM = "someValue4";
const char stringName[] PROGMEM = "someNameMenu";
const char* strings[4] PROGMEM = {string1, string2, string3, string4};
template <class T>
struct ItemValue{
char* name;
T valueCurrent;
T valueDefault;
const PROGMEM T min;
const PROGMEM T max;
// const PROGMEM bool modify : 1;
};
ItemValue <u08> comeParameter1 = {pgm_read_byte(&(strings[1][])), 100, 0, 200, 100};
ItemValue <float> comeParameter2 = {pgm_read_byte(&(strings[2][])), 3.0F, -100.0F, 100.0F, 100.0F};
ItemValue <bool> comeParameter3 = {pgm_read_byte(&(strings[3][])), true, false, true, true};
#define COUNTITEM 3
template <class T>
class MenuItem{
public:
MenuItem(const char* name, const ItemValue *_items, u08 count) :
nameMenu(name),
items(_items),
countItems(count){}
void setParameter(T param){items[currentParametr].valueCurrent = param}
T getParameter(void){return items[currentParametr].valueCurrent;}
private:
const char *nameMenu;
const ItemValue *items;
const u08 countItems;
u08 currentParametr;
};
MenuItem <u08> menuItem(pgm_read_byte(&(stringName[])),
&{comeParameter1,
comeParameter2,
comeParameter3},
COUNTITEM);