/* ***************************************************************************** * 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 #include #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 }