= Weighing Functions = [[TOC(inline, depth=1, noheading, Docs/Prog/Manual/ApplicationLibraries/lib825ev/Weight/*)]] == Minimal Weight Indicator Sample Program == This is an example of a very simple weight indicator program to display the gross weight. "Zero" and "Quit" buttons are provided. This is a minimal program for demonstration purposes. An application to be used in a production environment should have additional code to display scale status such as "Motion" and blank weight display on over capacity or weight error. [[Image(simple_ind.png)]] simple_ind.h: {{{ #ifndef SIMPLE_IND_H_ #define SIMPLE_IND_H_ EVENT(MainScreenShow); EVENT(Zero); EVENT(Quit); BACKGROUND_EVENT(Comm); MNBD_EVENT(MultiRcv); EVENT(Exit); #endif /* SIMPLE_IND_H_ */ }}} simple_ind.cpp: {{{ #include "cardinal825.h" #include "simple_ind.h" int main() { InitLCD(); SetCurColor(COLOR_ATTENTION); DisplayText(0, 0, "Simple Indicator Example"); ReadTouchCal(); OpenBeeper(); OpenTouch(); MnBdStartup(); MnBdSetEvent(MNBD_REQ_REP_MULTI, MnBdEventMultiRcv); SetBackgroundEvent(BackgroundEventComm); if(StartRepeatMulti(100) != OK) { DisplayText(0, FONT_HEIGHT, "Error starting repeat multi"); return 0; } FORM_INIT(Main, EventMainScreenShow, NULL, NULL, NULL, nFormFlgNone); FORM_ADD_BUTTON(Main, Exit, 0, FONT_HEIGHT * 12, " Exit ", 'X', EventExit, FORM_BUTTON_INVERT); FORM_ADD_BUTTON(Main, Zero, 0, 120, "Zero", 'Z', EventZero, FORM_BUTTON_OUTLINE); FORM_ADD_BUTTON(Main, Quit, 0, 200, "Quit", 'Q', EventQuit, FORM_BUTTON_OUTLINE); FORM_SHOW(Main); FORM_RUN(Main); FORM_HIDE(Main); MnBdClearCommEvent(); StopRepeatMulti(); SetBackgroundEvent(NULL); MnBdShutdown(); return 0; } EVENT(MainScreenShow) { ClearLCD(); SetCurColor(COLOR_ATTENTION); DisplayText(0, 0, "Simple Weight Indicator"); ResetPrevGrossWt(); return 0; } EVENT(Exit) { return 1; // return non-zero to exit form } MNBD_EVENT(MultiRcv) { int n; for(n = 1; n <= GetNumScales(); n++) { if(IsGrossWtChanged(n)) { DisplayText(0, (FONT_HEIGHT * n) + FONT_HEIGHT, GetChangedGrossWt(n)); } } return 0; } BACKGROUND_EVENT(Comm) { // Use MnBdRead directly to prevent overhead of MnBdProcess // MnBdRead will call event MultiRcv that we registered previously when scale and DIO status is received int n; // in case we have more I/O cards than scales change this for(n = 0; n <= GetNumScales(); n++) { // 0 = MNBD_DEV, 1 .. Scales and I/O cards MnBdRead(n); } return 0; } EVENT(Zero) { ZeroScale(1); return 0; } EVENT(Quit) { // Return non-zero to exit the form return 1; } }}}