Как обновить значения функции в блоке IF() C++

seosniks
На сайте с 13.08.2007
Offline
389
1660

Добрый день.

Есть программа которая работает в цикле и получает данные с датчиков погоды.

Все нормально работает. Но если забрасываю код в блок IF тогда данные не обновляются.

Но дело в том что я делаю навигацию на сенсорном экране, и мне нужно чтоб данные обновлялись

без перезагрузки всего экрана.

Для примера приведу код.

int i = 0;

void couinter(){i++;}

void DhtSensor() {

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

Внутри функции идет опрос датчиков, и информация выводится на экран.

}


void loop() //Сам цикл крутится постоянно.
{
DhtSensor();// Работает как надо, все обновляется.

}


void loop() //Сам цикл крутится постоянно.
{


if (page ==0 && buttonEnabled == true) {

DhtSensor();// Работает нем не обновляет значения

if (page ==0) {page =1; }
}

return; Обновляет весь экран, но так не подходит.

Возможно ли обновлять функцию DhtSensor(); внутри условного оператора IF?

Либо может есть вариант сделать по другому. Спасибо.

iqpi
На сайте с 08.07.2008
Offline
121
#1

Может в закрывающей скобке дело?

void loop() //Сам цикл крутится постоянно.
{


if (page ==0 && buttonEnabled == true) {

DhtSensor();// Работает нем не обновляет значения
}
if (page ==0) {page =1; }
}
seosniks
На сайте с 13.08.2007
Offline
389
#2
iqpi:
Может в закрывающей скобке дело?

Делал так

void loop() //Сам цикл крутится постоянно.

{

if (page ==0 && buttonEnabled == true) {

DhtSensor();// Работает не не обновляет значения

}

увы не работает.

Проблема в том что условие IF выполняется только один раз,

если оно будет работать постоянно то будут постоянные обновления.

Мне же необходимо как то обновлять только функцию DhtSensor();

если добавить return; то работать будет,

но будет обновлять весь экран мигая в цикле.

Вот сижу и думаю как лучше реализовать навигацию по разделам меню.

Меню реализовал но на обычных условных переходах IF.

есть еще вариант использовать swich.

А еще лучше Конечные автоматы, но моих знаний видимо пока еще не достаточно для этого.

iqpi
На сайте с 08.07.2008
Offline
121
#3

Пусть цикл постоянно дергает функцию и присваивает нужные значения промежуточной переменной, затем по событию считывете переменную и используете значение по надобности, затем обнуляете переменную.

Вообще сложно понять из Ваших объяснений...

seosniks
На сайте с 13.08.2007
Offline
389
#4
iqpi:
Пусть цикл постоянно дергает функцию и присваивает нужные значения промежуточной переменной, затем по событию считывете переменную и используете значение по надобности, затем обнуляете переменную.

Вообще сложно понять из Ваших объяснений...

Есть код, его задача листать меню.

 void homemenu(){

tft.drawRect(257,210,50,30,YELLOW);
tft.setCursor(273,217);
tft.setTextColor(WHITE);
tft.setTextSize(3);
tft.print("МЕНЮ");
buttonEnabled =1;
}

каждое нажатие МЕНЮ листает блоки IF с первого и до бесконечности. Ну пусть будет с 1 по 4.

Цикл крутится без остановки

void loop()

{ }

void loop()

{

//Жмем кнопку меню и попадаем в блок page ==0

if (page ==0 && buttonEnabled == true) { // if you are on the "home" page (0)

buttonEnabled = false;

tft.fillScreen(BLACK);

tft.setCursor(100,190);

tft.print("home");

if (page ==0) {page =1;

//Ловушка в цикле не дает перепрыгивать между страниц без повторного нажатия меню, после нажатия

//Она же не дает обновить значения датчика так как блок блокирован.

}

// Если сделать так

if (page ==0 && buttonEnabled == true) { // if you are on the "home" page (0)

buttonEnabled = false;

tft.fillScreen(BLACK);

tft.setCursor(100,190);

tft.print("home");

PogodaFunc();

// if (page ==0) {page =1;

}

// Обновляется мигая экраном, что не правильно.

}

Если функция блока погоды размещаю за пределы IF

Пример так, погода работает но сенсор имеет конфликт и не нажиматся

void loop()

{

PogodaFunc();

if (page ==0 && buttonEnabled == true) { // if you are on the "home" page (0)

buttonEnabled = false;

tft.fillScreen(BLACK);

tft.setCursor(100,190);

tft.print("home");

if (page ==0) {page =1;

}

Может сделать какой нибудь класс чтоб не было конфликтов, но мне нужно чтоб

было меню рабочим.

С кнопками проще, а вот с сенсорным экраном запарка.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий