diff --git a/CounterDemo/main/main.c b/CounterDemo/main/main.c index a21b82e..a7f7700 100644 --- a/CounterDemo/main/main.c +++ b/CounterDemo/main/main.c @@ -195,10 +195,9 @@ uint8_t segmentDisplay[IMAGES][192] = { // show_digit(&dev, segmentImage, 2, 3); // show_digit(&dev, segmentImage, 1, 2); // show_digit(&dev, segmentImage, 0, 1); - -void show_digit(SSD1306_t * dev, uint8_t *segmentImage, int digit_position, int digit_number) { - int segmentImageIndex = digit_number * 256; - int seg = digit_position * 32; +void show_digit(SSD1306_t * dev, uint8_t *segmentImage, int digitPosition, int digitNumber) { + int segmentImageIndex = digitNumber * 256; + int seg = digitPosition * 32; for (int page=0;page<8;page++) { ssd1306_display_image(dev, page, seg, &segmentImage[segmentImageIndex+page*32], 32); } @@ -312,6 +311,7 @@ void app_main(void) show_digit(&dev, segmentImage, 2, 0); show_digit(&dev, segmentImage, 1, 0); show_digit(&dev, segmentImage, 0, 0); + vTaskDelay(200); while(1) { digit4++; diff --git a/ScrollCounterDemo/main/main.c b/ScrollCounterDemo/main/main.c index b0f1738..e3d6972 100644 --- a/ScrollCounterDemo/main/main.c +++ b/ScrollCounterDemo/main/main.c @@ -190,6 +190,68 @@ uint8_t segmentDisplay[IMAGES][192] = { } }; +// If you want show "1234": +// show_digit(&dev, segmentImage, 3, 4); +// show_digit(&dev, segmentImage, 2, 3); +// show_digit(&dev, segmentImage, 1, 2); +// show_digit(&dev, segmentImage, 0, 1); +void show_digit(SSD1306_t * dev, uint8_t *segmentImage, int digitPosition, int digitNumber) { + int segmentImageIndex = digitNumber * 256; + int seg = digitPosition * 32; + for (int page=0;page<8;page++) { + ssd1306_display_image(dev, page, seg, &segmentImage[segmentImageIndex+page*32], 32); + } +} + + +// If you want show "3456": +// scroll_digit(&dev, segmentImage, 3, 6, buffer); +// scroll_digit(&dev, segmentImage, 2, 5, buffer); +// scroll_digit(&dev, segmentImage, 1, 4, buffer); +// scroll_digit(&dev, segmentImage, 0, 3, buffer); +void scroll_digit(SSD1306_t * dev, uint8_t *segmentImage, int digitPosition, int digitNumber, uint8_t *buffer) { + int segmentImageIndex = digitNumber * 256; + //memcpy(src, &segmentImage[digitNumber*256], 256); + uint8_t src[256]; + memcpy(src, &segmentImage[segmentImageIndex], 256); + + int height = ssd1306_get_height(dev); + ESP_LOGD(TAG, "height=%d", height); + + int startSeg = digitPosition * 32; // startSeg=96->64->32->0 + + for (int _height=0;_height_flip) swk = ssd1306_rotate_byte(swk); + if (dev->_flip) dwk = ssd1306_rotate_byte(dwk); + //buffer[bufferIndex] = ssd1306_copy_bit(src[page*32+seg], srcBits, buffer[bufferIndex], 7); + buffer[bufferIndex] = ssd1306_copy_bit(swk, srcBits, dwk, 7); + ESP_LOGD(TAG, "src[%d]=%02x buffer[bufferIndex]=%02x", page*32+seg, src[page*32+seg], buffer[bufferIndex]); + } + + // Set internal buffer + ssd1306_set_buffer(dev, buffer); + + // Show internal buffer + ssd1306_show_buffer(dev); + } // end _height + + // Avoid WatchDog alerts + vTaskDelay(1); +} void app_main(void) { @@ -271,60 +333,46 @@ void app_main(void) #endif } + // Test code ssd1306_clear_screen(&dev, false); - for (int page=0;page<8;page++) { - ssd1306_display_image(&dev, page, 0, &segmentImage[page*32], 32); - ssd1306_display_image(&dev, page, 32, &segmentImage[page*32], 32); - ssd1306_display_image(&dev, page, 64, &segmentImage[page*32], 32); - ssd1306_display_image(&dev, page, 96, &segmentImage[page*32], 32); - vTaskDelay(2); - } + show_digit(&dev, segmentImage, 3, 4); + show_digit(&dev, segmentImage, 2, 3); + show_digit(&dev, segmentImage, 1, 2); + show_digit(&dev, segmentImage, 0, 1); + vTaskDelay(200); + scroll_digit(&dev, segmentImage, 3, 6, buffer); + scroll_digit(&dev, segmentImage, 2, 5, buffer); + scroll_digit(&dev, segmentImage, 1, 4, buffer); + scroll_digit(&dev, segmentImage, 0, 3, buffer); + vTaskDelay(200); + + // Show initial screen + int digit1 = 3; + int digit2 = 2; + int digit3 = 1; + int digit4 = 0; + ssd1306_clear_screen(&dev, false); + show_digit(&dev, segmentImage, 3, digit1); + show_digit(&dev, segmentImage, 2, digit2); + show_digit(&dev, segmentImage, 1, digit3); + show_digit(&dev, segmentImage, 0, digit4); + vTaskDelay(200); int height = ssd1306_get_height(&dev); ESP_LOGD(TAG, "height=%d", height); while(1) { - uint8_t src[256]; - for (int imageIndex=1; imageIndex<=10; imageIndex++) { - int segmentImageIndex = imageIndex * 256; - if (imageIndex == 10) { - segmentImageIndex = 0; - } - //memcpy(src, &segmentImage[imageIndex*256], 256); - memcpy(src, &segmentImage[segmentImageIndex], 256); - - for (int digit=3;digit>=0;digit--) { - int startSeg = digit * 32; // startSeg=96->64->32->0 - - for (int _height=0;_height