Example of how to use an Ada Fruit RGB LCD with the Ada Fruit RGB LCD Shield Library

Dependencies:   AdaFruit_RGBLCDShield MCP23017 mbed RTclock

Dependents:   SX1276_GPS

Fork of MCP_test by Wim Huiskamp

Updated the Adafruit RGB LCD Shield test app with a module system.

It pulls in RTclock which is another library I did for controlling the DS1307 RTC in a sane way (marries stdlib time and the RTC together cleanly). You don't need an RTC to run the example, it'll just use stdlib time instead. This class also maps RTC to system time, so if you loose the RTC the mbed will free run.

Four modules are defined in the modules folder plus the module base class. These examples provide:

  • title menu item
  • time menu item (updates automatically)
  • date menu item
  • fake temp menu item

Press select to switch modes: menu->cursor->change

Menu switches menu items going up/down. Cursor allows you to move around editable fields using the cursor keys / marker. Change allows you to move left/right on a particular line and change values by using up/down on an item with the blink box.

Custom fonts are defined for UI arrows and degree character.

If you want a menu item to update over time then you need to implement the canRefresh() member function in any child module you derive from class Module. Make it return true to receive update requests in your show() member function. Date and time both check when refreshing to see if anything has changed, then update.

main() registers a table of modules with the MenuManager. Others can be added easily by creating children derived from the Module base class..

Depending on what you want to do you may need to adjust the loop wait time in MenuManager::loop(). If you don't balance this based on work you need to do then the key presses may get a little lively. I may adjust the key checking to be fixed to 200ms regardless of loop wait time, however the catch there is that you'll consume more power the more loops you do so the wait is still important.

Happy coding!

Committer:
vtraveller
Date:
Sat Aug 02 14:16:30 2014 +0000
Revision:
5:6c9ee7e3a20c
Parent:
4:d70e37f6c6bd
Child:
6:a6be2aede8f2
Improved pull-up resisitor code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wim 0:88d87b1c1f8b 1 #include "mbed.h"
vtraveller 4:d70e37f6c6bd 2
vtraveller 4:d70e37f6c6bd 3 #include "Adafruit_RGBLCDShield.h"
vtraveller 4:d70e37f6c6bd 4 //#include "MCP23017.h"
wim 0:88d87b1c1f8b 5
vtraveller 3:ed09f95739df 6 Serial pc(SERIAL_TX, SERIAL_RX);
wim 0:88d87b1c1f8b 7
vtraveller 3:ed09f95739df 8 MCP23017 mcp23017 = MCP23017(I2C_SDA, I2C_SCL, 0x40);
vtraveller 4:d70e37f6c6bd 9 Adafruit_RGBLCDShield lcd(mcp23017);
wim 0:88d87b1c1f8b 10
vtraveller 3:ed09f95739df 11 #define RED 0x1
vtraveller 3:ed09f95739df 12 #define YELLOW 0x3
vtraveller 3:ed09f95739df 13 #define GREEN 0x2
vtraveller 3:ed09f95739df 14 #define TEAL 0x6
vtraveller 3:ed09f95739df 15 #define BLUE 0x4
vtraveller 3:ed09f95739df 16 #define VIOLET 0x5
vtraveller 3:ed09f95739df 17 #define WHITE 0x7
vtraveller 3:ed09f95739df 18
vtraveller 3:ed09f95739df 19 // Allows to set the backlight, if the LCD backpack is used
vtraveller 3:ed09f95739df 20 void SetBacklight(unsigned char status)
vtraveller 3:ed09f95739df 21 {
vtraveller 3:ed09f95739df 22 pc.printf("Backlight: %i\n\r", status);
vtraveller 3:ed09f95739df 23
vtraveller 3:ed09f95739df 24 mcp23017.digitalWrite(8, (~(status >> 2) & 0x1));
vtraveller 3:ed09f95739df 25 mcp23017.digitalWrite(7, (~(status >> 1) & 0x1));
vtraveller 3:ed09f95739df 26 mcp23017.digitalWrite(6, (~status & 0x1));
vtraveller 3:ed09f95739df 27 }
wim 0:88d87b1c1f8b 28
vtraveller 4:d70e37f6c6bd 29 void loop()
vtraveller 3:ed09f95739df 30 {
vtraveller 4:d70e37f6c6bd 31 // set the cursor to column 0, line 1
vtraveller 4:d70e37f6c6bd 32 // (note: line 1 is the second row, since counting begins with 0):
vtraveller 4:d70e37f6c6bd 33 lcd.setCursor(0, 1);
vtraveller 4:d70e37f6c6bd 34
vtraveller 4:d70e37f6c6bd 35 uint8_t buttons = lcd.readButtons();
vtraveller 4:d70e37f6c6bd 36
vtraveller 4:d70e37f6c6bd 37 if (buttons)
vtraveller 4:d70e37f6c6bd 38 {
vtraveller 4:d70e37f6c6bd 39 lcd.clear();
vtraveller 4:d70e37f6c6bd 40 lcd.setCursor(0,0);
vtraveller 4:d70e37f6c6bd 41
vtraveller 4:d70e37f6c6bd 42 if (buttons & BUTTON_UP)
vtraveller 4:d70e37f6c6bd 43 {
vtraveller 4:d70e37f6c6bd 44 pc.printf("UP ");
vtraveller 4:d70e37f6c6bd 45
vtraveller 4:d70e37f6c6bd 46 lcd.printf("UP ");
vtraveller 4:d70e37f6c6bd 47 lcd.setBacklight(RED);
vtraveller 4:d70e37f6c6bd 48 }
vtraveller 4:d70e37f6c6bd 49
vtraveller 4:d70e37f6c6bd 50 if (buttons & BUTTON_DOWN)
vtraveller 4:d70e37f6c6bd 51 {
vtraveller 4:d70e37f6c6bd 52 pc.printf("DOWN ");
vtraveller 4:d70e37f6c6bd 53
vtraveller 4:d70e37f6c6bd 54 lcd.printf("DOWN ");
vtraveller 4:d70e37f6c6bd 55 lcd.setBacklight(YELLOW);
vtraveller 4:d70e37f6c6bd 56 }
vtraveller 4:d70e37f6c6bd 57
vtraveller 4:d70e37f6c6bd 58 if (buttons & BUTTON_LEFT)
vtraveller 4:d70e37f6c6bd 59 {
vtraveller 4:d70e37f6c6bd 60 pc.printf("LEFT ");
vtraveller 4:d70e37f6c6bd 61
vtraveller 4:d70e37f6c6bd 62 lcd.printf("LEFT ");
vtraveller 4:d70e37f6c6bd 63 lcd.setBacklight(GREEN);
vtraveller 4:d70e37f6c6bd 64 }
vtraveller 4:d70e37f6c6bd 65
vtraveller 4:d70e37f6c6bd 66 if (buttons & BUTTON_RIGHT)
vtraveller 4:d70e37f6c6bd 67 {
vtraveller 4:d70e37f6c6bd 68 pc.printf("RIGHT ");
vtraveller 4:d70e37f6c6bd 69
vtraveller 4:d70e37f6c6bd 70 lcd.printf("RIGHT ");
vtraveller 4:d70e37f6c6bd 71 lcd.setBacklight(TEAL);
vtraveller 4:d70e37f6c6bd 72 }
vtraveller 4:d70e37f6c6bd 73
vtraveller 4:d70e37f6c6bd 74 if (buttons & BUTTON_SELECT)
vtraveller 4:d70e37f6c6bd 75 {
vtraveller 4:d70e37f6c6bd 76 pc.printf("SELECT ");
vtraveller 4:d70e37f6c6bd 77
vtraveller 4:d70e37f6c6bd 78 lcd.printf("SELECT ");
vtraveller 4:d70e37f6c6bd 79 lcd.setBacklight(VIOLET);
vtraveller 4:d70e37f6c6bd 80 }
vtraveller 4:d70e37f6c6bd 81 }
vtraveller 3:ed09f95739df 82 }
vtraveller 3:ed09f95739df 83
vtraveller 3:ed09f95739df 84 int main()
vtraveller 3:ed09f95739df 85 {
vtraveller 4:d70e37f6c6bd 86 pc.printf("\n\rSTART\n\r");
vtraveller 5:6c9ee7e3a20c 87
vtraveller 5:6c9ee7e3a20c 88 // Take MCP out of reset to show its backlight
vtraveller 3:ed09f95739df 89 pc.printf("mcp23017.config(0,1,0);\n\r");
vtraveller 3:ed09f95739df 90 mcp23017.config(0,1,0);
vtraveller 5:6c9ee7e3a20c 91
vtraveller 5:6c9ee7e3a20c 92 wait(0.5);
vtraveller 5:6c9ee7e3a20c 93
vtraveller 5:6c9ee7e3a20c 94 pc.printf("\n\rInitialise LCD\n\r");
vtraveller 5:6c9ee7e3a20c 95 lcd.begin(16,2);
vtraveller 5:6c9ee7e3a20c 96
vtraveller 5:6c9ee7e3a20c 97 pc.printf("\n\rShow a letter\n\r");
vtraveller 5:6c9ee7e3a20c 98 lcd._putc('A');
vtraveller 5:6c9ee7e3a20c 99
vtraveller 3:ed09f95739df 100 wait(0.5);
wim 0:88d87b1c1f8b 101
vtraveller 5:6c9ee7e3a20c 102 pc.printf("\n\rPrint Hello World\n\r");
vtraveller 4:d70e37f6c6bd 103 lcd.printf("Hello, world!");
vtraveller 4:d70e37f6c6bd 104 lcd.setBacklight(GREEN);
wim 0:88d87b1c1f8b 105
vtraveller 5:6c9ee7e3a20c 106 wait(0.5);
vtraveller 5:6c9ee7e3a20c 107
vtraveller 5:6c9ee7e3a20c 108 pc.printf("\n\rEntering key tracking loop\n\r");
vtraveller 4:d70e37f6c6bd 109 while (true)
vtraveller 4:d70e37f6c6bd 110 {
vtraveller 4:d70e37f6c6bd 111 loop();
vtraveller 4:d70e37f6c6bd 112 wait(0.2);
vtraveller 5:6c9ee7e3a20c 113 }
wim 0:88d87b1c1f8b 114 }