Symmtrical bar not working?

I’m trying to set my bar object symmetrical but it doesn’t seem to work. The bar still runs from left to right only. Am I doing something wrong?

#include “gui.h”

Gui::Gui()
{
updateCount = 0;
directionUp = true;

/LittlevGL init/
lv_init();

/Linux frame buffer device init/
fbdev_init();

lv_disp_buf_init(&disp_buf, buf, NULL, dispBufSize);

/Initialize and register a display driver/
lv_disp_drv_t disp_drv;
lv_disp_drv_init(&disp_drv);
disp_drv.buffer = &disp_buf;
disp_drv.flush_cb = fbdev_flush;
lv_disp_drv_register(&disp_drv);

bar = lv_bar_create(lv_scr_act(), NULL);
lv_obj_set_size(bar, 200, 30);
lv_obj_align(bar, NULL, LV_ALIGN_CENTER, 0, 0);
// lv_bar_set_anim_time(bar, 10000);
lv_bar_set_sym(bar, true);
lv_bar_set_value(bar, 1, LV_ANIM_OFF);
}

Gui::~Gui()
{
}

bool Gui::update()
{
lv_tick_inc(5);
lv_task_handler();
updateCount += 5;
if ((updateCount % guiUpdateIntervalInMilliseconds) == 0)
{
int16_t valueCur = lv_bar_get_value(bar);
int16_t valueNew;
if (valueCur == 100)
{
directionUp = false;
}
if (valueCur == 0)
{
directionUp = true;
}

if (directionUp)
{
  valueNew = valueCur + 1;
}
else
{
  valueNew = valueCur - 1;
}

lv_bar_set_value(bar, valueNew, false);

// updateCount = 0;
}

if (updateCount > 10000)
{
return false;
}

return true;
}

It’s symmetric to zero, so the minimum value of the range needs to be negative.

1 Like