GetPixel関数

このページをスマホなどでご覧になる場合は、画面を横長にする方が読みやすくなります。

書式

uint8_t GetPixel(uint8_t x, uint8_t y)

対応オブジェクト型

対応バージョン

Ver. 0.22以降

説明

座標(x,y)の画素の色を取得する。画素が白なら0、画素が黒なら1を返す。(ただし、MGLCD_INVERTモードの場合は逆)

引数

返り値

画素の色の取得に成功すれば、画素の色を返す。画素の色の取得に失敗すれば、負の値を返す。

点の座標が画面の範囲外であれば、点を打つのに失敗する。また、シリアル回線経由でLCDがArduinoにつながっている場合、回線の状態によっては点を打つのに失敗する。

使用例

// SetPixel関数とGetPixel関数のデモスケッチ
// エラトステネスのふるい(Eratosthenes' sieve)により、5379までの素数を全て求める
// 普通はメモリ上にふるいを設けるが、あえてLCD画面にふるいを設けて、非素数が
// ふるい落とされる様子を目に見えるようにした。
// DelayCntを0に設定すると、この方法がいかに高速化かが理解できる。
#include <MGLCD.h>

MGLCD_serial MGLCD(&Serial,500000);

const int SieveWidth =14*MGLCD_FONT_WIDTH; // ふるいの幅(84)
const int SieveHeight=32; // ふるいの高さ
const int SieveMax=SieveWidth*SieveHeight*2+3; // ふるいで扱える最大の数(5379)
const int DelayCnt=2000; // 表示のポーズ時間(ms)

// ふるいの状態を調べ素数判定する。
// nは素数判定したい数で、3以上の奇数。
// 素数なら0、非素数なら1を返す。
signed char GetSieveState(int n)
{
  int i=(n-3)/2;
  return MGLCD.GetPixel(i%SieveWidth, i/SieveWidth);
} // GetSieveState

// 非素数をふるい上でマーキングする。
// nはマーキングしたい数で、3以上の奇数。
void SetSieveState(int n)
{
  int i=(n-3)/2;
  MGLCD.SetPixel(i%SieveWidth, i/SieveWidth);
} // SetSieveState

void setup()
{
  while(MGLCD.Reset()); // LCDの初期化

  MGLCD.SetTextWindow(SieveWidth/MGLCD_FONT_WIDTH+1,0,MGLCD.GetColumnNum()-1,MGLCD.GetLineNum()-1); // 素数を表示する画面領域の指定
  MGLCD.println(2); // 最初の素数の2だけは直接表示する
  delay(DelayCnt);

  for(int i=3; i<=SieveMax; i+=2) {
    if(GetSieveState(i)==0) { // iが素数だった
      MGLCD.println(i); // 見つかった素数を表示
      delay(DelayCnt);
      for(int j=i*3; j<=SieveMax; j+=i*2) {
        SetSieveState(j); // 非素数をマーキングする// for j  // if// for i  
  MGLCD.println("END.");
} // setup

void loop()
{
} // loop
写真1、実行画面
写真1、実行画面

関連ページ

Arduino 電子工作
このサイトの記事が本になりました。
書名:Arduino 電子工作
ISBN:978-4-7775-1941-5
工学社の書籍の内容の紹介ページ
本のカバーの写真か書名をクリックすると、Amazonの書籍購入ページに移動します。