Test application for the LCD4884. It uses the LCD 4884 from SainSmart / DFRobot, the on board accelerometer and RGB LED.

Dependencies:   LCD4884 MMA8451Q mbed

/media/uploads/COX/mbed_pic_s.jpg

This is the first version.

- I want to add support for a smaller font (like 5x6).

- Update the 5 way read and de-bounce.

It was my first try with MBED on the FRDM KL25Z board and LCD shield.

!!!!!

The shield needs to be modified to work correctly. It has the 5V routed to the 5 way switch so it is more than the 3V threshold for the ADC.

!!!!!

Committer:
COX
Date:
Sat Mar 09 21:13:31 2013 +0000
Revision:
1:0dee51d54fd6
Parent:
0:b06425bd412a
Testing code for the LCD4884 library.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
COX 0:b06425bd412a 1 #include "mbed.h"
COX 0:b06425bd412a 2 #include "LCD4884.h"
COX 0:b06425bd412a 3 #include "MMA8451Q.h"
COX 0:b06425bd412a 4
COX 0:b06425bd412a 5 #define MMA8451_I2C_ADDRESS (0x1d<<1)
COX 0:b06425bd412a 6 #define SERIAL_FREQ 10
COX 0:b06425bd412a 7
COX 0:b06425bd412a 8 //keypad debounce parameter
COX 0:b06425bd412a 9 #define DEBOUNCE_MAX 10
COX 0:b06425bd412a 10 //#define DEBOUNCE_ON 10
COX 0:b06425bd412a 11 //#define DEBOUNCE_OFF 3
COX 0:b06425bd412a 12
COX 0:b06425bd412a 13 #define NUM_KEYS 5
COX 0:b06425bd412a 14
COX 0:b06425bd412a 15 #define NUM_MENU_ITEM 6
COX 0:b06425bd412a 16
COX 0:b06425bd412a 17 // joystick number
COX 0:b06425bd412a 18 #define LEFT_KEY 0
COX 0:b06425bd412a 19 #define CENTER_KEY 1
COX 0:b06425bd412a 20 #define DOWN_KEY 2
COX 0:b06425bd412a 21 #define RIGHT_KEY 3
COX 0:b06425bd412a 22 #define UP_KEY 4
COX 0:b06425bd412a 23
COX 0:b06425bd412a 24 // menu starting points
COX 0:b06425bd412a 25
COX 0:b06425bd412a 26 #define MENU_X 4 // 0-83
COX 0:b06425bd412a 27 #define MENU_Y 0 // 0-5
COX 0:b06425bd412a 28
COX 0:b06425bd412a 29 /*------------------------------------------------------------------------------
COX 0:b06425bd412a 30 ; DFrobot bitmap - size 48x24 pixels, black/white image
COX 0:b06425bd412a 31 ------------------------------------------------------------------------------*/
COX 0:b06425bd412a 32 unsigned char demo_bmp[]=
COX 0:b06425bd412a 33
COX 0:b06425bd412a 34 {
COX 0:b06425bd412a 35 0x00,0x00,0x10,0x20,0x20,0x60,0xE0,0xC0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xF0,0xF0,0xF8,0xF8,0xFC,0xFC,0x3E,0x3E,0x32,0x61,0x00,0x00,
COX 0:b06425bd412a 36 0x00,0x00,0x61,0x32,0x3E,0x3E,0xFC,0xFC,0xF8,0xF8,0xF0,0xF0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xC0,0xE0,0x60,0x20,0x20,0x10,0x00,0x00,
COX 0:b06425bd412a 37
COX 0:b06425bd412a 38 0x00,0x00,0x00,0x00,0x00,0x08,0x78,0xF3,0xFB,0xF3,0x1B,0x18,0xE8,0xEC,0xC0,0xC4,0xC0,0xF0,0xE0,0x70,0x73,0xE7,0xFE,0xFE,0xF8,0xFE,0xDE,0x0F,0x0F,0xBF,0xFF,0xEB,0x83,0x06,0x06,0x0F,0x0F,0x1C,0x18,0x20,0x00,0x00,
COX 0:b06425bd412a 39 0x00,0x00,0x20,0x18,0x1C,0x0F,0x0F,0x06,0x06,0x83,0xEB,0xFF,0xBF,0x0F,0x0F,0xDE,0xFE,0xF8,0xFE,0xFE,0xE7,0x73,0x70,0xE0,0xF0,0xC0,0xC4,0xC0,0xEC,0xE8,0x18,0x1B,0xF3,0xFB,0xF3,0x78,0x08,0x00,0x00,0x00,0x00,0x00,
COX 0:b06425bd412a 40
COX 0:b06425bd412a 41 0x00,0x00,0x02,0x03,0x03,0x03,0x03,0x06,0x06,0x0F,0x1F,0x2E,0x68,0xF3,0xE7,0xEF,0xDF,0x9D,0xBC,0xB8,0xB8,0x9C,0xD8,0xE3,0x7F,0x7F,0xFE,0xF0,0xC7,0x87,0x07,0x07,0xFF,0x7E,0x1C,0xFC,0xFC,0xFC,0xFC,0xFE,0xE0,0xF8,
COX 0:b06425bd412a 42 0xF8,0xE0,0xFE,0xFC,0xFC,0xFC,0xFC,0x1C,0x7E,0xFF,0x07,0x07,0x87,0xC7,0xF0,0xFE,0x7F,0x7F,0xE3,0xD8,0x9C,0xB8,0xB8,0xBC,0x9D,0xDF,0xEF,0xE7,0xF3,0x68,0x2E,0x1F,0x0F,0x06,0x06,0x03,0x03,0x03,0x03,0x02,0x00,0x00,
COX 0:b06425bd412a 43
COX 0:b06425bd412a 44 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x21,0x39,0x1F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0E,0x0E,0x1E,0x1F,0x3F,0x7F,0xFE,0xFC,0xF9,0xF2,0xFE,0xF8,0xE3,0x8F,0xE7,0xCF,0xC7,
COX 0:b06425bd412a 45 0xC7,0xCF,0xE7,0x8F,0xE3,0xF8,0xFE,0xF2,0xF9,0xFC,0xFE,0x7F,0x3F,0x1F,0x1E,0x0E,0x0E,0x0F,0x0F,0x0F,0x0F,0x0F,0x1F,0x39,0x21,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
COX 0:b06425bd412a 46
COX 0:b06425bd412a 47 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xDF,0x3F,0x01,0x03,0x07,0x0F,0x1F,0x3F,0xFF,0xFF,
COX 0:b06425bd412a 48 0xFF,0xFF,0x3F,0x1F,0x0F,0x07,0x03,0x01,0x3F,0xDF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
COX 0:b06425bd412a 49 };
COX 0:b06425bd412a 50 /******************************************************************************/
COX 0:b06425bd412a 51
COX 0:b06425bd412a 52
COX 0:b06425bd412a 53 /*------------------------------------------------------------------------------
COX 0:b06425bd412a 54 ; DFrobot chinese - size 12x12
COX 0:b06425bd412a 55 ------------------------------------------------------------------------------*/
COX 0:b06425bd412a 56 /*unsigned char DFrobot_chinese[]=
COX 0:b06425bd412a 57 {
COX 0:b06425bd412a 58 0x84,0x64,0xFF,0x24,0x44,0xFE,0x02,0x02,0xFF,0x02,0x00,0x00,0x01,0x00,0x07,0x04,0x02,0x01,0x00,0x00,0x07,0x04,0x07,0x00,
COX 0:b06425bd412a 59 0xA0,0xAF,0xA9,0xE9,0xAF,0x30,0xAF,0xA9,0xF9,0xAF,0xA0,0x00,0x00,0x07,0x04,0x04,0x07,0x00,0x07,0x04,0x04,0x07,0x00,0x00,
COX 0:b06425bd412a 60 0x00,0x00,0x00,0x80,0x60,0x1F,0x60,0x80,0x00,0x00,0x00,0x00,0x04,0x04,0x02,0x01,0x00,0x00,0x00,0x01,0x02,0x04,0x04,0x00,
COX 0:b06425bd412a 61 0x22,0x12,0x0A,0xBF,0x6A,0x52,0x4A,0x7F,0xCA,0x12,0x22,0x00,0x04,0x05,0x05,0x04,0x05,0x02,0x02,0x01,0x00,0x00,0x00,0x00,
COX 0:b06425bd412a 62 0x00,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x03,0x02,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x04,0x04,0x00,
COX 0:b06425bd412a 63 0x00,0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
COX 0:b06425bd412a 64 };*/
COX 0:b06425bd412a 65
COX 0:b06425bd412a 66
COX 0:b06425bd412a 67 LCD4884 lcd;
COX 0:b06425bd412a 68 AnalogIn JStick(PTB0);
COX 0:b06425bd412a 69 Timeout readJStick;
COX 0:b06425bd412a 70 MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS);
COX 0:b06425bd412a 71
COX 0:b06425bd412a 72 //DigitalOut TestPin1(PTA13);
COX 0:b06425bd412a 73 //DigitalOut TestPin2(PTD5);
COX 0:b06425bd412a 74 PwmOut r (LED_RED);
COX 0:b06425bd412a 75 PwmOut g (LED_GREEN);
COX 0:b06425bd412a 76 PwmOut b (LED_BLUE);
COX 0:b06425bd412a 77
COX 0:b06425bd412a 78 PwmOut rgb[3] = {PwmOut(LED_RED), PwmOut(LED_GREEN), PwmOut(LED_BLUE)};
COX 0:b06425bd412a 79
COX 0:b06425bd412a 80 //LEFT_KEY, CENTER_KEY, DOWN_KEY, RIGHT_KEY, UP_KEY
COX 0:b06425bd412a 81 float adc_key_val[5] ={
COX 0:b06425bd412a 82 0.10, 0.20, 0.40, 0.60, 0.90 };
COX 0:b06425bd412a 83
COX 0:b06425bd412a 84 float lcdBrightness = 1;
COX 0:b06425bd412a 85 float JStickReadSpeed = 0.015;
COX 0:b06425bd412a 86 float x, y, z;
COX 0:b06425bd412a 87
COX 0:b06425bd412a 88 // debounce counters
COX 0:b06425bd412a 89 char button_count[NUM_KEYS];
COX 0:b06425bd412a 90 // button status - pressed/released
COX 0:b06425bd412a 91 char button_status[NUM_KEYS];
COX 0:b06425bd412a 92
COX 0:b06425bd412a 93 // menu definition
COX 0:b06425bd412a 94 char menu_items[NUM_MENU_ITEM][14]={
COX 0:b06425bd412a 95 "BRIGHTNESS",
COX 0:b06425bd412a 96 "RGB",
COX 0:b06425bd412a 97 "CHAR MAP",
COX 0:b06425bd412a 98 "BITMAP",
COX 0:b06425bd412a 99 "ACCELEROMETER",
COX 0:b06425bd412a 100 "ABOUT"
COX 0:b06425bd412a 101 };
COX 0:b06425bd412a 102
COX 0:b06425bd412a 103 void brightness();
COX 0:b06425bd412a 104 void rgb_led_ctrl();
COX 0:b06425bd412a 105 void charmap();
COX 0:b06425bd412a 106 void bitmap();
COX 0:b06425bd412a 107 void accelerometer();
COX 0:b06425bd412a 108 void about();
COX 0:b06425bd412a 109 void init_MENU(void);
COX 0:b06425bd412a 110 void update_adc_key();
COX 0:b06425bd412a 111 void waitfor_OKkey();
COX 0:b06425bd412a 112
COX 0:b06425bd412a 113 void (*menu_funcs[NUM_MENU_ITEM])(void) = {
COX 0:b06425bd412a 114 brightness,
COX 0:b06425bd412a 115 rgb_led_ctrl,
COX 0:b06425bd412a 116 charmap,
COX 0:b06425bd412a 117 bitmap,
COX 0:b06425bd412a 118 accelerometer,
COX 0:b06425bd412a 119 about
COX 0:b06425bd412a 120 };
COX 0:b06425bd412a 121
COX 0:b06425bd412a 122 char current_menu_item = 0;
COX 0:b06425bd412a 123 char rgb_menu_item = 0;
COX 0:b06425bd412a 124
COX 0:b06425bd412a 125 void setup()
COX 0:b06425bd412a 126 {
COX 0:b06425bd412a 127
COX 0:b06425bd412a 128 /* reset button arrays */
COX 0:b06425bd412a 129 for(char i=0; i<NUM_KEYS; i++){
COX 0:b06425bd412a 130 button_count[i]=0;
COX 0:b06425bd412a 131 button_status[i]=0;
COX 0:b06425bd412a 132 }
COX 0:b06425bd412a 133
COX 0:b06425bd412a 134 lcd.LCD_init();
COX 0:b06425bd412a 135 lcd.LCD_clear();
COX 0:b06425bd412a 136
COX 0:b06425bd412a 137 /*Setup RGB LED*/
COX 0:b06425bd412a 138 rgb[0].period_us(100);
COX 0:b06425bd412a 139 for(char i=0; i<3; i++){
COX 0:b06425bd412a 140 rgb[i] = 1;
COX 0:b06425bd412a 141 }
COX 0:b06425bd412a 142
COX 0:b06425bd412a 143 /*Menu initialization*/
COX 0:b06425bd412a 144 init_MENU();
COX 0:b06425bd412a 145 current_menu_item = 0;
COX 0:b06425bd412a 146
COX 0:b06425bd412a 147 lcd.backlight(ON);//Turn on the backlight
COX 0:b06425bd412a 148
COX 0:b06425bd412a 149 readJStick.attach(&update_adc_key, JStickReadSpeed);
COX 0:b06425bd412a 150 }
COX 0:b06425bd412a 151
COX 0:b06425bd412a 152 unsigned long buttonFlasher = 0;
COX 0:b06425bd412a 153
COX 0:b06425bd412a 154 /* loop */
COX 0:b06425bd412a 155
COX 0:b06425bd412a 156 void loop()
COX 0:b06425bd412a 157 {
COX 0:b06425bd412a 158 for(char i=0; i<NUM_KEYS; i++){
COX 0:b06425bd412a 159 if(button_status[i] != 0){
COX 0:b06425bd412a 160 button_status[i] = 0; // reset button flag
COX 0:b06425bd412a 161
COX 0:b06425bd412a 162 switch(i){
COX 0:b06425bd412a 163 case UP_KEY:
COX 0:b06425bd412a 164 // current item to normal display
COX 0:b06425bd412a 165 lcd.LCD_write_string(MENU_X, MENU_Y + current_menu_item, menu_items[current_menu_item], MENU_NORMAL );
COX 0:b06425bd412a 166 if(current_menu_item == 0)
COX 0:b06425bd412a 167 current_menu_item = NUM_MENU_ITEM -1;
COX 0:b06425bd412a 168 else
COX 0:b06425bd412a 169 current_menu_item -=1;
COX 0:b06425bd412a 170 // next item to highlight display
COX 0:b06425bd412a 171 lcd.LCD_write_string(MENU_X, MENU_Y + current_menu_item, menu_items[current_menu_item], MENU_HIGHLIGHT );
COX 0:b06425bd412a 172 break;
COX 0:b06425bd412a 173
COX 0:b06425bd412a 174 case DOWN_KEY:
COX 0:b06425bd412a 175 // current item to normal display
COX 0:b06425bd412a 176 lcd.LCD_write_string(MENU_X, MENU_Y + current_menu_item, menu_items[current_menu_item], MENU_NORMAL );
COX 0:b06425bd412a 177 current_menu_item +=1;
COX 0:b06425bd412a 178 if(current_menu_item >(NUM_MENU_ITEM-1)) current_menu_item = 0;
COX 0:b06425bd412a 179 // next item to highlight display
COX 0:b06425bd412a 180 lcd.LCD_write_string(MENU_X, MENU_Y + current_menu_item, menu_items[current_menu_item], MENU_HIGHLIGHT );
COX 0:b06425bd412a 181 break;
COX 0:b06425bd412a 182
COX 0:b06425bd412a 183 /*case LEFT_KEY:
COX 0:b06425bd412a 184 case RIGHT_KEY:
COX 0:b06425bd412a 185 init_MENU();
COX 0:b06425bd412a 186 current_menu_item = 0;
COX 0:b06425bd412a 187 break;*/
COX 0:b06425bd412a 188
COX 0:b06425bd412a 189 case CENTER_KEY:
COX 0:b06425bd412a 190 lcd.LCD_clear();
COX 0:b06425bd412a 191 lcd.LCD_write_string(36, 5, "OK", MENU_HIGHLIGHT );
COX 0:b06425bd412a 192 (*menu_funcs[current_menu_item])();
COX 0:b06425bd412a 193 init_MENU();
COX 0:b06425bd412a 194 break;
COX 0:b06425bd412a 195 }
COX 0:b06425bd412a 196 }
COX 0:b06425bd412a 197 }
COX 0:b06425bd412a 198 }
COX 0:b06425bd412a 199
COX 0:b06425bd412a 200 /* menu functions */
COX 0:b06425bd412a 201
COX 0:b06425bd412a 202 void init_MENU(void)
COX 0:b06425bd412a 203 {
COX 0:b06425bd412a 204 lcd.LCD_clear();
COX 0:b06425bd412a 205
COX 0:b06425bd412a 206 for (char i=0; i<NUM_MENU_ITEM; i++){
COX 0:b06425bd412a 207 if(i==current_menu_item)
COX 0:b06425bd412a 208 lcd.LCD_write_string(MENU_X, MENU_Y+i, menu_items[i], MENU_HIGHLIGHT);
COX 0:b06425bd412a 209 else
COX 0:b06425bd412a 210 lcd.LCD_write_string(MENU_X, MENU_Y+i, menu_items[i], MENU_NORMAL);
COX 0:b06425bd412a 211 }
COX 0:b06425bd412a 212 }
COX 0:b06425bd412a 213
COX 0:b06425bd412a 214 // waiting for center key press
COX 0:b06425bd412a 215 void waitfor_OKkey()
COX 0:b06425bd412a 216 {
COX 0:b06425bd412a 217 char stay = 1;
COX 0:b06425bd412a 218
COX 0:b06425bd412a 219 while(stay)
COX 0:b06425bd412a 220 {
COX 0:b06425bd412a 221 for(char i=0; i<NUM_KEYS; i++)
COX 0:b06425bd412a 222 {
COX 0:b06425bd412a 223 if(button_status[i] != 0){
COX 0:b06425bd412a 224 if(CENTER_KEY == i)
COX 0:b06425bd412a 225 {
COX 0:b06425bd412a 226 stay = 0;
COX 0:b06425bd412a 227 button_status[i] = 0;
COX 0:b06425bd412a 228 }
COX 0:b06425bd412a 229 }
COX 0:b06425bd412a 230 }
COX 0:b06425bd412a 231 }
COX 0:b06425bd412a 232 }
COX 0:b06425bd412a 233
COX 0:b06425bd412a 234 void brightness()
COX 0:b06425bd412a 235 {
COX 0:b06425bd412a 236 char redraw = 1;
COX 0:b06425bd412a 237
COX 0:b06425bd412a 238 lcd.LCD_write_string(14, 1, "LCD", MENU_NORMAL);
COX 0:b06425bd412a 239
COX 0:b06425bd412a 240 while(1)
COX 0:b06425bd412a 241 {
COX 0:b06425bd412a 242 if(redraw)
COX 0:b06425bd412a 243 {
COX 0:b06425bd412a 244 lcd.LCD_set_XY(12,2);
COX 0:b06425bd412a 245 for(char i=0; i<10; i++)
COX 0:b06425bd412a 246 {
COX 0:b06425bd412a 247 if(i < lcdBrightness * 10)
COX 0:b06425bd412a 248 lcd.LCD_write_char(92, MENU_NORMAL);
COX 0:b06425bd412a 249 else
COX 0:b06425bd412a 250 lcd.LCD_write_char(95, MENU_NORMAL);
COX 0:b06425bd412a 251 }
COX 0:b06425bd412a 252 redraw = 0;
COX 0:b06425bd412a 253 }
COX 0:b06425bd412a 254
COX 0:b06425bd412a 255 if (button_status[RIGHT_KEY])
COX 0:b06425bd412a 256 {
COX 0:b06425bd412a 257 button_status[RIGHT_KEY] = 0;
COX 0:b06425bd412a 258 redraw = 1;
COX 0:b06425bd412a 259 if(lcdBrightness < 1)
COX 0:b06425bd412a 260 {
COX 0:b06425bd412a 261 lcdBrightness += 0.1;
COX 0:b06425bd412a 262 lcd.backlight(lcdBrightness);
COX 0:b06425bd412a 263 }
COX 0:b06425bd412a 264 }
COX 0:b06425bd412a 265 if (button_status[LEFT_KEY])
COX 0:b06425bd412a 266 {
COX 0:b06425bd412a 267 button_status[LEFT_KEY] = 0;
COX 0:b06425bd412a 268 redraw = 1;
COX 0:b06425bd412a 269 if(lcdBrightness > 0)
COX 0:b06425bd412a 270 {
COX 0:b06425bd412a 271 lcdBrightness -= 0.1;
COX 0:b06425bd412a 272 lcd.backlight(lcdBrightness);
COX 0:b06425bd412a 273 }
COX 0:b06425bd412a 274 }
COX 0:b06425bd412a 275
COX 0:b06425bd412a 276 if (button_status[CENTER_KEY])
COX 0:b06425bd412a 277 {
COX 0:b06425bd412a 278 button_status[CENTER_KEY] = 0;
COX 0:b06425bd412a 279 break;
COX 0:b06425bd412a 280 }
COX 0:b06425bd412a 281 }
COX 0:b06425bd412a 282 }
COX 0:b06425bd412a 283
COX 0:b06425bd412a 284 void rgb_led_ctrl()
COX 0:b06425bd412a 285 {
COX 0:b06425bd412a 286 char redraw = 1;
COX 0:b06425bd412a 287 float temp;
COX 0:b06425bd412a 288
COX 0:b06425bd412a 289 lcd.LCD_write_string(14, 0, "RGB", MENU_NORMAL);
COX 0:b06425bd412a 290
COX 0:b06425bd412a 291 while(1)
COX 0:b06425bd412a 292 {
COX 0:b06425bd412a 293 if(redraw)
COX 0:b06425bd412a 294 {
COX 0:b06425bd412a 295 lcd.LCD_write_string(5, 2, "R:", (rgb_menu_item == 0)?MENU_HIGHLIGHT:MENU_NORMAL);
COX 0:b06425bd412a 296 lcd.LCD_write_string(5, 3, "G:", (rgb_menu_item == 1)?MENU_HIGHLIGHT:MENU_NORMAL);
COX 0:b06425bd412a 297 lcd.LCD_write_string(5, 4, "B:", (rgb_menu_item == 2)?MENU_HIGHLIGHT:MENU_NORMAL);
COX 0:b06425bd412a 298
COX 0:b06425bd412a 299 for(char j=0; j<3; j++)
COX 0:b06425bd412a 300 {
COX 0:b06425bd412a 301 lcd.LCD_set_XY(17,2+j);
COX 0:b06425bd412a 302 temp = rgb[j];
COX 0:b06425bd412a 303 for(char i=0; i<10; i++)
COX 0:b06425bd412a 304 {
COX 0:b06425bd412a 305 if(i < (1-temp)*10)
COX 0:b06425bd412a 306 lcd.LCD_write_char(92, MENU_NORMAL);
COX 0:b06425bd412a 307 else
COX 0:b06425bd412a 308 lcd.LCD_write_char(32, MENU_NORMAL);
COX 0:b06425bd412a 309 }
COX 0:b06425bd412a 310 }
COX 0:b06425bd412a 311 redraw = 0;
COX 0:b06425bd412a 312 }
COX 0:b06425bd412a 313
COX 0:b06425bd412a 314 if (button_status[RIGHT_KEY])
COX 0:b06425bd412a 315 {
COX 0:b06425bd412a 316 button_status[RIGHT_KEY] = 0;
COX 0:b06425bd412a 317 redraw = 1;
COX 0:b06425bd412a 318 temp = rgb[rgb_menu_item];
COX 0:b06425bd412a 319 if(temp > 0){
COX 0:b06425bd412a 320 rgb[rgb_menu_item] = temp - 0.1;
COX 0:b06425bd412a 321 }
COX 0:b06425bd412a 322 }
COX 0:b06425bd412a 323 if (button_status[LEFT_KEY])
COX 0:b06425bd412a 324 {
COX 0:b06425bd412a 325 button_status[LEFT_KEY] = 0;
COX 0:b06425bd412a 326 redraw = 1;
COX 0:b06425bd412a 327 temp = rgb[rgb_menu_item];
COX 0:b06425bd412a 328 if(temp < 1){
COX 0:b06425bd412a 329 rgb[rgb_menu_item] = temp + 0.1;
COX 0:b06425bd412a 330 }
COX 0:b06425bd412a 331 }
COX 0:b06425bd412a 332 if (button_status[UP_KEY])
COX 0:b06425bd412a 333 {
COX 0:b06425bd412a 334 button_status[UP_KEY] = 0;
COX 0:b06425bd412a 335 redraw = 1;
COX 0:b06425bd412a 336 if(rgb_menu_item == 0)
COX 0:b06425bd412a 337 rgb_menu_item = 2;
COX 0:b06425bd412a 338 else
COX 0:b06425bd412a 339 rgb_menu_item--;
COX 0:b06425bd412a 340 }
COX 0:b06425bd412a 341 if (button_status[DOWN_KEY])
COX 0:b06425bd412a 342 {
COX 0:b06425bd412a 343 button_status[DOWN_KEY] = 0;
COX 0:b06425bd412a 344 redraw = 1;
COX 0:b06425bd412a 345 if(rgb_menu_item == 2)
COX 0:b06425bd412a 346 rgb_menu_item = 0;
COX 0:b06425bd412a 347 else
COX 0:b06425bd412a 348 rgb_menu_item++;
COX 0:b06425bd412a 349 }
COX 0:b06425bd412a 350
COX 0:b06425bd412a 351 if (button_status[CENTER_KEY])
COX 0:b06425bd412a 352 {
COX 0:b06425bd412a 353 button_status[CENTER_KEY] = 0;
COX 0:b06425bd412a 354 break;
COX 0:b06425bd412a 355 }
COX 0:b06425bd412a 356 }
COX 0:b06425bd412a 357 }
COX 0:b06425bd412a 358
COX 0:b06425bd412a 359 void charmap(){
COX 0:b06425bd412a 360 char i,j;
COX 0:b06425bd412a 361 for(i=0; i<5; i++){
COX 0:b06425bd412a 362 for(j=0; j<14; j++){
COX 0:b06425bd412a 363 lcd.LCD_set_XY(j*6,i);
COX 0:b06425bd412a 364 lcd.LCD_write_char(i*14+j+32, MENU_NORMAL);
COX 0:b06425bd412a 365 }
COX 0:b06425bd412a 366 }
COX 0:b06425bd412a 367 waitfor_OKkey();
COX 0:b06425bd412a 368 }
COX 0:b06425bd412a 369
COX 0:b06425bd412a 370 void bitmap(){
COX 0:b06425bd412a 371 lcd.LCD_draw_bmp_pixel(0,0, demo_bmp, 84,40);
COX 0:b06425bd412a 372 //lcd.LCD_write_chinese(6,3, DFrobot_chinese,12,6,0,0);
COX 0:b06425bd412a 373 waitfor_OKkey();
COX 0:b06425bd412a 374 }
COX 0:b06425bd412a 375
COX 0:b06425bd412a 376 void accelerometer(){
COX 0:b06425bd412a 377 while(1)
COX 0:b06425bd412a 378 {
COX 0:b06425bd412a 379 x = abs(acc.getAccX());
COX 0:b06425bd412a 380 y = abs(acc.getAccY());
COX 0:b06425bd412a 381 z = abs(acc.getAccZ());
COX 0:b06425bd412a 382 wait(0.1);
COX 0:b06425bd412a 383 lcd.LCD_set_XY(5,2);
COX 0:b06425bd412a 384 lcd.LCD_write_char(48+int(x),MENU_NORMAL);
COX 0:b06425bd412a 385 lcd.LCD_write_char('.',MENU_NORMAL);
COX 0:b06425bd412a 386 lcd.LCD_write_char(48+int((x-int(x))*10),MENU_NORMAL);
COX 0:b06425bd412a 387 lcd.LCD_set_XY(32,2);
COX 0:b06425bd412a 388 lcd.LCD_write_char(48+int(y),MENU_NORMAL);
COX 0:b06425bd412a 389 lcd.LCD_write_char('.',MENU_NORMAL);
COX 0:b06425bd412a 390 lcd.LCD_write_char(48+int((y-int(y))*10),MENU_NORMAL);
COX 0:b06425bd412a 391 lcd.LCD_set_XY(59,2);
COX 0:b06425bd412a 392 lcd.LCD_write_char(48+int(z),MENU_NORMAL);
COX 0:b06425bd412a 393 lcd.LCD_write_char('.',MENU_NORMAL);
COX 0:b06425bd412a 394 lcd.LCD_write_char(48+int((z-int(z))*10),MENU_NORMAL);
COX 0:b06425bd412a 395 if (button_status[CENTER_KEY])
COX 0:b06425bd412a 396 {
COX 0:b06425bd412a 397 button_status[CENTER_KEY] = 0;
COX 0:b06425bd412a 398 break;
COX 0:b06425bd412a 399 }
COX 0:b06425bd412a 400 }
COX 0:b06425bd412a 401 }
COX 0:b06425bd412a 402 void about(){
COX 0:b06425bd412a 403 lcd.LCD_write_string( 0, 1, "LCD4884 Shield", MENU_NORMAL);
COX 0:b06425bd412a 404 lcd.LCD_write_string( 0, 3, "sainsmart.com", MENU_NORMAL);
COX 0:b06425bd412a 405 waitfor_OKkey();
COX 0:b06425bd412a 406 }
COX 0:b06425bd412a 407
COX 0:b06425bd412a 408 // which includes DEBOUNCE ON/OFF mechanism, and continuous pressing detection
COX 0:b06425bd412a 409 // Convert ADC value to key number
COX 0:b06425bd412a 410
COX 0:b06425bd412a 411 char get_key(float input)
COX 0:b06425bd412a 412 {
COX 0:b06425bd412a 413 char k;
COX 0:b06425bd412a 414
COX 0:b06425bd412a 415 for (k = 0; k < NUM_KEYS; k++)
COX 0:b06425bd412a 416 {
COX 0:b06425bd412a 417 if (input < adc_key_val[k])
COX 0:b06425bd412a 418 {
COX 0:b06425bd412a 419 return k;
COX 0:b06425bd412a 420 }
COX 0:b06425bd412a 421 }
COX 0:b06425bd412a 422 if (k >= NUM_KEYS)
COX 0:b06425bd412a 423 k = NUM_KEYS; // No valid key pressed
COX 0:b06425bd412a 424
COX 0:b06425bd412a 425 return k;
COX 0:b06425bd412a 426 }
COX 0:b06425bd412a 427
COX 0:b06425bd412a 428 //poor attempt at a debounce mechanism.
COX 0:b06425bd412a 429 void update_adc_key(){
COX 0:b06425bd412a 430 float adc_key_in;
COX 0:b06425bd412a 431 char key_in;
COX 0:b06425bd412a 432 char i;
COX 0:b06425bd412a 433
COX 0:b06425bd412a 434 //TestPin2 = HIGH;
COX 0:b06425bd412a 435
COX 0:b06425bd412a 436 adc_key_in = JStick.read();
COX 0:b06425bd412a 437
COX 0:b06425bd412a 438 key_in = get_key(adc_key_in);
COX 0:b06425bd412a 439 for(i=0; i<NUM_KEYS; i++)
COX 0:b06425bd412a 440 {
COX 0:b06425bd412a 441 if(key_in == i) //one key is pressed
COX 0:b06425bd412a 442 {
COX 0:b06425bd412a 443 if(button_count[i] < DEBOUNCE_MAX) button_count[i]++;
COX 0:b06425bd412a 444 if(button_count[i] == DEBOUNCE_MAX){
COX 0:b06425bd412a 445 button_status[i] = 1;
COX 0:b06425bd412a 446 button_count[i] = 1;
COX 0:b06425bd412a 447 JStickReadSpeed = 0.200;
COX 0:b06425bd412a 448 }
COX 0:b06425bd412a 449 }
COX 0:b06425bd412a 450 else // no button pressed
COX 0:b06425bd412a 451 {
COX 0:b06425bd412a 452 if(button_count[i] > 0) button_count[i]--;
COX 0:b06425bd412a 453 if(button_count[i] == 0){
COX 0:b06425bd412a 454 button_status[i] = 0;
COX 0:b06425bd412a 455 JStickReadSpeed = 0.015;
COX 0:b06425bd412a 456 }
COX 0:b06425bd412a 457 }
COX 0:b06425bd412a 458 }
COX 0:b06425bd412a 459
COX 0:b06425bd412a 460 readJStick.attach(&update_adc_key, JStickReadSpeed);
COX 0:b06425bd412a 461
COX 0:b06425bd412a 462 //TestPin2 = LOW;
COX 0:b06425bd412a 463
COX 0:b06425bd412a 464 }
COX 0:b06425bd412a 465
COX 0:b06425bd412a 466 int main(void)
COX 0:b06425bd412a 467 {
COX 0:b06425bd412a 468 lcd = LCD4884();
COX 0:b06425bd412a 469 setup();
COX 0:b06425bd412a 470 while(1) {
COX 0:b06425bd412a 471 //TestPin1 = HIGH;
COX 0:b06425bd412a 472 loop();
COX 0:b06425bd412a 473 //TestPin1 = LOW;
COX 0:b06425bd412a 474 };
COX 0:b06425bd412a 475 }