[Código aberto] Dispositivo de pesagem multifuncional

——Do Fórum de Desenvolvedores DWIN

Nesta edição, destacamos o premiado projeto de código aberto do Fórum de Desenvolvedores DWIN: a Balança Multifuncional. O engenheiro utiliza uma tela inteligente COF de 4 polegadas e, por meio da interação de dados entre o núcleo do sistema operacional T5L, o módulo HX711 e um sensor de pressão de 5 kg, os usuários podem facilmente realizar funções de contagem e exibição, como peso, preço unitário, preço total, tara, etc., além de funções como contagem, acompanhamento de curvas de variação de peso e correção da precisão da balança. Dessa forma, é fácil alternar entre diferentes cenários de aplicação, proporcionando uma experiência de pesagem conveniente e eficiente.

1. Desenvolvimento de interface do usuário

f26af533d43728cd210e0f7af5e7acc

2.C51 Projeto

Parte do código de referência para a balança implementar a função de precificação é a seguinte:

// Página de Preços===================

#define VALUATION_UNIT_PRICE_ADDR 0x1010

#define VALUATION_GRAM_ADDR 0x1000

#define VALUATION_TOTAL_PRICES_ADDR 0x1020

uint32_t valuation_decorticate = 0; // Peso Tara para Precificação

uint32_t valuation_unit_price = 0; //Preço unitário

// Atualização do preço unitário

void page_valuation_unit_price_refresh()

{

uint8_t test_display[10] = {0};

se (preço_unitário_de_avaliação

{

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

test_display[1] = '.';

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

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

dgus_show_text_value_set(VALUATION_UNIT_PRICE_ADDR, test_display, 4);

}

senão se(preço_unitário_de_avaliação

{

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

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

test_display[2] = '.';

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

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

dgus_show_text_value_set(VALUATION_UNIT_PRICE_ADDR, test_display, 4);

}

senão se(preço_unitário_de_avaliação

{

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

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

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

test_display[3] = '.';

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

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

dgus_show_text_value_set(VALUATION_UNIT_PRICE_ADDR, test_display, 4);

}

senão se(preço_unitário_de_avaliação

{

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

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

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

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

test_display[4] = '.';

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

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

dgus_show_text_value_set(VALUATION_UNIT_PRICE_ADDR, test_display, 4);

}

}

 

// Atualização de Peso

void page_valuation_weight_refresh()

{

uint8_t test_display[10] = {0x30};

uint32_t gram_display = 0;

if(gram_value >= avaliação_decorticate)

{

gram_display = gram_value - avaliação_decorticate;

se (gram_display

{

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

dgus_show_text_value_set(VALUATION_GRAM_ADDR, test_display, 3);

}

senão se(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);

}

senão se(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);

}

senão se(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);

}

senão se(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);

}

}

outro

{

dgus_show_text_value_set(VALUATION_GRAM_ADDR, test_display, 3);

}

}

 

// Atualização do preço total

void page_valuation_price_refresh()

{

uint32_t valor_do_preço = 0;

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

if(gram_value >= avaliação_decorticate)

{

preço_valor = (valor_grama - valor_descorticado) * valor_unitário_preço * 2 / 1000;

se (valor_do_preço

{

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

test_display[1] = '.';

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

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

dgus_show_text_value_set(VALUATION_TOTAL_PRICES_ADDR, test_display, 4);

}

senão se (valor_do_preço

{

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

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

test_display[2] = '.';

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

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

dgus_show_text_value_set(VALUATION_TOTAL_PRICES_ADDR, test_display, 4);

}

senão se(valor_preço

{

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

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

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

test_display[3] = '.';

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

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

dgus_show_text_value_set(VALUATION_TOTAL_PRICES_ADDR, test_display, 4);

}

senão se(valor_preço

{

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

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

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

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

test_display[4] = '.';

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

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

dgus_show_text_value_set(VALUATION_TOTAL_PRICES_ADDR, test_display, 4);

}

}

outro

{

dgus_show_text_value_set(VALUATION_TOTAL_PRICES_ADDR, test_display, 4);

}

}

void page_valuation_decorticate()

{

avaliação_decorticate = grama_valor;

page_valuation_weight_refresh();

}

void page_valuation_1()

{

se (preço_unitário_de_avaliação

{

preço_unitário_de_avaliação = preço_unitário_de_avaliação * 10 + 1;

page_valuation_unit_price_refresh();

}

}

void page_valuation_2()

{

se (preço_unitário_de_avaliação

{

preço_unitário_de_avaliação = preço_unitário_de_avaliação * 10 + 2;

page_valuation_unit_price_refresh();

}

}

void page_valuation_3()

{

se (preço_unitário_de_avaliação

{

preço_unitário_de_avaliação = preço_unitário_de_avaliação * 10 + 3;

page_valuation_unit_price_refresh();

}

}

void page_valuation_4()

{

se (preço_unitário_de_avaliação

{

preço_unitário_de_avaliação = preço_unitário_de_avaliação * 10 + 4;

page_valuation_unit_price_refresh();

}

}

void page_valuation_5()

{

se (preço_unitário_de_avaliação

{

preço_unitário_de_avaliação = preço_unitário_de_avaliação * 10 + 5;

page_valuation_unit_price_refresh();

}

}

void page_valuation_6()

{

se (preço_unitário_de_avaliação

{

preço_unitário_de_avaliação = preço_unitário_de_avaliação * 10 + 6;

page_valuation_unit_price_refresh();

}

}

void page_valuation_7()

{

se (preço_unitário_de_avaliação

{

preço_unitário_de_avaliação = preço_unitário_de_avaliação * 10 + 7;

page_valuation_unit_price_refresh();

}

}

void page_valuation_8()

{

se (preço_unitário_de_avaliação

{

preço_unitário_de_avaliação = preço_unitário_de_avaliação * 10 + 8;

page_valuation_unit_price_refresh();

}

}

void page_valuation_9()

{

se (preço_unitário_de_avaliação

{

preço_unitário_de_avaliação = preço_unitário_de_avaliação * 10 + 9;

page_valuation_unit_price_refresh();

}

}

void page_valuation_0()

{

se (preço_unitário_de_avaliação

{

preço_unitário_de_avaliação = preço_unitário_de_avaliação * 10 + 0;

page_valuation_unit_price_refresh();

}

}

void page_valuation_back()

{

preço_unitário_de_avaliação = preço_unitário_de_avaliação / 10;

page_valuation_unit_price_refresh();

}

void page_valuation_clear()

{

preço_unitário_de_avaliação = 0;

page_valuation_unit_price_refresh();

}


Data da publicação: 28/04/2024