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