Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
8 years, 12 months ago.
RA8875 Layers mode
I am using the RA8875 library: https://developer.mbed.org/components/RA8875-Based-Display/
I am trying to use the layers but it doesnt seem to work and I suspect it is because i need this: lcd.SetLayerMode(TransparentMode); but i havent a clue what to put in the brackets, it doesnt accept int, any idea what is to be put in there?
What I am aiming to achive is on layer 0 is normal sized text and on layer 1 to have larger text.
This is what I have tried so far:
lcd.SetLayerTransparency(8,8); lcd.cls(0); lcd.cls(1); lcd.SelectDrawingLayer(0); lcd.foreground(Blue); lcd.printf("Nicks LCD\r\n"); lcd.printf("(%3d,%3d)", p.x, p.y); lcd.SelectDrawingLayer(1); lcd.SetTextFontSize(4,4); lcd.puts(274,0,"1");
Have I missed something? any help appreciated.
Thanks
1 Answer
8 years, 12 months ago.
Hi Nick,
The function you mentioned accepts an enum which has the following possible values:
typedef enum { ShowLayer0, ///< Only layer 0 is visible, layer 1 is hidden (default) ShowLayer1, ///< Only layer 1 is visible, layer 0 is hidden LightenOverlay, ///< Lighten-overlay mode TransparentMode, ///< Transparent mode BooleanOR, ///< Boolean OR mode BooleanAND, ///< Boolean AND mode FloatingWindow ///< Floating Window mode } LayerMode_T;
I haven't used this screen before, but from what you described I think you might want to set it to BooleanOR.
I'm pretty sure you have to refer to it as RA8875::BooleanOR. Is that how you're using it?
posted by 21 Apr 2015Yes it worked, I used TransparentMode and got what I expected. Thanks. This is probably meant to be in another question but do you know how to set the font size different on each layer?
posted by 21 Apr 2015It looks like there's a function called "SetTextFontSize" in RA8875.h. I would look through that file, it has some documentation on all of the available functions
posted by 21 Apr 2015I have question about the layers. I would like to draw an image on layer 0, print another on layer 1 and then swab between both layers. I would like to see the image imediatly. Something like this seems not to work. Can someone help me?
"/local/Test1.bmp", "/local/Test2.bmp", "/local/Test3.bmp", "/local/Test4.bmp" lcd.SelectDrawingLayer(0); lcd.SetLayerMode(RA8875::ShowLayer0); r = lcd.RenderBitmapFile(0,0, files[0]); print .bmp on the screeb lcd.SelectDrawingLayer(1); select drawing layer 1 r = lcd.RenderBitmapFile(0,0, files[1]); print .bmp on layer 1 wait(5); wait lcd.SetLayerMode(RA8875::ShowLayer1); / show layer 1
posted by 01 Feb 2016Peter, your question might be best as a new question -
I didn't compile this, but something like this may get you going if you haven't solved it.
const char * files[] = { "/local/Test1.bmp", "/local/Test2.bmp", "/local/Test3.bmp", "/local/Test4.bmp" }; const int count = sizeof(files)/sizeof(files[0]); // '4', based on the list above. ... int layer = 0; while (1) { lcd.SelectDrawingLayer(layer & 1); // alternate layers lcd.SetLayerMode( (layer & 1) ? RA8875::ShowLayer1 : RA8875::ShowLayer0); r = lcd.RenderBitmapFile(0,0, files[layer]); // this command takes a while layer = (layer + 1) % count; // circulate 0, 1, 2, 3, 0, ... wait(5); // time per image is 5 + time to load the next bitmap }