[Open source] Wielofunkcyjne urządzenie ważące

—— Z forum programistów DWIN

W tym numerze przedstawiamy wielokrotnie nagradzany przypadek open source z forum programistów DWIN - waga wielofunkcyjna. Inżynier wykorzystuje 4-calowy inteligentny ekran COF, a dzięki interakcji danych między rdzeniem T5L OS a modułem HX711 i zestawem czujników ciśnienia o masie 5 kg użytkownicy mogą z łatwością korzystać z funkcji wyświetlania zliczania, takich jak waga, cena jednostkowa, cena całkowita, tara itp. ., a także funkcje liczenia, śledzenia krzywych zmian masy, korygowania dokładności wagi itp., dzięki czemu można łatwo przełączać się między różnymi scenariuszami zastosowań, aby cieszyć się wygodnym i wydajnym ważeniem.

1. Rozwój interfejsu użytkownika

f26af533d43728cd210e0f7af5e7acc

2.C51 Projekt

Część kodu referencyjnego wagi do realizacji funkcji wyceny jest następująca:

// Strona cenowa===================

#zdefiniuj VALUATION_UNIT_PRICE_ADDR 0x1010

#zdefiniuj VALUATION_GRAM_ADDR 0x1000

#zdefiniuj VALUATION_TOTAL_PRICES_ADDR 0x1020

uint32_t wycena_dekorticate = 0; // Wycena wagi tary

uint32_t wycena_jednostkowa_cena = 0; //Cena jednostkowa

// Odświeżenie ceny jednostkowej

void page_valuation_unit_price_refresh()

{

uint8_t test_display[10] = {0};

if(cena_jednostki_wyceny

{

test_display[0] = wycena_jednostkowa_cena / 100% 10 + 0x30;

test_display[1] = '.';

test_display[2] = wycena_jednostkowa_cena / 10 % 10 + 0x30;

test_display[3] = cena_jednostki_wyceny / 1% 10 + 0x30;

dgus_show_text_value_set(VALUATION_UNIT_PRICE_ADDR, test_display, 4);

}

else if(cena_jednostki_wyceny

{

test_display[0] = wycena_jednostkowa_cena / 1000 % 10 + 0x30;

test_display[1] = wycena_jednostkowa_cena / 100% 10 + 0x30;

test_display[2] = '.';

test_display[3] = wycena_jednostkowa_cena / 10% 10 + 0x30;

test_display[4] = cena_jednostki_wyceny / 1% 10 + 0x30;

dgus_show_text_value_set(VALUATION_UNIT_PRICE_ADDR, test_display, 4);

}

else if(cena_jednostki_wyceny

{

test_display[0] = wycena_jednostkowa_cena / 10000 % 10 + 0x30;

test_display[1] = wycena_jednostkowa_cena / 1000 % 10 + 0x30;

test_display[2] = wycena_jednostkowa_cena / 100 % 10 + 0x30;

test_display[3] = '.';

test_display[4] = cena_jednostki_wyceny / 10% 10 + 0x30;

test_display[5] = cena_jednostki_wyceny / 1% 10 + 0x30;

dgus_show_text_value_set(VALUATION_UNIT_PRICE_ADDR, test_display, 4);

}

else if(cena_jednostki_wyceny

{

test_display[0] = wycena_jednostkowa_cena / 100000 % 10 + 0x30;

test_display[1] = wycena_jednostkowa_cena / 10000 % 10 + 0x30;

test_display[2] = wycena_jednostkowa_cena / 1000 % 10 + 0x30;

test_display[3] = wycena_jednostkowa_cena / 100 % 10 + 0x30;

test_display[4] = '.';

test_display[5] = wycena_jednostkowa_cena / 10 % 10 + 0x30;

test_display[6] = cena_jednostki_wyceny / 1% 10 + 0x30;

dgus_show_text_value_set(VALUATION_UNIT_PRICE_ADDR, test_display, 4);

}

}

 

// Odświeżanie wagi

void page_valuation_weight_refresh()

{

uint8_t test_display[10] = {0x30};

uint32_t gram_display = 0;

if(gram_value >= wycena_dekorticate)

{

gram_display = gram_wartość - wycena_dekorticate;

if(gram_display

{

test_display[0] = gram_display / 1% 10 + 0x30;

dgus_show_text_value_set(VALUATION_GRAM_ADDR, test_display, 3);

}

else if(gram_display

{

test_display[0] = gram_display / 10% 10 + 0x30;

test_display[1] = gram_display / 1% 10 + 0x30;

dgus_show_text_value_set(VALUATION_GRAM_ADDR, test_display, 3);

}

else if(gram_display

{

test_display[0] = gram_display / 100% 10 + 0x30;

test_display[1] = gram_display / 10% 10 + 0x30;

test_display[2] = gram_display / 1% 10 + 0x30;

dgus_show_text_value_set(VALUATION_GRAM_ADDR, test_display, 3);

}

w przeciwnym razie (gram_display

{

test_display[0] = gram_display / 1000% 10 + 0x30;

test_display[1] = gram_display / 100% 10 + 0x30;

test_display[2] = gram_display / 10% 10 + 0x30;

test_display[3] = gram_display / 1% 10 + 0x30;

dgus_show_text_value_set(VALUATION_GRAM_ADDR, test_display, 3);

}

else if(gram_display

{

test_display[0] = gram_display / 10000% 10 + 0x30;

test_display[1] = gram_display / 1000% 10 + 0x30;

test_display[2] = gram_display / 100% 10 + 0x30;

test_display[3] = gram_display / 10% 10 + 0x30;

test_display[4] = gram_display / 1% 10 + 0x30;

dgus_show_text_value_set(VALUATION_GRAM_ADDR, test_display, 3);

}

}

w przeciwnym razie

{

dgus_show_text_value_set(VALUATION_GRAM_ADDR, test_display, 3);

}

}

 

// Odświeżenie ceny całkowitej

void page_valuation_price_refresh()

{

uint32_t wartość_ceny = 0;

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

if(gram_value >= wycena_dekorticate)

{

wartość_ceny = (wartość_gramu - dekoracja_wyceny) * cena_jednostki_wyceny * 2 / 1000;

if(wartość_ceny

{

test_display[0] = wartość_ceny / 100% 10 + 0x30;

test_display[1] = '.';

test_display[2] = wartość_ceny / 10% 10 + 0x30;

test_display[3] = wartość_ceny / 1% 10 + 0x30;

dgus_show_text_value_set(VALUATION_TOTAL_PRICES_ADDR, test_display, 4);

}

else if(wartość_ceny

{

test_display[0] = wartość_ceny / 1000% 10 + 0x30;

test_display[1] = wartość_ceny / 100% 10 + 0x30;

test_display[2] = '.';

test_display[3] = wartość_ceny / 10% 10 + 0x30;

test_display[4] = wartość_ceny / 1% 10 + 0x30;

dgus_show_text_value_set(VALUATION_TOTAL_PRICES_ADDR, test_display, 4);

}

else if(wartość_ceny

{

test_display[0] = wartość_ceny / 10000% 10 + 0x30;

test_display[1] = wartość_ceny / 1000% 10 + 0x30;

test_display[2] = wartość_ceny / 100% 10 + 0x30;

test_display[3] = '.';

test_display[4] = wartość_ceny / 10% 10 + 0x30;

test_display[5] = wartość_ceny / 1% 10 + 0x30;

dgus_show_text_value_set(VALUATION_TOTAL_PRICES_ADDR, test_display, 4);

}

else if(wartość_ceny

{

test_display[0] = wartość_ceny / 100000 % 10 + 0x30;

test_display[1] = wartość_ceny / 10000% 10 + 0x30;

test_display[2] = wartość_ceny / 1000% 10 + 0x30;

test_display[3] = wartość_ceny / 100% 10 + 0x30;

test_display[4] = '.';

test_display[5] = wartość_ceny / 10% 10 + 0x30;

test_display[6] = wartość_ceny / 1% 10 + 0x30;

dgus_show_text_value_set(VALUATION_TOTAL_PRICES_ADDR, test_display, 4);

}

}

w przeciwnym razie

{

dgus_show_text_value_set(VALUATION_TOTAL_PRICES_ADDR, test_display, 4);

}

}

void page_valuation_decorticate()

{

wycena_dekorticate = gram_wartość;

page_valuation_weight_refresh();

}

unieważnij page_valuation_1()

{

if(cena_jednostki_wyceny

{

cena_jednostkowa_wyceny = cena_jednostkowa_wyceny * 10 + 1;

page_valuation_unit_price_refresh();

}

}

unieważnij page_valuation_2()

{

if(cena_jednostki_wyceny

{

cena_jednostkowa_wyceny = cena_jednostkowa_wyceny * 10 + 2;

page_valuation_unit_price_refresh();

}

}

unieważnij page_valuation_3()

{

if(cena_jednostki_wyceny

{

cena_jednostkowa_wyceny = cena_jednostkowa_wyceny * 10 + 3;

page_valuation_unit_price_refresh();

}

}

unieważnij page_valuation_4()

{

if(cena_jednostki_wyceny

{

cena_jednostkowa_wyceny = cena_jednostkowa_wyceny * 10 + 4;

page_valuation_unit_price_refresh();

}

}

unieważnij page_valuation_5()

{

if(cena_jednostki_wyceny

{

cena_jednostkowa_wyceny = cena_jednostkowa_wyceny * 10 + 5;

page_valuation_unit_price_refresh();

}

}

unieważnij page_valuation_6()

{

if(cena_jednostki_wyceny

{

cena_jednostkowa_wyceny = cena_jednostkowa_wyceny * 10 + 6;

page_valuation_unit_price_refresh();

}

}

unieważnij page_valuation_7()

{

if(cena_jednostki_wyceny

{

cena_jednostkowa_wyceny = cena_jednostkowa_wyceny * 10 + 7;

page_valuation_unit_price_refresh();

}

}

unieważnij page_valuation_8()

{

if(cena_jednostki_wyceny

{

cena_jednostkowa_wyceny = cena_jednostkowa_wyceny * 10 + 8;

page_valuation_unit_price_refresh();

}

}

unieważnij page_valuation_9()

{

if(cena_jednostki_wyceny

{

cena_jednostkowa_wyceny = cena_jednostkowa_wyceny * 10 + 9;

page_valuation_unit_price_refresh();

}

}

unieważnij page_valuation_0()

{

if(cena_jednostki_wyceny

{

cena_jednostkowa_wyceny = cena_jednostkowa_wyceny * 10 + 0;

page_valuation_unit_price_refresh();

}

}

unieważnij page_valuation_back()

{

cena_jednostkowa_wyceny = cena_jednostkowa_wyceny / 10;

page_valuation_unit_price_refresh();

}

unieważnij page_valuation_clear()

{

cena_jednostkowa_wyceny = 0;

page_valuation_unit_price_refresh();

}


Czas publikacji: 28 kwietnia 2024 r