I'm assuming based on your comments about alpha-blending and antialiased fonts that this is planned to support the higher res fonts that Paul added a while back for the ili9341_t3 library, or even the google fonts? I don't mean to make it sound like I'm making any demands on your generosity, I'm just curious because I'm pretty excited about the possibilities this library presents!
As reference, my usage of this library for my current project is probably entirely unique to me, so I'm trying to only mention issues that will pertain to the standard usage you intend. However, I'll go ahead and mention my project because I think people might get a kick out of what I'm doing. My project actually uses 11 2.2" ILI9341-based displays. They all share the entire SPI bus (including chip select) using 4-16 decoder chips (and an analog mux for MISO) - meaning I can declare one object. Declaring one object was initially out of convenience when I was based on the 3.2 and the ILI9341_t3 library. Obviously now with your library it's the only way it could hope to work seeing as there is only enough RAM for 1 frame buffer.
Anyway, I'm playing around with filling the buffer, then updating each screen individually. First, I tried filling the buffer, then sending that data out to each screen. That worked great after a lot of tinkering between defining the start and stop refresh periods. refreshOnce() has never worked in this context but I assume it has to do with my weird usage. Using refreshOnce() always distorts the colors and often the position of data on the screen. I only mention this here out of curiosity since this is such a weird usage.
Next, I tried filling the buffer with different data before refreshing each screen since that's much more like my actual use-case when I get past tinkering. Again this worked great with very little kinks to work out.
Here's my loop of a test program for context:
Everything is pretty self-explanatory so I didn't include the entire program. setMuxChannel() just switches the "channel" on the MUX setup I'm using to connect a single screen to the SPI bus. It seems like this would be the perfect time to use refreshOnce() but it either corrupts the color/position data or it actually makes the screens go white periodically - never to come back to life until a power cycle. Even with the code above you'll see where I had to use a delay to avoid a screen occasionally going white.
With this library and my usage, I'm able to get a combined 20 - 22 Hz (overall) refresh rate, or in the neighborhood of 2 Hz for each screen. 22Hz when flushing the same data to all screens, and more like 20 Hz when filling each screen with unique data like in the snippet above. It's well below the theoretical max of a divided ~50 Hz, but I think it's pretty good for what I'm doing with it. Again I just want to mention how excited I am about this awesome library.
Forgot to mention I edited the example functions to all be void. Will help when reading
.
As reference, my usage of this library for my current project is probably entirely unique to me, so I'm trying to only mention issues that will pertain to the standard usage you intend. However, I'll go ahead and mention my project because I think people might get a kick out of what I'm doing. My project actually uses 11 2.2" ILI9341-based displays. They all share the entire SPI bus (including chip select) using 4-16 decoder chips (and an analog mux for MISO) - meaning I can declare one object. Declaring one object was initially out of convenience when I was based on the 3.2 and the ILI9341_t3 library. Obviously now with your library it's the only way it could hope to work seeing as there is only enough RAM for 1 frame buffer.
Anyway, I'm playing around with filling the buffer, then updating each screen individually. First, I tried filling the buffer, then sending that data out to each screen. That worked great after a lot of tinkering between defining the start and stop refresh periods. refreshOnce() has never worked in this context but I assume it has to do with my weird usage. Using refreshOnce() always distorts the colors and often the position of data on the screen. I only mention this here out of curiosity since this is such a weird usage.
Next, I tried filling the buffer with different data before refreshing each screen since that's much more like my actual use-case when I get past tinkering. Again this worked great with very little kinks to work out.
Here's my loop of a test program for context:
Code:
void loop(void) {
//toggle between two sets of different information on screen
for (ind=0; ind<11; ind+=1) {
setMuxChannel(ind);
switch (ind) {
case 0: testFillScreen(); break;
case 1: testText(); break;
case 2: testLines(ILI9341_CYAN); break;
case 3: testFastLines(ILI9341_RED, ILI9341_BLUE); break;
case 4: testRects(ILI9341_GREEN); break;
case 5: testFilledRects(ILI9341_YELLOW, ILI9341_MAGENTA); break;
case 6:
testFilledCircles(10, ILI9341_MAGENTA);
testCircles(10, ILI9341_WHITE);
break;
case 7: testRoundRects(); break;
case 8: testFilledRoundRects(); break;
case 9: testFillScreen(); break;
case 10: testText(); break;
case 11: testLines(ILI9341_CYAN); break;
}
tft.start();
tft.fill();
delayMicroseconds(2);//required to avoid white screens
tft.stopRefresh();
}
for (ind=0; ind<11; ind+=1) {
setMuxChannel(ind);
switch (ind) {
case 0: testFilledRects(ILI9341_YELLOW, ILI9341_MAGENTA); break;
case 1:
testFilledCircles(10, ILI9341_MAGENTA);
testCircles(10, ILI9341_WHITE);
break;
case 2: testRoundRects(); break;
case 3: testFilledRoundRects(); break;
case 4: testFillScreen(); break;
case 5: testText(); break;
case 6: testLines(ILI9341_CYAN); break;
case 7: testFillScreen(); break;
case 8: testText(); break;
case 9: testLines(ILI9341_CYAN); break;
case 10: testFastLines(ILI9341_RED, ILI9341_BLUE); break;
case 11: testRects(ILI9341_GREEN); break;
}
tft.start();
tft.fill();
delayMicroseconds(2);//required to avoid white screens
tft.stopRefresh();
}
}
Everything is pretty self-explanatory so I didn't include the entire program. setMuxChannel() just switches the "channel" on the MUX setup I'm using to connect a single screen to the SPI bus. It seems like this would be the perfect time to use refreshOnce() but it either corrupts the color/position data or it actually makes the screens go white periodically - never to come back to life until a power cycle. Even with the code above you'll see where I had to use a delay to avoid a screen occasionally going white.
With this library and my usage, I'm able to get a combined 20 - 22 Hz (overall) refresh rate, or in the neighborhood of 2 Hz for each screen. 22Hz when flushing the same data to all screens, and more like 20 Hz when filling each screen with unique data like in the snippet above. It's well below the theoretical max of a divided ~50 Hz, but I think it's pretty good for what I'm doing with it. Again I just want to mention how excited I am about this awesome library.
Forgot to mention I edited the example functions to all be void. Will help when reading
Last edited: