#author("2020-04-16T14:13:01+09:00","default:kuran","kuran") [[戻る>PyBadge]] #author("2020-04-22T01:53:24+09:00","default:kuran","kuran") [[戻る>pyBadge]] *画面表示 [#m4619a69] Adafruit_Arcadaクラスがあるのでそれを使って画面を制御する。~ 10x10のキャラクタを画面の真ん中に表示するサンプルプログラムです。~ フレームバッファおよび画像フォーマットはRGB565(65536色)です。~ *サンプルプログラム [#m03bed63] #include <Adafruit_Arcada.h> #include <Adafruit_SPIFlash.h> Adafruit_Arcada arcada; unsigned short* frameBuffer; int screenWidth; int screenHeight; // PyBadge 65536 Color(RGB565) picture data // HIYOKO_10x10_1 // 10 x 10 dot const unsigned short HIYOKO_10x10_1[10 * 10] = { 0x0000, 0x0000, 0x0000, 0x80DE, 0x80DE, 0x80DE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x80DE, 0x80DE, 0x80DE, 0x80DE, 0x80DE, 0x0000, 0x0000, 0x0000, 0x0000, 0x80DE, 0x0B18, 0x0B18, 0x80DE, 0x80DE, 0x80DE, 0x80DE, 0x0000, 0x0000, 0x0000, 0x80DE, 0xFFFF, 0x0B18, 0x80DE, 0x80DE, 0x80DE, 0x80DE, 0x0000, 0x0000, 0x0000, 0x80DE, 0x0B18, 0x0B18, 0x80DE, 0x88FE, 0x88FE, 0x88FE, 0x88FE, 0x88FE, 0x80DB, 0x80DB, 0x80DB, 0x80DE, 0x80DE, 0x80DE, 0x80DE, 0x80DE, 0x80DE, 0x88FE, 0x0000, 0x0000, 0x0000, 0x80DE, 0x80DE, 0x80DE, 0x80DE, 0x80DE, 0x88FE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x80DE, 0x80DE, 0x80DE, 0x88FE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x80DB, 0x0000, 0x80DB, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x80DB, 0x0000, 0x80DB, 0x0000, 0x0000, 0x0000 }; void setup() { Serial.begin(9600); if(arcada.arcadaBegin() == false) { Serial.print("Failed to begin"); while(1); } arcada.displayBegin(); arcada.setBacklight(255); screenWidth = arcada.display->width(); screenHeight = arcada.display->height(); if(arcada.createFrameBuffer(screenWidth, screenHeight) == false) { arcada.haltBox("Could not allocate framebuffer"); } frameBuffer = arcada.getFrameBuffer(); } // Draw sprite no clip void DrawSprite(const unsigned short* buffer, int x, int y, int width, int height, int color_key) { int scanX; int scanY; int sourceAddress = 0; int destinationAddress = screenWidth * y + x; for(scanY = 0; scanY < height; ++ scanY) { for(scanX = 0; scanX < width; ++ scanX) { unsigned short color = buffer[sourceAddress + scanX]; if(static_cast<int>(color) != color_key) { frameBuffer[destinationAddress + scanX] = color; } } sourceAddress += width; destinationAddress += screenWidth; } } void loop() { arcada.display->dmaWait(); DrawSprite(HIYOKO_10x10_1, 75, 59, 10, 10, 0x0000); arcada.blitFrameBuffer(0, 0, false, true); } *実行結果 [#y4b038f8] #ref(ScreenSamplePyBadge.jpg) *サンプルプログラムのダウンロード [#cd51a498] #ref(ScreenSample.zip)~