[Odprta koda] Večnamenska naprava za tehtanje

——Iz foruma razvijalcev DWIN

V tej številki predstavljamo nagrajeni odprtokodni primer foruma za razvijalce DWIN - večfunkcijska tehtnica. Inženir sprejme 4-palčni pametni zaslon COF in prek podatkovne interakcije med jedrom T5L OS in modulom HX711 ter naborom senzorjev tlaka 5 kg lahko uporabniki preprosto uresničijo funkcije prikaza štetja, kot so teža, cena na enoto, skupna cena, tara itd. ., kot tudi funkcije štetja, sledenje krivuljam spreminjanja teže in popravljanje natančnosti tehtnice itd., tako da je preprosto preklapljanje med različnimi scenariji uporabe in uživanje v priročni in učinkoviti izkušnji tehtanja.

1. Razvoj uporabniškega vmesnika

f26af533d43728cd210e0f7af5e7acc

2.C51 Oblikovanje

Del referenčne kode za tehtnico za izvajanje funkcije določanja cen je naslednji:

// Stran s cenami====================

#define VALUATION_UNIT_PRICE_ADDR 0x1010

#define VALUATION_GRAM_ADDR 0x1000

#define VALUATION_TOTAL_PRICES_ADDR 0x1020

uint32_t valuation_decorticate = 0; // Cena Tara teža

uint32_t cena_enote_vrednotenja = 0; //Cena na enoto

// Osvežitev cene na enoto

void page_valuation_unit_price_refresh()

{

uint8_t test_display[10] = {0};

if(valuation_unit_price

{

testni_prikaz[0] = cena_enote_vrednotenja / 100 % 10 + 0x30;

test_display[1] = '.';

testni_prikaz[2] = cena_enote_vrednotenja / 10 % 10 + 0x30;

testni_prikaz[3] = cena_enote_vrednotenja / 1 % 10 + 0x30;

dgus_show_text_value_set(VALUATION_UNIT_PRICE_ADDR, test_display, 4);

}

else if(valuation_unit_price

{

testni_prikaz[0] = cena_enote_vrednotenja / 1000 % 10 + 0x30;

testni_prikaz[1] = cena_enote_vrednotenja / 100 % 10 + 0x30;

test_display[2] = '.';

testni_prikaz[3] = cena_enote_vrednotenja / 10 % 10 + 0x30;

testni_prikaz[4] = cena_enote_vrednotenja / 1 % 10 + 0x30;

dgus_show_text_value_set(VALUATION_UNIT_PRICE_ADDR, test_display, 4);

}

else if(valuation_unit_price

{

testni_prikaz[0] = cena_enote_vrednotenja / 10000 % 10 + 0x30;

testni_prikaz[1] = cena_enote_vrednotenja / 1000 % 10 + 0x30;

testni_prikaz[2] = cena_enote_vrednotenja / 100 % 10 + 0x30;

test_display[3] = '.';

testni_prikaz[4] = cena_enote_vrednotenja / 10 % 10 + 0x30;

testni_prikaz[5] = cena_enote_vrednotenja / 1 % 10 + 0x30;

dgus_show_text_value_set(VALUATION_UNIT_PRICE_ADDR, test_display, 4);

}

else if(valuation_unit_price

{

testni_prikaz[0] = cena_enote_vrednotenja / 100000 % 10 + 0x30;

testni_prikaz[1] = cena_enote_vrednotenja / 10000 % 10 + 0x30;

testni_prikaz[2] = cena_enote_vrednotenja / 1000 % 10 + 0x30;

testni_prikaz[3] = cena_enote_vrednotenja / 100 % 10 + 0x30;

test_display[4] = '.';

testni_prikaz[5] = cena_enote_vrednotenja / 10 % 10 + 0x30;

testni_prikaz[6] = cena_enote_vrednotenja / 1 % 10 + 0x30;

dgus_show_text_value_set(VALUATION_UNIT_PRICE_ADDR, test_display, 4);

}

}

 

// Osveži težo

void page_valuation_weight_refresh()

{

uint8_t test_display[10] = {0x30};

uint32_t gram_display = 0;

if(gram_value >= value_decorticate)

{

gram_prikaz = gram_vrednost - vrednotenje_decorticate;

if(gram_display

{

testni_prikaz[0] = gramski_prikaz / 1 % 10 + 0x30;

dgus_show_text_value_set(VALUATION_GRAM_ADDR, test_display, 3);

}

sicer če (gram_display

{

testni_prikaz [0] = gramski_prikaz / 10 % 10 + 0x30;

testni_prikaz [1] = gramski_prikaz / 1 % 10 + 0x30;

dgus_show_text_value_set(VALUATION_GRAM_ADDR, test_display, 3);

}

sicer če (gram_display

{

testni_prikaz[0] = gramski_prikaz / 100 % 10 + 0x30;

testni_prikaz[1] = gram_prikaz / 10 % 10 + 0x30;

testni_prikaz[2] = gram_prikaz / 1 % 10 + 0x30;

dgus_show_text_value_set(VALUATION_GRAM_ADDR, test_display, 3);

}

sicer če (gram_display

{

testni_zaslon[0] = gram_zaslon / 1000 % 10 + 0x30;

testni_zaslon[1] = gram_zaslon / 100 % 10 + 0x30;

testni_prikaz[2] = gram_prikaz / 10 % 10 + 0x30;

testni_zaslon[3] = gram_zaslon / 1 % 10 + 0x30;

dgus_show_text_value_set(VALUATION_GRAM_ADDR, test_display, 3);

}

sicer če (gram_display

{

testni_zaslon[0] = gram_zaslon / 10000 % 10 + 0x30;

testni_zaslon[1] = gram_zaslon / 1000 % 10 + 0x30;

testni_zaslon [2] = gram_zaslon / 100 % 10 + 0x30;

testni_zaslon [3] = gram_zaslon / 10 % 10 + 0x30;

testni_zaslon [4] = gram_zaslon / 1 % 10 + 0x30;

dgus_show_text_value_set(VALUATION_GRAM_ADDR, test_display, 3);

}

}

drugače

{

dgus_show_text_value_set(VALUATION_GRAM_ADDR, test_display, 3);

}

}

 

// Osvežitev skupne cene

void page_valuation_price_refresh()

{

uint32_t cena_vrednost = 0;

uint8_t test_display[10] = {0x30, '.', 0x30, 0x30};

if(gram_value >= value_decorticate)

{

cena_vrednost = (gramska_vrednost - vrednotenje_decorticate) * vrednotenje_cena_enote * 2 / 1000;

če(price_value

{

testni_prikaz [0] = cena_vrednost / 100 % 10 + 0x30;

test_display[1] = '.';

testni_prikaz [2] = cena_vrednost / 10 % 10 + 0x30;

testni_prikaz [3] = cena_vrednost / 1 % 10 + 0x30;

dgus_show_text_value_set(VALUATION_TOTAL_PRICES_ADDR, test_display, 4);

}

else if(price_value

{

testni_prikaz[0] = cena_vrednost / 1000 % 10 + 0x30;

testni_prikaz [1] = cena_vrednost / 100 % 10 + 0x30;

test_display[2] = '.';

testni_prikaz [3] = cena_vrednost / 10 % 10 + 0x30;

testni_prikaz [4] = cena_vrednost / 1 % 10 + 0x30;

dgus_show_text_value_set(VALUATION_TOTAL_PRICES_ADDR, test_display, 4);

}

else if(price_value

{

testni_prikaz[0] = cena_vrednost / 10000 % 10 + 0x30;

testni_prikaz[1] = cena_vrednost / 1000 % 10 + 0x30;

testni_prikaz [2] = cena_vrednost / 100 % 10 + 0x30;

test_display[3] = '.';

testni_prikaz [4] = cena_vrednost / 10 % 10 + 0x30;

testni_prikaz [5] = cena_vrednost / 1 % 10 + 0x30;

dgus_show_text_value_set(VALUATION_TOTAL_PRICES_ADDR, test_display, 4);

}

else if(price_value

{

testni_prikaz[0] = cena_vrednost / 100000 % 10 + 0x30;

testni_prikaz[1] = cena_vrednost / 10000 % 10 + 0x30;

testni_prikaz[2] = cena_vrednost / 1000 % 10 + 0x30;

testni_prikaz [3] = cena_vrednost / 100 % 10 + 0x30;

test_display[4] = '.';

testni_prikaz [5] = cena_vrednost / 10 % 10 + 0x30;

testni_prikaz [6] = cena_vrednost / 1 % 10 + 0x30;

dgus_show_text_value_set(VALUATION_TOTAL_PRICES_ADDR, test_display, 4);

}

}

drugače

{

dgus_show_text_value_set(VALUATION_TOTAL_PRICES_ADDR, test_display, 4);

}

}

void page_valuation_decorticate()

{

valuation_decorticate = gram_vrednost;

page_valuation_weight_refresh();

}

void page_valuation_1()

{

if(valuation_unit_price

{

cena_enote_vrednotenja = cena_enote_vrednotenja * 10 + 1;

page_valuation_unit_price_price_refresh();

}

}

void page_valuation_2()

{

if(valuation_unit_price

{

cena_enote_vrednotenja = cena_enote_vrednotenja * 10 + 2;

page_valuation_unit_price_price_refresh();

}

}

void page_valuation_3()

{

if(valuation_unit_price

{

cena_enote_vrednotenja = cena_enote_vrednotenja * 10 + 3;

page_valuation_unit_price_price_refresh();

}

}

void page_valuation_4()

{

if(valuation_unit_price

{

cena_enote_vrednotenja = cena_enote_vrednotenja * 10 + 4;

page_valuation_unit_price_price_refresh();

}

}

void page_valuation_5()

{

if(valuation_unit_price

{

cena_enote_vrednotenja = cena_enote_vrednotenja * 10 + 5;

page_valuation_unit_price_price_refresh();

}

}

void page_valuation_6()

{

if(valuation_unit_price

{

cena_enote_vrednotenja = cena_enote_vrednotenja * 10 + 6;

page_valuation_unit_price_price_refresh();

}

}

void page_valuation_7()

{

if(valuation_unit_price

{

cena_enote_vrednotenja = cena_enote_vrednotenja * 10 + 7;

page_valuation_unit_price_price_refresh();

}

}

void page_valuation_8()

{

if(valuation_unit_price

{

cena_enote_vrednotenja = cena_enote_vrednotenja * 10 + 8;

page_valuation_unit_price_price_refresh();

}

}

void page_valuation_9()

{

if(valuation_unit_price

{

cena_enote_vrednotenja = cena_enote_vrednotenja * 10 + 9;

page_valuation_unit_price_price_refresh();

}

}

void page_valuation_0()

{

if(valuation_unit_price

{

cena_enote_vrednotenja = cena_enote_vrednotenja * 10 + 0;

page_valuation_unit_price_price_refresh();

}

}

void page_valuation_back()

{

cena_enote_vrednotenja = cena_enote_vrednotenja / 10;

page_valuation_unit_price_price_refresh();

}

void page_valuation_clear()

{

cena_enote_vrednotenja = 0;

page_valuation_unit_price_price_refresh();

}


Čas objave: 28. aprila 2024