Простой таймер без использования delay

ks_junio
Offline
Зарегистрирован: 03.07.2019

Да что вы на меня напали то? Я написал чтобы критиковали код, а не меня

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

b707 пишет:

Ворота, это не ошибка... ну не грубая

Петрович уже с языка снял :(

ks_junio
Offline
Зарегистрирован: 03.07.2019

b707 пишет:

ks_junio пишет:

Вот как раз для таких как ТЫ она и стоит

ого как мы заговорили? похоже, ТС надо только по шерстке гладить, критику оно не любит.

Деда, где там картинка с указателем? - положи поближе, похоже, скоро понадобится.

Критикуйте код, а не меня

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

ks_junio пишет:

Да что вы на меня напали то? 

Ну, если ты считаешь. что я на тебя напал, тем что на ошибку указал, то извини. Больше не буду. Кстати, и реация на гивера похожая :)

b707
Онлайн
Зарегистрирован: 26.05.2017

ЕвгенийП пишет:

Т.е. то, что специалированный класс таймера всегда врёт на 1мс - не ошибка? А что же тогда ошибка? Можете дать определение?

И, да, таже самая ошибка была у гивера, как я уже говорил.

согласен. Просто имел в виду, что это такая очевидная вещь, что может быть просто опечаткой... Но ответ ТС показывает. что для него - не очевидная.

ks_junio
Offline
Зарегистрирован: 03.07.2019

ЕвгенийП пишет:

b707 пишет:

Ворота, это не ошибка... ну не грубая

И, да, таже самая ошибка была у гивера, как я уже говорил.

Я тут в соседней теме не мог собрать long из байт, потому что забыл поставить преобразование. Тоже у гивера спросил как это делается?

ks_junio
Offline
Зарегистрирован: 03.07.2019

b707 пишет:

ЕвгенийП пишет:

Т.е. то, что специалированный класс таймера всегда врёт на 1мс - не ошибка? А что же тогда ошибка? Можете дать определение?

И, да, таже самая ошибка была у гивера, как я уже говорил.

согласен. Просто имел в виду, что это такая очевидная вещь, что может быть просто опечаткой... Но ответ ТС показывает. что для него - не очевидная.

Пока нет, потому что в МК иначе чем в прикладных программах

b707
Онлайн
Зарегистрирован: 26.05.2017

ks_junio пишет:

Я тут в соседней теме не мог собрать long из байт, потому что забыл поставить преобразование. Тоже у гивера спросил как это делается?

ну вы же там ответ получили? и никто вас не троллил.

А здесь вас троллят, потому что ведетесь. Реагируйте как взрослый. а не как 15-летний подросток

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ks_junio пишет:
Тоже у гивера спросил как это делается?
Я не знаю у кого Вы что спрашиваете. Я лишь отметил факт. С фактом Вы не станете спорить, надеюсь?

Кстати, тогда гиверу на это тоже Владимир указал (см. #3).

ks_junio
Offline
Зарегистрирован: 03.07.2019

b707 пишет:

ks_junio пишет:

Я тут в соседней теме не мог собрать long из байт, потому что забыл поставить преобразование. Тоже у гивера спросил как это делается?

ну вы же там ответ получили? и никто вас не троллил.

А здесь вас троллят, потому что ведетесь. Реагируйте как взрослый. а не как 15-летний подросток

Я никогда не сидел на форумах, вживую все проиходит иначе

ks_junio
Offline
Зарегистрирован: 03.07.2019

ЕвгенийП пишет:

ks_junio пишет:
Тоже у гивера спросил как это делается?
Я не знаю у кого Вы что спрашиваете. Я лишь отметил факт. С фактом Вы не станете спорить, надеюсь?

Кстати, тогда гиверу на это тоже Владимир указал (см. #3).

И за это спасибо. Надеюсь получить советы по поводу других идей

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ks_junio пишет:
Надеюсь получить советы по поводу других идей
По-моему, одного въедливого исследователя кодов Вы уже лишились (см. #54) из-за своей непомерной обидчивости :)

А какие, кстати, у Вас другие идеи? Наливайте :)

ks_junio
Offline
Зарегистрирован: 03.07.2019

Ворота пишет:

ks_junio пишет:

Да что вы на меня напали то? 

Ну, если ты считаешь. что я на тебя напал, тем что на ошибку указал, то извини. Больше не буду. Кстати, и реация на гивера похожая :)

Нет, продолжайте. Вы даете очень дельные советы

ks_junio
Offline
Зарегистрирован: 03.07.2019

ЕвгенийП пишет:

ks_junio пишет:
Надеюсь получить советы по поводу других идей
По-моему, одного въедливого исследователя кодов Вы уже лишились (см. #54) из-за своей непомерной обидчивости :)

А какие, кстати, у Вас другие идеи? Наливайте :)

А этой же теме или другой? У меня есть реализация класса настроект в EEPROM (надеюсь не как у гивера). Основной функционал выполняет, но хочется сделать лучше

b707
Онлайн
Зарегистрирован: 26.05.2017

ks_junio пишет:

А этой же теме или другой? У меня есть реализация класса настроект в EEPROM (надеюсь не как у гивера). Основной функционал выполняет, но хочется сделать лучше

думаю, лучше в этой.

если обсуждение пойдет не так - проще будет одну ветку чистить, а не две :)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b707 пишет:

если обсуждение пойдет не так - проще будет одну ветку чистить, а не две :)

:-)))

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

Ложи своими классами прямо здесь.

ks_junio
Offline
Зарегистрирован: 03.07.2019
#define minutes(x) (x*60000ul)
#define seconds(x) (x*1000ul)

enum params
{
	is_empty = 0,
	pc_shutdown_timeout,
	batt_critical
};


class Settings
{
public:
	Settings();

	void setParam(uint par, ul val);
	ul getParam(params par);

	void resetSettings();

private:
	void initDefault();
};

Settings::Settings()
{
	bool isEmpty = getParam(is_empty);
 	if (isEmpty)
		initDefault();
}

void Settings::setParam(uint par, ul val)
{
#ifdef DEBUG
	Serial.println("EEPROM write val: " + String(val));
#endif

	const int addr = par * 4;

	byte value[4];
	value[0] = val & 0xFF;
	value[1] = (val >> 8) & 0xFF;
	value[2] = (val >> 16) & 0xFF;
	value[3] = (val >> 24) & 0xFF;

	for (int i = 0; i < 4; i++)
	{
		EEPROM[addr + i] = value[i];
#ifdef DEBUG
	Serial.println("Addr: " + String(addr + i) + " byte: " + String(value[i]));
#endif
	}
}

 ul Settings::getParam(params par)
{
	const int addr = par * 4;

	const ul val = (long)EEPROM.read(addr) | (long)EEPROM.read(addr + 1) << 8 | (long)EEPROM.read(addr + 2) << 16 | (long)EEPROM.read(addr + 3) << 24;

#ifdef DEBUG
	char str[20];
	Serial.println("EEPROM read addr: " + String(addr / 4) + " val: " + val);
#endif
	return val;
}

 void Settings::resetSettings()
 {
	 setParam(is_empty, 1);
	 initDefault();

	 Serial.println("Settings reseted");
 }

void Settings::initDefault()
{
	if (!getParam(is_empty))
		return;

	setParam(pc_shutdown_timeout, seconds(30));

	setParam(batt_critical, 112);
}

Собственно я храню значения от ms до min, конвертируя их в ms. У меня была идея использовать два байта, первое это значение, второй это порядок

b707
Онлайн
Зарегистрирован: 26.05.2017

я почему-то так и предполагал.

Собственная реализация записи long в ЕЕПРОМ? - уже много лет для этого есть методы EEPOM.put() и get()

ks_junio
Offline
Зарегистрирован: 03.07.2019

b707 пишет:

я почему-то так и предполагал.

Собственная реализация записи long в ЕЕПРОМ? - уже много лет для этого есть методы EEPOM.put() и get()

Не зря выложил)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Пятница!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b707 пишет:

уже много лет для этого есть методы EEPOM.put() и get()

put - плохо - он аккуратно через update сделан. То ли дело здесь - шарах сразу прям туда и всё пофиг - для настоящих мужчин!

sadman41
Offline
Зарегистрирован: 19.10.2016

b707 пишет:

sadman41 пишет:

Звучит так, как будто функциональное программирование сродни антисемитизму.

Гриш, не знаю, кому это адресовано. В равной степени могу принять и на свой счет. 

Таки ответ зависит от того, что на голове - ермолка или арафатка...

Я, например, больше к старорежимному склонен.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

А чо никто не попенял на кривые макросы, ась?

#define minutes(x) (x*60000ul)
#define seconds(x) (x*1000ul)

Топикстартеру: ответь на вопрос - что будет, если использовать эти макросы вот так:

minutes(1+5)
seconds(100+23)

??? Сам догадаешься, где косяк, или прямо указать?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ks_junio пишет:

Критикуйте код, а не меня

Код - полная фигня, а автор - молодец!

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

DIYMan пишет:

А чо никто не попенял на кривые макросы, ась?

#define minutes(x) (x*60000ul)
#define seconds(x) (x*1000ul)

Наверное, никто не смотрел достаточно внимательно. 

А ведь и впрямь, что-то в этом есть от Великого :)

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

Макросы - зло. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

DetSimen пишет:

Макросы - зло. 

Может и зло, но не большее, чем "великие".

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

DetSimen пишет:

Макросы - зло. 

Hе, дида, наоборот - благодаря этому форуму N-ная часть разработчиков будет обкладываться скобками в макросах, считаю - это тот успех, за который боролся Великий Чма - просвещение ;) 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Ворота пишет:

DIYMan пишет:

А чо никто не попенял на кривые макросы, ась?

#define minutes(x) (x*60000ul)
#define seconds(x) (x*1000ul)

Наверное, никто не смотрел достаточно внимательно. 

А ведь и впрямь, что-то в этом есть от Великого :)

Я бы даже сказал - не "что-то", а чистейшей воды плагиат.