84 lines
3.7 KiB
Arduino
84 lines
3.7 KiB
Arduino
|
/* *****************************************************************************
|
||
|
* FX Hello world example v1.00 by Mr.Blinky Mar.2022 licenced under CC0
|
||
|
* *****************************************************************************
|
||
|
*
|
||
|
* This is a example that shows how you can draw texts from the FX flash chip.
|
||
|
* It will draw some text, number, and a scrolling message using different
|
||
|
* fonts and drawing modes.
|
||
|
*
|
||
|
* Before this example sketch is uploaded and run on the Arduboy FX, make sure
|
||
|
* the fxdata of this sketch has been build and uploaded to the Arduboy FX.
|
||
|
*
|
||
|
* If the Arduboy FX Arduino plugin has been installed you can simply choose the
|
||
|
* 'Build and upload Arduboy FX data' from the Arduino IDE Tools menu.
|
||
|
*
|
||
|
* Alternatively the fxdata.txt script file can be build using the fxdata-build.py
|
||
|
* Phyton script and the fxdata.bin file can be uploaded using the uploader-gui.py,
|
||
|
* fxdata-upload.py or flash-writer.py Python script using the -d switch.
|
||
|
*
|
||
|
******************************************************************************/
|
||
|
|
||
|
#include <Arduboy2.h>
|
||
|
#include <ArduboyFX.h>
|
||
|
#include "fxdata\fxdata.h"
|
||
|
|
||
|
Arduboy2Base arduboy;
|
||
|
|
||
|
void setup()
|
||
|
{
|
||
|
arduboy.begin();
|
||
|
FX::begin(FX_DATA_PAGE); // Initialize FX flash chip
|
||
|
FX::setFont(arduboyFont, dcmNormal); // select default font
|
||
|
FX::setCursorRange(0,32767); // set cursor left and wrap positions
|
||
|
}
|
||
|
|
||
|
uint16_t frames = 0;
|
||
|
uint8_t speed = 1; // scrolly speed
|
||
|
int16_t scroll_x = 128; // scrolly position
|
||
|
|
||
|
uint8_t fontMode = dcmNormal;
|
||
|
int8_t leadingDigits = 5; // number of digits printed including leading zeros
|
||
|
uint8_t str[] = "FX Demo"; // demo text stored in ram.
|
||
|
|
||
|
void loop()
|
||
|
{
|
||
|
if(!(arduboy.nextFrame())) return;
|
||
|
arduboy.pollButtons();
|
||
|
|
||
|
// draw FX demo string in top left corner
|
||
|
FX::setCursor(0,0); // set cursor to top left positon
|
||
|
FX::setFontMode(dcmNormal); // only change the font mode to normal
|
||
|
FX::drawString(str); // draw string from a buffer (in this case the buffer holds 'FX Demo' text)
|
||
|
|
||
|
// draw number of displayed frames in top right corner
|
||
|
FX::setCursor(WIDTH - 5 * arduboyFontWidth, 0); // position the cursor
|
||
|
FX::drawNumber(frames, leadingDigits); // draw the frames number
|
||
|
|
||
|
// draw a scrolly message using a masked font
|
||
|
FX::setCursor(scroll_x, 24); // position the cursor
|
||
|
FX::setFont(maskedFont, dcmMasked | fontMode); // Select the masked font
|
||
|
FX::drawString(helloWorld); // 'print' the message
|
||
|
|
||
|
//draw 'press any button' text as normal or inverse text
|
||
|
FX::setCursor(13, HEIGHT - arduboyFontHeight);
|
||
|
FX::setFont(arduboyFont, fontMode);
|
||
|
FX::drawString(" Press any button "); // draw an immediate string (string is stored in RAM so it is not recommended to use this method)
|
||
|
|
||
|
// copy display buffer to OLED display and clear the buffer
|
||
|
FX::display(CLEAR_BUFFER);
|
||
|
|
||
|
// decrement x for scrolling effect
|
||
|
scroll_x -= speed;
|
||
|
if (scroll_x < -1792) scroll_x = 128;
|
||
|
frames++;
|
||
|
|
||
|
// handle button changes
|
||
|
if (arduboy.justPressed(0xFF)) frames = 0; // clear frames counter if any new button is pressed
|
||
|
if (arduboy.justPressed(UP_BUTTON)) speed = 2; // faster scrolling speed
|
||
|
if (arduboy.justPressed(DOWN_BUTTON)) speed = 1; // slower scrolling speed
|
||
|
if (arduboy.justPressed(LEFT_BUTTON)) leadingDigits = (leadingDigits == -5) ? 0 : -5; // use leading spaces
|
||
|
if (arduboy.justPressed(RIGHT_BUTTON))leadingDigits = (leadingDigits == 5) ? 0 : 5; // use leading zeros
|
||
|
if (arduboy.justPressed(A_BUTTON)) fontMode = dcmNormal; // Normal drawing mode
|
||
|
if (arduboy.justPressed(B_BUTTON)) fontMode = dcmReverse; // Reverse drawing mode
|
||
|
}
|