====== Projekt 5 Graafiline LCD ekraan (3 näidet) ====== \\ ===== Näide #5.1 Teksti kuvamine ekraanil ===== //Lisame vajalikud teegid #include "U8glib.h" //lcd objekti tekitamine U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8 void setup(void) { u8g.setContrast(0); // seadsita ekraani kontrastsus (LCD plaadist sõltuv) u8g.setRot180();// pööra ekraani 180 kraadi (LCD plaadist sõltuv) u8g.setFont(u8g_font_gdr14); //sea teksti font } void loop(void) { u8g.firstPage(); //Clear screen and start from zero point while ( u8g.nextPage() == 1 )u8g.drawStr( 8, 35, "Hello World"); } ===== Näide #5.2 Logo kuvamine ekraanil ===== {{:et:arduino:sensorss:logo_example.jpg?300|}} Näide demonstreerib logo kuvamist graafilisel ekraanil. Selleks on vaja kõigepealt tekitada //bitmap// massiiv, mis määrab ära millised pikslid kuvatakse ekraanil. [[http://en.radzio.dxp.pl/bitmap_converter/|Bitmap konverter]] //Lisame vajalikud teegid #include "U8glib.h" //lcd objekti tekitamine U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8 const uint8_t logo [] PROGMEM = { 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, 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, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0xFC, 0x7F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0xFC, 0x7F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0xFC, 0x7F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x0C, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x0C, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x0C, 0x5F, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x0C, 0x7F, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x0C, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x0C, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x0C, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x0C, 0x7F, 0x8F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x0C, 0x7F, 0x8F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x0C, 0x43, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x0C, 0x43, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x0C, 0x43, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x0C, 0x43, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x0C, 0x43, 0x88, 0x7B, 0xFF, 0xFF, 0xE0, 0x0F, 0xE3, 0xFC, 0x07, 0xE0, 0xF1, 0xE7, 0xF8, 0x62, 0x0C, 0x43, 0x88, 0x7B, 0xFF, 0xFF, 0xE0, 0x3F, 0xF3, 0xFE, 0x1F, 0xF8, 0xF1, 0xE7, 0xFC, 0x62, 0x0C, 0x43, 0x88, 0x7B, 0xFF, 0xFF, 0xE0, 0x3F, 0xE3, 0xFF, 0x3F, 0xF8, 0xF1, 0xE7, 0xFE, 0x7E, 0x0C, 0x43, 0x88, 0x7D, 0xFF, 0xFF, 0xE0, 0x7E, 0x63, 0xDF, 0x3E, 0x7C, 0xF1, 0xE7, 0xFE, 0x00, 0x0C, 0x43, 0x88, 0x7C, 0x3C, 0x0F, 0x00, 0x78, 0x03, 0xCF, 0x3C, 0x3C, 0xF1, 0xE7, 0x9E, 0x00, 0x0C, 0x43, 0x88, 0x7C, 0x3C, 0x0F, 0x00, 0xFB, 0xF3, 0xFF, 0x7C, 0x3C, 0xF1, 0xE7, 0xBE, 0x00, 0x0C, 0x43, 0x88, 0x7C, 0x3C, 0x0F, 0x00, 0xFB, 0xF3, 0xFE, 0x7C, 0x3C, 0xF1, 0xE7, 0xFE, 0x00, 0x0C, 0x43, 0x88, 0x7C, 0x3C, 0x0F, 0x00, 0xFB, 0xF3, 0xFC, 0x7C, 0x3C, 0xF1, 0xE7, 0xFC, 0x00, 0x0C, 0x43, 0x88, 0x7C, 0x3C, 0x0F, 0x00, 0x7B, 0xF3, 0xFE, 0x3C, 0x3C, 0xF1, 0xE7, 0xF8, 0x00, 0x0C, 0x43, 0x88, 0x7C, 0x3C, 0x0F, 0x00, 0x7C, 0xF3, 0xDE, 0x3E, 0x7C, 0xF9, 0xE7, 0x80, 0x00, 0x0C, 0x43, 0x88, 0x7C, 0x3C, 0x0F, 0x00, 0x7F, 0xF3, 0xDF, 0x3F, 0xFC, 0xFF, 0xE7, 0x80, 0x00, 0x0C, 0x43, 0x88, 0x7C, 0x3C, 0x0F, 0x00, 0x3F, 0xF3, 0xCF, 0x9F, 0xF8, 0x7F, 0xC7, 0x80, 0x00, 0x0F, 0xC3, 0x88, 0x7C, 0x3C, 0x0F, 0x00, 0x1F, 0xF3, 0xC7, 0x8F, 0xF0, 0x3F, 0x87, 0x80, 0x00, 0x03, 0xC3, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x88, 0x7B, 0xAF, 0x3F, 0xFB, 0xBA, 0xC3, 0xFA, 0xEA, 0xE1, 0xFE, 0xAE, 0xA8, 0x00, 0x00, 0x03, 0x88, 0x7B, 0xAB, 0xFB, 0xCE, 0xAB, 0xC0, 0xA6, 0xAB, 0x80, 0xD2, 0xBE, 0xD8, 0x00, 0x00, 0x03, 0x88, 0x7B, 0xFB, 0xFB, 0x4E, 0xEF, 0xC1, 0xB6, 0xBA, 0x80, 0xDB, 0xBE, 0xD8, 0x00, 0x00, 0x03, 0x88, 0x7F, 0xFA, 0xDF, 0x6E, 0xEF, 0xDD, 0xB7, 0xBB, 0x6C, 0xDB, 0xBE, 0xDC, 0x00, 0x00, 0x03, 0x88, 0x77, 0xFA, 0xF7, 0x3E, 0xAA, 0xD9, 0xA5, 0xBB, 0x2C, 0xD2, 0xAE, 0xD4, 0x00, 0x00, 0x03, 0x88, 0x77, 0xAE, 0xF7, 0xFB, 0xBA, 0xC1, 0xBD, 0xEE, 0xE0, 0xDE, 0xAE, 0xB4, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x04, 0x00, 0x41, 0x10, 0x00, 0x18, 0x44, 0xC0, 0x18, 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, 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, 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, 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, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; void setup(void) { u8g.setContrast(0); // seadsita ekraani kontrastsus (LCD plaadist sõltuv) u8g.setRot180();// pööra ekraani 180 kraadi (LCD plaadist sõltuv) u8g.setFont(u8g_font_gdr14); //sea teksti font } void loop(void) { u8g.firstPage(); //puhasta ekraan while ( u8g.nextPage() == 1 ){ u8g.drawBitmapP( 0, 0, 16, 64, logo); //joonista ekraanile pilt //(x-koordinaat, y-koordinaat, horisontaalsete baitide arv, vertikaalsete ridade arv, joonistatava pildi massiiv) } } ===== Näide #5.3 Kujunduse tekitamine ja andurite kuvamine ekraanil ===== {{:et:arduino:sensorss:menu_example2.jpg?400|}} /* # This sample codes is for testing the LCD12864 shield. # Editor : Mickey # Date : 2013.11.27 # Ver : 0.1 # Product: LCD12864 shield # SKU : DFR0287 */ #include "U8glib.h" // setup u8g object, please remove comment from one of the following constructor calls // IMPORTANT NOTE: The complete list of supported devices is here: http://code.google.com/p/u8glib/wiki/device U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8 #define KEY_NONE 0 #define KEY_PREV 1 #define KEY_NEXT 2 #define KEY_SELECT 3 #define KEY_BACK 4 uint8_t uiKeyCodeFirst = KEY_NONE; uint8_t uiKeyCodeSecond = KEY_NONE; uint8_t uiKeyCode = KEY_NONE; int adc_key_in; int key=-1; int oldkey=-1; // Convert ADC value to key number // 4 // | // 0 -- 1 -- 3 // | // 2 int get_key(unsigned int input) { if (input < 100) return 0; else if (input < 300) return 1; else if (input < 500) return 2; else if (input < 700) return 3; else if (input < 900) return 4; else return -1; } void uiStep(void) { adc_key_in = analogRead(0); // read the value from the sensor key = get_key(adc_key_in); // convert into key press if (key != oldkey) // if keypress is detected { delay(50); // wait for debounce time adc_key_in = analogRead(0); // read the value from the sensor key = get_key(adc_key_in); // convert into key press if (key != oldkey) { oldkey = key; if (key >=0){ //Serial.println(key); if ( key == 0 ) uiKeyCodeFirst = KEY_BACK; else if ( key == 1 ) uiKeyCodeFirst = KEY_SELECT; else if ( key == 2 ) uiKeyCodeFirst = KEY_NEXT; else if ( key == 4 ) uiKeyCodeFirst = KEY_PREV; else uiKeyCodeFirst = KEY_NONE; uiKeyCode = uiKeyCodeFirst; } } } delay(100); } #define MENU_ITEMS 6 char *menu_strings[MENU_ITEMS] = { "ITT Group OU", "www.ittgroup.ee", "Akadeemia tee 21", "B-127" ,"Tallinn 12618","Tel. 6566614"}; uint8_t menu_current = 0; uint8_t menu_redraw_required = 0; uint8_t last_key_code = KEY_NONE; void drawMenu(void) { uint8_t i, h; u8g_uint_t w, d; u8g.setFont(u8g_font_6x12);//4x6 5x7 5x8 6x10 6x12 6x13 u8g.setFontRefHeightText(); u8g.setFontPosTop(); h = u8g.getFontAscent()-u8g.getFontDescent(); w = u8g.getWidth(); for( i = 0; i < MENU_ITEMS; i++ ) { d = (w-u8g.getStrWidth(menu_strings[i]))/2; u8g.setDefaultForegroundColor(); if ( i == menu_current ) { u8g.drawBox(0, i*h+1, w, h); u8g.setDefaultBackgroundColor(); } u8g.drawStr(d, i*h+1, menu_strings[i]); } } void updateMenu(void) { switch ( uiKeyCode ) { case KEY_NEXT: menu_current++; if ( menu_current >= MENU_ITEMS )menu_current = 0; menu_redraw_required = 1; break; case KEY_PREV: if ( menu_current == 0 )menu_current = MENU_ITEMS; menu_current--; menu_redraw_required = 1; break; } uiKeyCode = KEY_NONE; } void setup() { u8g.setRot180();// rotate screen, if required u8g.setContrast(0); // seadsita ekraani kontrastsus (LCD plaadist sõltuv) menu_redraw_required = 1; // force initial redraw //Serial.begin(9600); } void loop() { uiStep(); // check for key press updateMenu(); // update menu bar if ( menu_redraw_required != 0 ) { u8g.firstPage(); do { drawMenu(); } while( u8g.nextPage() ); menu_redraw_required = 0; } } \\ === Harjutus #5.1 === Muuta näiteprogrammi nii, et ekraanil kuvatakse kolmes erinevas stiilis (font) ühte teksti. === Harjutus #5.1 === Konverteerida vabal valitud pilt ekraanile sobilikuks massiiviks ja kuvada see ekraanile. Kasutada konverterit: [[http://en.radzio.dxp.pl/bitmap_converter/|Bitmap konverter]] === Harjutus #5.1 === Muuta näiteprogrammi nii, et nupu vajutamisel muutub aktiivse menüüelemendi kuvamise viis.