From a2857b8bd435cccda7c18c81c740fbd10e069114 Mon Sep 17 00:00:00 2001 From: nopnop2002 Date: Tue, 17 Sep 2024 15:09:31 +0900 Subject: [PATCH] refactored --- .../{highway0.jpg => highway_width0.jpg} | Bin .../{highway1.jpg => highway_width1.jpg} | Bin CarRaceDemo/image/highway_width2.jpg | Bin 0 -> 51385 bytes CarRaceDemo/image/mkimage.sh | 2 +- CarRaceDemo/main/main.c | 173 +++++++++++------- 5 files changed, 104 insertions(+), 71 deletions(-) rename CarRaceDemo/image/{highway0.jpg => highway_width0.jpg} (100%) rename CarRaceDemo/image/{highway1.jpg => highway_width1.jpg} (100%) create mode 100644 CarRaceDemo/image/highway_width2.jpg diff --git a/CarRaceDemo/image/highway0.jpg b/CarRaceDemo/image/highway_width0.jpg similarity index 100% rename from CarRaceDemo/image/highway0.jpg rename to CarRaceDemo/image/highway_width0.jpg diff --git a/CarRaceDemo/image/highway1.jpg b/CarRaceDemo/image/highway_width1.jpg similarity index 100% rename from CarRaceDemo/image/highway1.jpg rename to CarRaceDemo/image/highway_width1.jpg diff --git a/CarRaceDemo/image/highway_width2.jpg b/CarRaceDemo/image/highway_width2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f4b46ff95d4d23956b31d075ef3dfbdf35314b8b GIT binary patch literal 51385 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 CI77Dp literal 0 HcmV?d00001 diff --git a/CarRaceDemo/image/mkimage.sh b/CarRaceDemo/image/mkimage.sh index 611e357..21f30c4 100644 --- a/CarRaceDemo/image/mkimage.sh +++ b/CarRaceDemo/image/mkimage.sh @@ -43,4 +43,4 @@ convert highway_width.jpg _highway91.jpg -gravity northwest -geometry +79+0 -com convert highway_width.jpg _highway71.jpg -gravity northwest -geometry +83+0 -compose over -composite highway_width.jpg # Split image in half -convert highway_width.jpg -crop 128x64+0+0 highway0.jpg +convert highway_width.jpg -crop 128x64+0+0 highway_width0.jpg diff --git a/CarRaceDemo/main/main.c b/CarRaceDemo/main/main.c index 2fb0516..fe71d07 100644 --- a/CarRaceDemo/main/main.c +++ b/CarRaceDemo/main/main.c @@ -28,8 +28,8 @@ #define TAG "SSD1306" -uint8_t highway1[] = { -// 'highway1', 128x64px +uint8_t highway_width1[] = { +// 'highway_width1', 128x64px 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x1c, 0x00, 0x02, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x38, 0xff, 0xfe, 0x5c, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0x80, 0x00, 0x3a, 0x7f, @@ -96,75 +96,74 @@ uint8_t highway1[] = { 0xcf, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xf9 }; -uint8_t highway0[] = { -// 'highway0', 128x64px +uint8_t highway_width2[] = { +// 'highway_width2', 128x64px 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, -0xff, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x40, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xff, +0xff, 0x9c, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x39, 0xff, +0xff, 0x5c, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0x80, 0x00, 0x3a, 0xff, +0xfe, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0x7f, +0xfd, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xbf, +0xfb, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xdf, +0xf7, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xef, +0xef, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xf7, +0xdf, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xfb, +0xbf, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xfd, 0xff, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xff, 0xff, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xff, +0xff, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0xff, +0xff, 0x5c, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3a, 0xff, +0xfe, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0x7f, +0xfd, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xbf, +0xfb, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xdf, +0xf7, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xe7, +0xef, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xf3, +0xdf, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xf9, +0xbf, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xfc, +0xff, 0xdc, 0x00, 0x01, 0xfc, 0x00, 0xfe, 0x00, 0x7f, 0x00, 0x3f, 0x80, 0x3f, 0x80, 0x3b, 0xfe, +0xff, 0xdc, 0x00, 0x01, 0xfc, 0x00, 0xfe, 0x00, 0x7f, 0x00, 0x3f, 0x80, 0x3f, 0x80, 0x3b, 0xff, +0xff, 0x9c, 0x00, 0x01, 0xfc, 0x00, 0xfe, 0x00, 0x7f, 0x00, 0x3f, 0x80, 0x3f, 0x80, 0x39, 0xff, +0xff, 0x5c, 0x00, 0x01, 0xfc, 0x00, 0xfe, 0x00, 0x7f, 0x00, 0x3f, 0x80, 0x3f, 0x80, 0x3a, 0xff, +0xfe, 0xdc, 0x00, 0x01, 0xfc, 0x00, 0xfe, 0x00, 0x7f, 0x00, 0x3f, 0x80, 0x3f, 0x80, 0x3b, 0x7f, +0xfd, 0xdc, 0x00, 0x01, 0xfc, 0x00, 0xfe, 0x00, 0x7f, 0x00, 0x3f, 0x80, 0x3f, 0x80, 0x3b, 0x9f, +0xfb, 0xdc, 0x00, 0x01, 0xfc, 0x00, 0xfe, 0x00, 0x7f, 0x00, 0x3f, 0x80, 0x3f, 0x80, 0x3b, 0xdf, +0xf7, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x40, 0x00, 0x3b, 0xe7, +0xef, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xf3, +0xdf, 0xdc, 0x03, 0xfe, 0x01, 0xff, 0x00, 0xff, 0x80, 0x7f, 0xc0, 0x7f, 0xc0, 0x00, 0x3b, 0xf9, +0xbf, 0xdc, 0x03, 0xfe, 0x01, 0xff, 0x00, 0xff, 0x80, 0x7f, 0xc0, 0x7f, 0xc0, 0x00, 0x3b, 0xfd, +0xff, 0xdc, 0x03, 0xfe, 0x01, 0xff, 0x00, 0xff, 0x80, 0x7f, 0xc0, 0x7f, 0xc0, 0x00, 0x3b, 0xfe, +0xff, 0xdc, 0x03, 0xfe, 0x01, 0xff, 0x00, 0xff, 0x80, 0x7f, 0xc0, 0x7f, 0xc0, 0x00, 0x3b, 0xff, +0xff, 0x9c, 0x03, 0xfe, 0x01, 0xff, 0x00, 0xff, 0x80, 0x7f, 0xc0, 0x7f, 0xc0, 0x00, 0x39, 0xff, +0xff, 0x5c, 0x03, 0xfe, 0x01, 0xff, 0x00, 0xff, 0x80, 0x7f, 0xc0, 0x7f, 0xc0, 0x00, 0x3a, 0xff, +0xfe, 0xdc, 0x03, 0xfe, 0x01, 0xff, 0x00, 0xff, 0x80, 0x7f, 0xc0, 0x7f, 0xc0, 0x00, 0x3b, 0x7f, +0xfd, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x9f, +0xfb, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xdf, +0xf7, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xe7, +0xef, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xf3, +0xdf, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xf9, +0xbf, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xfd, +0xff, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xfe, 0xff, 0xdc, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xff, -0xff, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xff +0xff, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x39, 0xff, +0xff, 0x9c, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3a, 0xff, +0xff, 0x5c, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0x7f, +0xfe, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0x9f, +0xfd, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xdf, +0xfb, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xe7, +0xf7, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xf3, +0xef, 0xdc, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x3b, 0xf9, +0xdf, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xfd, +0xbf, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xfe, +0xff, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0xff, +0xff, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0xff, +0xff, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x7f, +0xff, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x3f, +0xfe, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x9f, +0xfd, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xdf, +0xfb, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xe7, +0xf7, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xf3, +0xef, 0xdc, 0x00, 0x06, 0x00, 0x03, 0x00, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x3b, 0xf9 }; - uint8_t vehicle1[] = { // 'vehicle1', 24x48px 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, @@ -256,6 +255,13 @@ void app_main(void) while(1) { vTaskDelay(1); } } + // Allocate memory for background frame + uint8_t *buffer = (uint8_t *)malloc(1024*2); + if (buffer == NULL) { + ESP_LOGE(TAG, "malloc failed"); + while(1) { vTaskDelay(1); } + } + // Allocate memory for vehicle frame uint8_t *vehicle = (uint8_t *)malloc(1024*3); if (vehicle == NULL) { @@ -281,9 +287,21 @@ void app_main(void) vTaskDelay(10); ssd1306_clear_screen(&dev, false); - ssd1306_bitmaps(&dev, 0, 0, highway1, 128, 64, false); + ssd1306_bitmaps(&dev, 0, 0, highway_width1, 128, 64, false); + ssd1306_get_buffer(&dev, &buffer[1024*0]); vTaskDelay(10); + ssd1306_clear_screen(&dev, false); + ssd1306_bitmaps(&dev, 0, 0, highway_width2, 128, 64, false); + ssd1306_get_buffer(&dev, &buffer[1024*1]); + vTaskDelay(10); + + // Show initial background + ssd1306_set_buffer(&dev, &buffer[1024*0]); + ssd1306_show_buffer(&dev); + vTaskDelay(10); + + int frameIndex=1; int page = 0; int vehicleHorizontalPosition[3] = {20, 52, 84}; int vehicleVerticalPosition[3] = {-8, 1, -14}; @@ -291,14 +309,27 @@ void app_main(void) while(1) { ssd1306_wrap_arround(&dev, PAGE_SCROLL_DOWN, 0, 0, -1); -#if WITH_VEHICLE - // Get frame without vehicle - ssd1306_get_buffer(&dev, save); - // Get from internal buffer to local buffer // buffer is [8][128] 8 page 128 pixel ssd1306_get_buffer(&dev, wk); + // Update buffer + int frameOffset = frameIndex*1024; + int dst_index = 0; + int src_index = (7-page)*128+frameOffset; + ESP_LOGD(TAG, "frameIndex=%d page=%d src_index=%d", frameIndex, page, src_index); + for (int seg=0;seg<128;seg++) { + wk[dst_index++] = buffer[src_index++]; + } + + // Set frame without vehicle + ssd1306_set_buffer(&dev, wk); + + +#if WITH_VEHICLE + // Get frame without vehicle + ssd1306_get_buffer(&dev, save); + // Set vehicle image for (int vehicleFrame=0;vehicleFrame<3;vehicleFrame++) { int startPage = vehicleVerticalPosition[vehicleFrame]; @@ -337,6 +368,8 @@ void app_main(void) vehicleVerticalPosition[vehicleFrame] = -8; } } + frameIndex++; + if (frameIndex > 1) frameIndex=0; } } // end while