[Open Source] Multifunktionale Waage

— Aus dem DWIN-Entwicklerforum

In dieser Ausgabe stellen wir die preisgekrönte Open-Source-Anwendung des DWIN Developer Forums vor: eine Multifunktionswaage. Ausgestattet mit einem 4-Zoll-COF-Smart-Display und durch die Dateninteraktion zwischen dem T5L-Betriebssystemkern, dem HX711-Modul und einem 5-kg-Drucksensor, ermöglicht sie Nutzern die einfache Anzeige von Zählfunktionen wie Gewicht, Einzelpreis, Gesamtpreis, Tara usw. Zusätzlich bietet sie Funktionen zum Zählen, zur Verfolgung von Gewichtsveränderungskurven und zur Korrektur der Waagengenauigkeit. So lässt sich mühelos zwischen verschiedenen Anwendungsszenarien wechseln und ein komfortables und effizientes Wiegeerlebnis genießen.

1. UI-Entwicklung

f26af533d43728cd210e0f7af5e7acc

2.C51 Design

Ein Teil des Referenzcodes für die Waage zur Implementierung der Preisfunktion lautet wie folgt:

// Preisseite===================

#define VALUATION_UNIT_PRICE_ADDR 0x1010

#define VALUATION_GRAM_ADDR 0x1000

#define VALUATION_TOTAL_PRICES_ADDR 0x1020

uint32_t valuation_decorticate = 0; // Taragewicht für die Preisgestaltung

uint32_t valuation_unit_price = 0; //Einzelpreis

// Aktualisierung der Einzelpreise

void page_valuation_unit_price_refresh()

{

uint8_t test_display[10] = {0};

if(valuation_unit_price

{

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);

}

sonst falls (Bewertungs-Einheitspreis

{

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);

}

sonst falls (Bewertungs-Einheitspreis

{

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);

}

sonst falls (Bewertungs-Einheitspreis

{

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);

}

}

 

// Gewichtsaktualisierung

void page_valuation_weight_refresh()

{

uint8_t test_display[10] = {0x30};

uint32_t gram_display = 0;

if(gram_value >=valuation_decorticate)

{

gram_display = gram_value -valuation_decorticate;

if(gram_display

{

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

dgus_show_text_value_set(VALUATION_GRAM_ADDR, test_display, 3);

}

sonst falls(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);

}

sonst falls(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);

}

sonst falls(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);

}

sonst falls(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);

}

}

anders

{

dgus_show_text_value_set(VALUATION_GRAM_ADDR, test_display, 3);

}

}

 

// Aktualisierung des Gesamtpreises

void page_valuation_price_refresh()

{

uint32_t price_value = 0;

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

if(gram_value >=valuation_decorticate)

{

Preis_Wert = (Grammwert - Bewertung_dekoriert) * Bewertung_Einzelpreis * 2 / 1000;

if(price_value

{

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);

}

sonst falls (Preiswert

{

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);

}

sonst falls (Preiswert

{

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);

}

sonst falls (Preiswert

{

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);

}

}

anders

{

dgus_show_text_value_set(VALUATION_TOTAL_PRICES_ADDR, test_display, 4);

}

}

void page_valuation_decorticate()

{

valuation_decorticate = gram_value;

page_valuation_weight_refresh();

}

void page_valuation_1()

{

if(valuation_unit_price

{

Bewertungs-Einzelpreis = Bewertungs-Einzelpreis * 10 + 1;

page_valuation_unit_price_refresh();

}

}

void page_valuation_2()

{

if(valuation_unit_price

{

Bewertungs-Einzelpreis = Bewertungs-Einzelpreis * 10 + 2;

page_valuation_unit_price_refresh();

}

}

void page_valuation_3()

{

if(valuation_unit_price

{

Bewertungs-Einzelpreis = Bewertungs-Einzelpreis * 10 + 3;

page_valuation_unit_price_refresh();

}

}

void page_valuation_4()

{

if(valuation_unit_price

{

Bewertungs-Einzelpreis = Bewertungs-Einzelpreis * 10 + 4;

page_valuation_unit_price_refresh();

}

}

void page_valuation_5()

{

if(valuation_unit_price

{

Bewertungs-Einzelpreis = Bewertungs-Einzelpreis * 10 + 5;

page_valuation_unit_price_refresh();

}

}

void page_valuation_6()

{

if(valuation_unit_price

{

Bewertungs-Einzelpreis = Bewertungs-Einzelpreis * 10 + 6;

page_valuation_unit_price_refresh();

}

}

void page_valuation_7()

{

if(valuation_unit_price

{

Bewertungs-Einzelpreis = Bewertungs-Einzelpreis * 10 + 7;

page_valuation_unit_price_refresh();

}

}

void page_valuation_8()

{

if(valuation_unit_price

{

Bewertungs-Einzelpreis = Bewertungs-Einzelpreis * 10 + 8;

page_valuation_unit_price_refresh();

}

}

void page_valuation_9()

{

if(valuation_unit_price

{

Bewertungs-Einzelpreis = Bewertungs-Einzelpreis * 10 + 9;

page_valuation_unit_price_refresh();

}

}

void page_valuation_0()

{

if(valuation_unit_price

{

Bewertungs-Einzelpreis = Bewertungs-Einzelpreis * 10 + 0;

page_valuation_unit_price_refresh();

}

}

void page_valuation_back()

{

Bewertungs-Einzelpreis = Bewertungs-Einzelpreis / 10;

page_valuation_unit_price_refresh();

}

void page_valuation_clear()

{

Bewertungs-Einzelpreis = 0;

page_valuation_unit_price_refresh();

}


Veröffentlichungsdatum: 28. April 2024