A port of the arduino voltmeter example for the mbed using the 4.3' PCT 4d systems touch screen display. Uses the mbed_genie library ported from the arduino visie-genie library by Christian B

Dependencies:   mbed

A test of the arduino voltmeter example using the 4.3' PCT 4d systems touch screen display.

This example program uses the mbed_genie library ported from the arduino Visi-Genie library by Christian B

The display serial TX and RX pins are connected to pin 9 and pin 10 of the mbed microcontroller

The reset pin is not connected as reset function is not implemented

Pin 15 of the mbed has a potentiometer wiper connected to it. The other connections of the potentiometer are connected to +3.3V and 0V - this is to provide some data for the demonstration and to ensure that we don't apply too much voltage to the analogue input pin

For setting up the display in Visie-Genie -

The display has an angular meter object, a LED digits object, two button objects and three static text objects.

The 4dButton0 (On) and the 4dButton1 (Off) button has been set to report on change within Visi-Genie object inspector

The serial baud rate of the display must be set to 115200 baud for this example to work. Ensure you have the settings correct in Visi-Genie when exporting the display program

The mbed program sends digital voltage readings to the LED digits and angular meter of the display module.

The volt readings will only be displayed if the appropriate button on the display is set!

I have written up a more in depth explanation on my blog here:

http://langster1980.blogspot.co.uk/2014/01/ulcd-43-display-mbed-tutorial.html

Committer:
langster1980
Date:
Sun Jan 05 00:58:09 2014 +0000
Revision:
0:1ab681bd453e
A 1st port of the arduino voltmeter demo for the 4d systems touch screen; display using the mbed as the host micro

Who changed what in which revision?

UserRevisionLine numberNew contents of line
langster1980 0:1ab681bd453e 1 #undef GENIE_DEBUG
langster1980 0:1ab681bd453e 2
langster1980 0:1ab681bd453e 3 #define GENIE_VERSION "GenieMbed 17-Nov-2013"
langster1980 0:1ab681bd453e 4
langster1980 0:1ab681bd453e 5 // Genie commands & replys:
langster1980 0:1ab681bd453e 6
langster1980 0:1ab681bd453e 7 #define GENIE_ACK 0x06
langster1980 0:1ab681bd453e 8 #define GENIE_NAK 0x15
langster1980 0:1ab681bd453e 9
langster1980 0:1ab681bd453e 10 #define TIMEOUT_PERIOD 500
langster1980 0:1ab681bd453e 11 #define RESYNC_PERIOD 100
langster1980 0:1ab681bd453e 12
langster1980 0:1ab681bd453e 13 #define GENIE_READ_OBJ 0
langster1980 0:1ab681bd453e 14 #define GENIE_WRITE_OBJ 1
langster1980 0:1ab681bd453e 15 #define GENIE_WRITE_STR 2
langster1980 0:1ab681bd453e 16 #define GENIE_WRITE_STRU 3
langster1980 0:1ab681bd453e 17 #define GENIE_WRITE_CONTRAST 4
langster1980 0:1ab681bd453e 18 #define GENIE_REPORT_OBJ 5
langster1980 0:1ab681bd453e 19 #define GENIE_REPORT_EVENT 7
langster1980 0:1ab681bd453e 20
langster1980 0:1ab681bd453e 21 // Objects
langster1980 0:1ab681bd453e 22 // the manual says:
langster1980 0:1ab681bd453e 23 // Note: Object IDs may change with future releases; it is not
langster1980 0:1ab681bd453e 24 // advisable to code their values as constants.
langster1980 0:1ab681bd453e 25
langster1980 0:1ab681bd453e 26 #define GENIE_OBJ_DIPSW 0
langster1980 0:1ab681bd453e 27 #define GENIE_OBJ_KNOB 1
langster1980 0:1ab681bd453e 28 #define GENIE_OBJ_ROCKERSW 2
langster1980 0:1ab681bd453e 29 #define GENIE_OBJ_ROTARYSW 3
langster1980 0:1ab681bd453e 30 #define GENIE_OBJ_SLIDER 4
langster1980 0:1ab681bd453e 31 #define GENIE_OBJ_TRACKBAR 5
langster1980 0:1ab681bd453e 32 #define GENIE_OBJ_WINBUTTON 6
langster1980 0:1ab681bd453e 33 #define GENIE_OBJ_ANGULAR_METER 7
langster1980 0:1ab681bd453e 34 #define GENIE_OBJ_COOL_GAUGE 8
langster1980 0:1ab681bd453e 35 #define GENIE_OBJ_CUSTOM_DIGITS 9
langster1980 0:1ab681bd453e 36 #define GENIE_OBJ_FORM 10
langster1980 0:1ab681bd453e 37 #define GENIE_OBJ_GAUGE 11
langster1980 0:1ab681bd453e 38 #define GENIE_OBJ_IMAGE 12
langster1980 0:1ab681bd453e 39 #define GENIE_OBJ_KEYBOARD 13
langster1980 0:1ab681bd453e 40 #define GENIE_OBJ_LED 14
langster1980 0:1ab681bd453e 41 #define GENIE_OBJ_LED_DIGITS 15
langster1980 0:1ab681bd453e 42 #define GENIE_OBJ_METER 16
langster1980 0:1ab681bd453e 43 #define GENIE_OBJ_STRINGS 17
langster1980 0:1ab681bd453e 44 #define GENIE_OBJ_THERMOMETER 18
langster1980 0:1ab681bd453e 45 #define GENIE_OBJ_USER_LED 19
langster1980 0:1ab681bd453e 46 #define GENIE_OBJ_VIDEO 20
langster1980 0:1ab681bd453e 47 #define GENIE_OBJ_STATIC_TEXT 21
langster1980 0:1ab681bd453e 48 #define GENIE_OBJ_SOUND 22
langster1980 0:1ab681bd453e 49 #define GENIE_OBJ_TIMER 23
langster1980 0:1ab681bd453e 50 #define GENIE_OBJ_SPECTRUM 24
langster1980 0:1ab681bd453e 51 #define GENIE_OBJ_SCOPE 25
langster1980 0:1ab681bd453e 52 #define GENIE_OBJ_TANK 26
langster1980 0:1ab681bd453e 53 #define GENIE_OBJ_USERIMAGES 27
langster1980 0:1ab681bd453e 54 #define GENIE_OBJ_PINOUTPUT 28
langster1980 0:1ab681bd453e 55 #define GENIE_OBJ_PININPUT 29
langster1980 0:1ab681bd453e 56 #define GENIE_OBJ_4DBUTTON 30
langster1980 0:1ab681bd453e 57 #define GENIE_OBJ_ANIBUTTON 31
langster1980 0:1ab681bd453e 58 #define GENIE_OBJ_COLORPICKER 32
langster1980 0:1ab681bd453e 59 #define GENIE_OBJ_USERBUTTON 33
langster1980 0:1ab681bd453e 60
langster1980 0:1ab681bd453e 61 // Structure to store replys returned from a display
langster1980 0:1ab681bd453e 62
langster1980 0:1ab681bd453e 63 #define GENIE_FRAME_SIZE 6
langster1980 0:1ab681bd453e 64 struct genieFrameReportObj {
langster1980 0:1ab681bd453e 65 uint8_t cmd;
langster1980 0:1ab681bd453e 66 uint8_t object;
langster1980 0:1ab681bd453e 67 uint8_t index;
langster1980 0:1ab681bd453e 68 uint8_t data_msb;
langster1980 0:1ab681bd453e 69 uint8_t data_lsb;
langster1980 0:1ab681bd453e 70 };
langster1980 0:1ab681bd453e 71
langster1980 0:1ab681bd453e 72 /////////////////////////////////////////////////////////////////////
langster1980 0:1ab681bd453e 73 // The Genie frame definition
langster1980 0:1ab681bd453e 74 //
langster1980 0:1ab681bd453e 75 // The union allows the data to be referenced as an array of uint8_t
langster1980 0:1ab681bd453e 76 // or a structure of type genieFrameReportObj, eg
langster1980 0:1ab681bd453e 77 //
langster1980 0:1ab681bd453e 78 // genieFrame f;
langster1980 0:1ab681bd453e 79 // f.bytes[4];
langster1980 0:1ab681bd453e 80 // f.reportObject.data_lsb
langster1980 0:1ab681bd453e 81 //
langster1980 0:1ab681bd453e 82 // both methods get the same byte
langster1980 0:1ab681bd453e 83 //
langster1980 0:1ab681bd453e 84 union genieFrame {
langster1980 0:1ab681bd453e 85 uint8_t bytes[GENIE_FRAME_SIZE];
langster1980 0:1ab681bd453e 86 genieFrameReportObj reportObject;
langster1980 0:1ab681bd453e 87 };
langster1980 0:1ab681bd453e 88
langster1980 0:1ab681bd453e 89 #define MAX_GENIE_EVENTS 16 // MUST be a power of 2
langster1980 0:1ab681bd453e 90 #define MAX_GENIE_FATALS 10
langster1980 0:1ab681bd453e 91
langster1980 0:1ab681bd453e 92 struct genieEventQueueStruct {
langster1980 0:1ab681bd453e 93 genieFrame frames[MAX_GENIE_EVENTS];
langster1980 0:1ab681bd453e 94 uint8_t rd_index;
langster1980 0:1ab681bd453e 95 uint8_t wr_index;
langster1980 0:1ab681bd453e 96 uint8_t n_events;
langster1980 0:1ab681bd453e 97 };
langster1980 0:1ab681bd453e 98
langster1980 0:1ab681bd453e 99 typedef void (*geniePutCharFuncPtr) (uint8_t c, uint32_t baud);
langster1980 0:1ab681bd453e 100 typedef uint16_t (*genieGetCharFuncPtr) (void);
langster1980 0:1ab681bd453e 101 typedef void (*genieUserEventHandlerPtr) (void);
langster1980 0:1ab681bd453e 102
langster1980 0:1ab681bd453e 103 #define ERROR_NONE 0
langster1980 0:1ab681bd453e 104 #define ERROR_TIMEOUT -1 // 255 0xFF
langster1980 0:1ab681bd453e 105 #define ERROR_NOHANDLER -2 // 254 0xFE
langster1980 0:1ab681bd453e 106 #define ERROR_NOCHAR -3 // 253 0xFD
langster1980 0:1ab681bd453e 107 #define ERROR_NAK -4 // 252 0xFC
langster1980 0:1ab681bd453e 108 #define ERROR_REPLY_OVR -5 // 251 0xFB
langster1980 0:1ab681bd453e 109 #define ERROR_RESYNC -6 // 250 0xFA
langster1980 0:1ab681bd453e 110 #define ERROR_NODISPLAY -7 // 249 0xF9
langster1980 0:1ab681bd453e 111 #define ERROR_BAD_CS -8 // 248 0xF8
langster1980 0:1ab681bd453e 112
langster1980 0:1ab681bd453e 113 #define GENIE_LINK_IDLE 0
langster1980 0:1ab681bd453e 114 #define GENIE_LINK_WFAN 1 // waiting for Ack or Nak
langster1980 0:1ab681bd453e 115 #define GENIE_LINK_WF_RXREPORT 2 // waiting for a report frame
langster1980 0:1ab681bd453e 116 #define GENIE_LINK_RXREPORT 3 // receiving a report frame
langster1980 0:1ab681bd453e 117 #define GENIE_LINK_RXEVENT 4 // receiving an event frame
langster1980 0:1ab681bd453e 118 #define GENIE_LINK_SHDN 5
langster1980 0:1ab681bd453e 119
langster1980 0:1ab681bd453e 120 #define GENIE_EVENT_NONE 0
langster1980 0:1ab681bd453e 121 #define GENIE_EVENT_RXCHAR 1
langster1980 0:1ab681bd453e 122
langster1980 0:1ab681bd453e 123 #ifndef TRUE
langster1980 0:1ab681bd453e 124 #define TRUE (1==1)
langster1980 0:1ab681bd453e 125 #define FALSE (!TRUE)
langster1980 0:1ab681bd453e 126 #endif
langster1980 0:1ab681bd453e 127
langster1980 0:1ab681bd453e 128 void SetupGenie(void);
langster1980 0:1ab681bd453e 129 void genieAttachEventHandler (genieUserEventHandlerPtr handler);
langster1980 0:1ab681bd453e 130 extern bool genieDequeueEvent (genieFrame * buff);
langster1980 0:1ab681bd453e 131 extern bool genieEventIs (genieFrame * e, uint8_t cmd, uint8_t object, uint8_t index);
langster1980 0:1ab681bd453e 132 extern uint16_t genieGetEventData (genieFrame * e);
langster1980 0:1ab681bd453e 133 extern uint16_t genieWriteObject (uint16_t object, uint16_t index, uint16_t data);
langster1980 0:1ab681bd453e 134 extern uint16_t genieWriteStr (uint16_t index, char *string);
langster1980 0:1ab681bd453e 135 extern void genieWriteContrast (uint16_t value);
langster1980 0:1ab681bd453e 136