| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793 |
- /*
- SSD1607LutEdit.ino
- Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/)
- Copyright (c) 2016, olikraus@gmail.com
- All rights reserved.
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
- * Redistributions of source code must retain the above copyright notice, this list
- of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice, this
- list of conditions and the following disclaimer in the documentation and/or other
- materials provided with the distribution.
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- #include <Arduino.h>
- #include <U8g2lib.h>
- #ifdef U8X8_HAVE_HW_SPI
- #include <SPI.h>
- #endif
- #ifdef U8X8_HAVE_HW_I2C
- #include <Wire.h>
- #endif
- // display for the LUT editor
- U8G2_SH1106_128X64_NONAME_1_HW_I2C u8g2_editor(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
- // target e-paper device
- #define BUSY_PIN 0
- U8G2_SSD1607_200X200_1_4W_SW_SPI u8g2_epaper(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display
- //U8G2_SSD1607_V2_200X200_1_4W_SW_SPI u8g2_epaper(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display
- //#define BUSY_PIN 2
- //U8G2_IL3820_296X128_1_4W_SW_SPI u8g2_epaper(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // WaveShare 2.9 inch eInk/ePaper Display, enable 16 bit mode for this display!
- //U8G2_IL3820_V2_296X128_1_4W_SW_SPI u8g2_epaper(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // WaveShare 2.9 inch eInk/ePaper Display, enable 16 bit mode for this display!
- /*================================================*/
- /* lut editor */
- uint16_t lut_measured_duration = 0;
- #define LUT_ARRAY_LEN 20
- #define LUT_WAVE_CNT 4
- /*
- level
- 0: neutral, middle
- 1: upper line
- 2: lower line
-
- 00 black to black (upper line required)
- 01 black to white (lower line required)
- 10 white to black
- 11 white to white
-
- */
- uint8_t lut_level[LUT_WAVE_CNT][LUT_ARRAY_LEN];
- uint8_t lut_time[LUT_ARRAY_LEN];
- #define LUT_DY 3
- u8g2_uint_t cursor_x1, cursor_x2;
- uint8_t lut_time_to_width[16] =
- {
- 2, // 0
- 2, // 1
- 2, // 2
- 2, // 3
- 3, // 4
- 3, // 5
- 3, // 6
- 3, // 7
- 4, // 8
- 4, // 9
- 4, // 10
- 4, // 11
- 5, // 12
- 5, // 13
- 5, // 14
- 5, // 15
- };
- u8g2_uint_t get_dx(uint8_t i)
- {
- //return 5;
- return lut_time_to_width[lut_time[i]];
- }
- void read_lut(const uint8_t *lut)
- {
- uint8_t i;
- for ( i = 0; i < LUT_ARRAY_LEN; i++ )
- {
- lut_level[0][i] = lut[i] & 3;
- lut_level[1][i] = (lut[i]>>2) & 3;
- lut_level[2][i] = (lut[i]>>4) & 3;
- lut_level[3][i] = (lut[i]>>6) & 3;
-
- }
- for ( i = 0; i < LUT_ARRAY_LEN/2; i++ )
- {
- lut_time[i*2 + 0] = lut[LUT_ARRAY_LEN+i] & 15;
- lut_time[i*2 + 1] = (lut[LUT_ARRAY_LEN+i]>>4) & 15;
- }
- }
- void draw_lut_wave(u8g2_t *u8g2, uint8_t w, uint8_t cx, uint8_t is_cursor, u8g2_uint_t y)
- {
- uint8_t i;
- u8g2_uint_t x1, y1;
- u8g2_uint_t x2, y2;
- x1 = 18;
- y1 = y;
- u8g2_DrawGlyph(u8g2, 2,y+2, (w&2)?'1':'0');
- u8g2_DrawGlyph(u8g2, 8,y+2, (w&1)?'1':'0');
- for( i = 0; i < LUT_ARRAY_LEN; i++ )
- {
- x2 = x1 + get_dx(i);
- y2 = y;
- if ( lut_level[w][i] == 1)
- y2 -= LUT_DY-1;
- else if ( lut_level[w][i] == 2 )
- y2 += LUT_DY-1;
- if ( y1 != y2 )
- u8g2_DrawLine(u8g2, x1, y1, x1, y2);
- u8g2_DrawHLine(u8g2, x1, y2, x2-x1+1);
-
- if ( i == cx )
- {
- cursor_x1 = x1;
- cursor_x2 = x2;
- if ( is_cursor )
- {
- u8g2_DrawHLine(u8g2, x1, y-LUT_DY-1, x2-x1+1);
- u8g2_DrawHLine(u8g2, x1, y+LUT_DY+1, x2-x1+1);
- }
- }
-
- x1 = x2;
- y1 = y2;
- }
- }
- void draw_all_lut(u8g2_t *u8g2, uint8_t cx, uint8_t cy)
- {
- uint8_t i;
- uint16_t total;
- int16_t area;
- u8g2_uint_t x, y;
- u8g2_uint_t xs = 1;
- y = LUT_DY +1;
- for( i = 0; i < LUT_WAVE_CNT; i++ )
- {
- if ( i == cy )
- draw_lut_wave(u8g2, i, cx, 1, y);
- else
- draw_lut_wave(u8g2, i, cx, 0, y); // 255: no cursor
-
- y += (LUT_DY+2)*2;
- }
- total = 0;
- area = 0;
- if ( cy == LUT_WAVE_CNT )
- for( i = 0; i < LUT_ARRAY_LEN; i++ )
- total += lut_time[i];
- if ( cy < LUT_WAVE_CNT )
- {
- for( i = 0; i < LUT_ARRAY_LEN; i++ )
- {
- if ( lut_level[cy][i] == 1 )
- area += lut_time[i];
- else if ( lut_level[cy][i] == 2 )
- area -= lut_time[i];
- }
- }
- y+=1;
- if ( cy == LUT_WAVE_CNT )
- {
- u8g2_SetDrawColor(u8g2, 2);
- u8g2_DrawBox(u8g2, cursor_x1, 0, cursor_x2-cursor_x1+1, (LUT_DY+2)*2*4-1 );
-
- u8g2_SetDrawColor(u8g2, 0);
- }
- else
- {
- u8g2_SetDrawColor(u8g2, 1);
- }
- x = u8g2_DrawStr(u8g2, xs, y, " TP[");
- x += u8g2_DrawStr(u8g2, x, y, u8x8_u8toa( cx, 2));
- x += u8g2_DrawStr(u8g2, x, y, "]=");
- x += u8g2_DrawStr(u8g2, x, y, u8x8_u8toa( lut_time[cx], 2));
- x += u8g2_DrawStr(u8g2, x, y, " ");
- u8g2_SetDrawColor(u8g2, 1);
- x = 70;
-
- if ( cy == LUT_WAVE_CNT+1 )
- {
- if ( lut_measured_duration > 0 )
- {
- x = 60;
- x += u8g2_DrawStr(u8g2, x, y, "measure=");
- x += u8g2_DrawStr(u8g2, x, y, u8x8_u16toa( lut_measured_duration, 4));
- }
- }
- if ( cy == LUT_WAVE_CNT )
- {
- x += u8g2_DrawStr(u8g2, x, y, " total=");
- x += u8g2_DrawStr(u8g2, x, y, u8x8_u16toa( total, 3));
- x += u8g2_DrawStr(u8g2, x, y, " ");
- }
- else if ( cy < LUT_WAVE_CNT )
- {
- x += u8g2_DrawStr(u8g2, x, y, " area=");
- if ( area >= 0 )
- x += u8g2_DrawStr(u8g2, x, y, u8x8_u16toa( area, 3));
- else
- {
- x += u8g2_DrawStr(u8g2, x, y, "-");
- x += u8g2_DrawStr(u8g2, x, y, u8x8_u16toa( -area, 3));
- }
- x += u8g2_DrawStr(u8g2, x, y, " ");
- }
-
- y+=8;
- x = u8g2_DrawStr(u8g2, xs, y, "Test: ");
- if ( cy == LUT_WAVE_CNT+1 && (cx & 1) == 0 )
- {
- u8g2_SetDrawColor(u8g2, 0);
- }
- else
- {
- u8g2_SetDrawColor(u8g2, 1);
- }
- x += u8g2_DrawStr(u8g2, x, y, " New ");
-
- if ( cy == LUT_WAVE_CNT+1 && (cx & 1) != 0 )
- {
- u8g2_SetDrawColor(u8g2, 0);
- }
- else
- {
- u8g2_SetDrawColor(u8g2, 1);
- }
- x += u8g2_DrawStr(u8g2, x, y, " Old ");
-
- u8g2_SetDrawColor(u8g2, 1);
- //if ( lut_measured_duration > 0 )
- //{
- // x = 60;
- // x += u8g2_DrawStr(u8g2, x, y, "measure=");
- // x += u8g2_DrawStr(u8g2, x, y, u8x8_u16toa( lut_measured_duration, 4));
- //}
-
- y+=8;
- if ( cy == LUT_WAVE_CNT+2 )
- {
- u8g2_SetDrawColor(u8g2, 0);
- }
- else
- {
- u8g2_SetDrawColor(u8g2, 1);
- }
- x = u8g2_DrawStr(u8g2, xs, y, " Show Binary LUT ");
- u8g2_SetDrawColor(u8g2, 1);
- //extern uint16_t refresh_cnt;
- //u8g2_DrawStr(u8g2, 115, y, u8x8_u16toa( refresh_cnt, 2));
- }
- void init_lut(void)
- {
- uint8_t i, j;
- for( i = 0; i < LUT_ARRAY_LEN; i++ )
- {
- for( j = 0; j < LUT_WAVE_CNT; j++ )
- lut_level[j][i] = 0;
- lut_time[i] = 0;
- }
-
- }
- uint8_t edit_lut(u8g2_t *u8g2)
- {
- uint8_t event;
- uint8_t cx, cy;
- u8g2_SetFont(u8g2, u8g2_font_5x7_mr);
- u8g2_SetFontMode(u8g2, 0);
- u8g2_SetFontDirection(u8g2, 0);
- cx = 0;
- cy = 0;
- for(;;)
- {
- u8g2_FirstPage(u8g2);
- do
- {
- draw_all_lut(u8g2, cx, cy);
- } while( u8g2_NextPage(u8g2) );
- for(;;)
- {
- event = u8x8_GetMenuEvent(u8g2_GetU8x8(u8g2));
- if ( event == U8X8_MSG_GPIO_MENU_SELECT )
- {
- if ( cx < LUT_ARRAY_LEN && cy < LUT_WAVE_CNT )
- {
- lut_level[cy][cx]++;
- if ( lut_level[cy][cx] >= 3 )
- lut_level[cy][cx] = 0;
- }
- else if ( cy == LUT_WAVE_CNT )
- {
- lut_time[cx]++;
- if ( lut_time[cx] >= 16 )
- lut_time[cx] = 0;
- }
- else if ( cy == LUT_WAVE_CNT+1 )
- {
- if ( (cx & 1) == 0 )
- return 1; /* new waveform */
- return 2; /* old/buildin refresh waveform */
- }
- else if ( cy == LUT_WAVE_CNT+2 )
- {
- return 10; /* show lut */
- }
-
- break;
- }
- else if ( event == U8X8_MSG_GPIO_MENU_HOME )
- {
- if ( cy == LUT_WAVE_CNT )
- {
- if ( lut_time[cx] == 0 )
- lut_time[cx] = 16;
- lut_time[cx]--;
- }
- break;
- }
- else if ( event == U8X8_MSG_GPIO_MENU_NEXT )
- {
- cx++;
- if ( cx >= LUT_ARRAY_LEN )
- cx = 0;
- break;
- }
- else if ( event == U8X8_MSG_GPIO_MENU_DOWN )
- {
- cy++;
- if ( cy >= LUT_WAVE_CNT+3 )
- cy = 0;
- break;
- }
- else if ( event == U8X8_MSG_GPIO_MENU_PREV )
- {
- if ( cx == 0 )
- cx = LUT_ARRAY_LEN;
- cx--;
- break;
- }
- else if ( event == U8X8_MSG_GPIO_MENU_UP )
- {
- if ( cy == 0 )
- cy = LUT_WAVE_CNT+3;
- cy--;
- break;
- }
- }
- }
- return 0;
- }
- /* send lut to the target eink device (given by u8x8_t *) */
- void write_to_lut_register(u8x8_t *epaper)
- {
- uint8_t i;
- uint8_t b;
- u8x8_cad_StartTransfer(epaper);
-
- u8x8_cad_SendCmd(epaper, 0x032);
- for ( i = 0; i < LUT_ARRAY_LEN; i++ )
- {
- b = lut_level[0][i];
- b |= lut_level[1][i]<<2;
- b |= lut_level[2][i]<<4;
- b |= lut_level[3][i]<<6;
- u8x8_cad_SendArg(epaper, b);
- }
- for ( i = 0; i < LUT_ARRAY_LEN/2; i++ )
- {
- b = lut_time[i*2 + 0];
- b |= lut_time[i*2 + 1] << 4;
- u8x8_cad_SendArg(epaper, b);
- }
- u8x8_cad_EndTransfer(epaper);
- }
- /*================================================*/
- /*================================================*/
- /* epaper test */
- uint8_t is_enable_hook;
- uint8_t (*u8x8_d_original)(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);
- /* the purpose of this hook function is to replace the REFRESH code by our own function */
- uint8_t u8x8_d_test_hook(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)
- {
- volatile uint32_t start, curr, end;
- volatile uint16_t v;
- if ( is_enable_hook )
- {
- if ( msg == U8X8_MSG_DISPLAY_REFRESH )
- {
- u8x8_cad_StartTransfer(u8x8);
- u8x8_cad_SendCmd(u8x8, 0x022); // program update sequence
- u8x8_cad_SendArg(u8x8, 0x004); // define sequence
- // 0x0c4: clk -> CP -> LUT -> pattern display
- u8x8_cad_SendCmd(u8x8, 0x020); // execute
- start =millis();
- end = start + 4000;
- //pinMode(A2, INPUT);
- delay(10);
- for(;;)
- {
- v = analogRead(BUSY_PIN);
- curr = millis();
- if ( v < 300 )
- break;
- if ( curr > end )
- break;
- }
- lut_measured_duration = curr-start;
- u8x8_cad_EndTransfer(u8x8);
- return 1;
- }
- }
- return u8x8_d_original(u8x8, msg, arg_int, arg_ptr);
- }
- void test_lut(u8g2_t *u8g2)
- {
- u8g2_epaper.setPowerSave(0);
- u8g2_FirstPage(u8g2);
- do
- {
- u8g2_DrawStr(u8g2, 0, 20, "Test LUT, Page 1");
- } while( u8g2_NextPage(u8g2) );
- u8g2_epaper.firstPage();
- do {
- u8g2_epaper.setFont(u8g2_font_ncenB14_tr);
- u8g2_epaper.drawStr(0,20,"11111111111111111111111111");
- u8g2_epaper.drawStr(0,40,"ABCDEFGHIJKLMNOPQRSTUVWXYZ");
- u8g2_epaper.drawBox(10, 60, 60, 30);
- u8g2_epaper.drawFrame(50, 70, 60, 40);
-
- u8g2_epaper.drawBox(110+10, 60, 60, 30);
-
- } while ( u8g2_epaper.nextPage() );
- delay(3000);
- u8g2_FirstPage(u8g2);
- do
- {
- u8g2_DrawStr(u8g2, 0, 20, "Test LUT, Page 2");
- u8g2_DrawStr(u8g2, 0, 40, u8x8_u16toa( lut_measured_duration, 4));
-
- } while( u8g2_NextPage(u8g2) );
- u8g2_epaper.firstPage();
- do {
- u8g2_epaper.setFont(u8g2_font_ncenB14_tr);
- u8g2_epaper.drawStr(0,20,"22222222222222222222222222");
- u8g2_epaper.drawStr(0,40,"ABCDEFGHIJKLMNOPQRSTUVWXYZ");
- u8g2_epaper.drawFrame(10, 60, 60, 30);
- u8g2_epaper.drawBox(50, 70, 60, 40);
-
- u8g2_epaper.drawBox(150+10, 70, 60, 40);
- } while ( u8g2_epaper.nextPage() );
- delay(3000);
- u8g2_FirstPage(u8g2);
- do
- {
- u8g2_DrawStr(u8g2, 0, 20, "Test LUT, Page 3");
- u8g2_DrawStr(u8g2, 0, 40, u8x8_u16toa( lut_measured_duration, 4));
-
- } while( u8g2_NextPage(u8g2) );
- u8g2_epaper.firstPage();
- do {
- u8g2_epaper.setFont(u8g2_font_ncenB14_tr);
- u8g2_epaper.drawStr(0,20,"33333333333333333333333333");
- u8g2_epaper.drawStr(0,40,"ABCDEFGHIJKLMNOPQRSTUVWXYZ");
-
- u8g2_epaper.drawBox(10, 60, 60, 30);
- u8g2_epaper.drawFrame(50, 70, 60, 40);
-
- u8g2_epaper.drawBox(110+10, 60, 60, 30);
- } while ( u8g2_epaper.nextPage() );
- u8g2_epaper.setPowerSave(1);
- delay(3000);
- }
- /*================================================*/
- /* send lut to the target eink device (given by u8x8_t *) */
- void show_lut_on_editor(void)
- {
- uint8_t i;
- uint8_t b;
- u8g2_uint_t x, y;
- x = 0;
- y = 0;
- for ( i = 0; i < LUT_ARRAY_LEN; i++ )
- {
- b = lut_level[0][i];
- b |= lut_level[1][i]<<2;
- b |= lut_level[2][i]<<4;
- b |= lut_level[3][i]<<6;
- u8g2_editor.setCursor(x*20, y*8+8);
- u8g2_editor.print(b, HEX);
- x++;
- if ( x >= 5 )
- {
- x = 0;
- y++;
- }
- }
-
- x = 0;
- y++;
-
- for ( i = 0; i < LUT_ARRAY_LEN/2; i++ )
- {
- b = lut_time[i*2 + 0];
- b |= lut_time[i*2 + 1] << 4;
- u8g2_editor.setCursor(x*20, y*8+8);
- u8g2_editor.print(b, HEX);
- x++;
- if ( x >= 5 )
- {
- x = 0;
- y++;
- }
- }
- }
- /*================================================*/
- /* arduino setup & loop */
- const uint8_t LUTDefault_full[31] =
- {
- 0x50, 0xAA, 0x55, 0xAA, 0x11,
- 0x11, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xFF, 0xFF, 0x3F, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00
- };
- // same as LUTDefault_full, but dubled size
- const uint8_t w01[30] =
- {
- 0x00, 0x00, 0x44, 0xaa, 0xaa,
- 0x55, 0x55, 0xaa, 0xaa, 0x11,
- 0x11, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0xff, 0xff, 0xff, 0xff,
- 0x0f, 0x00, 0x00, 0x00, 0x00
- };
- // same as w01, but timing adjisted, should be identical to LUTDefault_full
- const uint8_t w02[30] =
- {
- 0x00, 0x00, 0x44, 0xaa, 0xaa,
- 0x55, 0x55, 0xaa, 0xaa, 0x11,
- 0x11, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x11, 0x5a, 0x5a, 0x5a, 0x5a,
- 0x0a, 0x00, 0x00, 0x00, 0x00
- };
- // speed optimized, lesser flickering version
- // ticks=71
- // measued=1441ms
- const uint8_t w03[30] =
- {
- 0x00, 0x40, 0x04, 0xa6, 0xa8,
- 0x65, 0x19, 0xaa, 0x98, 0x11,
- 0x11, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x20, 0x26, 0x26, 0x26, 0xff,
- 0x0f, 0x00, 0x00, 0x00, 0x00
- };
- // speed optimized, lesser flickering version
- // ticks=71
- // measued=1441ms
- const uint8_t w04[30] =
- {
- 0x00, 0x88, 0x88, 0x88, 0x98,
- 0x99, 0x99, 0x99, 0x11, 0x11,
- 0x11, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x77, 0x77, 0x77, 0x77, 0x77,
- 0x00, 0x00, 0x00, 0x00, 0x00
- };
- // speed optimized, no (?) flickering version
- const uint8_t w05[30] =
- {
- 0xaa, 0x55, 0x55, 0x55, 0x99,
- 0x99, 0x99, 0x99, 0x99, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x77, 0x77, 0x77, 0x77, 0x07,
- 0x00, 0x00, 0x00, 0x00, 0x00
- };
- /*
- Duration: 1240 ms
- Initial white pulse:
- - Required for white-white so that white stays white (pulse can be as low as 2 ticks)
- - On black-black to ensure long term stbility (pulse should be 4 or higher for
- long term stability)
- - Pulse should be short, to avoid flicker
- - Long enough for the black-black transition
- White pixel (black-white transition)
- - Starts at the beginning. Looks like a black pulse is not required.
- - White low level must stop before the black pixel are finished
- Black pixel (black-black and white-black)
- - Black (high level) is extended. If the black level is applied longer, the contrast
- gets better.
- - There must be no white pixel write otherwise contrast will be bad: Writing
- black is put at the end and starts in the middle
-
- */
- /*
- U8X8_A(0x02),
- U8X8_A(0x02),
- U8X8_A(0x01),
- U8X8_A(0x11),
- U8X8_A(0x12),
- U8X8_A(0x12),
- U8X8_A(0x22),
- U8X8_A(0x22),
- U8X8_A(0x66),
- U8X8_A(0x69),
- U8X8_A(0x69),
- U8X8_A(0x59),
- U8X8_A(0x58),
- U8X8_A(0x99),
- U8X8_A(0x99),
- U8X8_A(0x88),
- U8X8_A(0x00),
- U8X8_A(0x00),
- U8X8_A(0x00),
- U8X8_A(0x00),
- U8X8_A(0xF8),
- U8X8_A(0xB4),
- U8X8_A(0x13),
- U8X8_A(0x51),
- U8X8_A(0x35),
- U8X8_A(0x51),
- U8X8_A(0x51),
- U8X8_A(0x19),
- U8X8_A(0x01),
- U8X8_A(0x00),
- */
- const uint8_t w06[30] =
- {
- 0x02, 0x02, 0x01, 0x11, 0x12,
- 0x12, 0x12, 0x22, 0x22, 0x66,
- 0x69, 0x59, 0x58, 0x99, 0x99,
- 0x88, 0x00, 0x00, 0x00, 0x00,
- 0xf8, 0xb4, 0x13, 0x51, 0x35,
- 0x51, 0x51, 0xe9, 0x04, 0x00
- };
- void setup(void)
- {
- u8g2_editor.begin(/* menu_select_pin= */ 2, /* menu_next_pin= */ 4, /* menu_prev_pin= */ 7, /* menu_up_pin= */ 6, /* menu_down_pin= */ 5, /* menu_home_pin= */ 3);
- u8g2_editor.setFont(u8g2_font_5x7_mr);
- u8g2_editor.setFontMode(0);
- u8g2_editor.setFontDirection(0);
-
-
- u8g2_epaper.begin();
- u8g2_epaper.setPowerSave(0);
-
- u8x8_d_original = u8g2_epaper.getU8x8()->display_cb; // get the original display function and..
- u8g2_epaper.getU8x8()->display_cb = u8x8_d_test_hook; // ...replace it with our hook function
- init_lut();
- //read_lut(LUTDefault_full);
- read_lut(w06);
- }
- void loop(void)
- {
- uint8_t cmd;
-
- cmd = edit_lut(u8g2_editor.getU8g2());
-
- switch( cmd )
- {
- case 1: /* test new lut */
- is_enable_hook = 1;
- u8g2_epaper.setPowerSave(0);
- write_to_lut_register(u8g2_epaper.getU8x8());
- test_lut(u8g2_editor.getU8g2());
- break;
- case 2: /* test old, existing lut */
- is_enable_hook = 0;
- u8g2_epaper.initDisplay();
- u8g2_epaper.setPowerSave(0);
- test_lut(u8g2_editor.getU8g2());
- break;
- case 10:
- u8g2_editor.firstPage();
- do {
- show_lut_on_editor();
- } while ( u8g2_editor.nextPage() );
- while( u8g2_editor.getMenuEvent() == 0 )
- ;
- }
- }
|