0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

M5Paper: canvas をタッチで切り替えて描画

0
Last updated at Posted at 2022-06-19

こちらのプログラムを改造して、スクリーンタッチで画面が切り替わるようにしました。
M5Paper: canvas をタイマーで切り替えて描画

プログラム

canvas_switch.ino
// ---------------------------------------------------------------
//	canvas_switch.ino
//
//						Jun/19/2022
// ---------------------------------------------------------------
#include <M5EPD.h>

M5EPD_Canvas canvas_a(&M5.EPD);
M5EPD_Canvas canvas_b(&M5.EPD);
M5EPD_Canvas canvas_c(&M5.EPD);
M5EPD_Canvas canvas_d(&M5.EPD);

int  point[2]; 
int  ncount = 0;
// ---------------------------------------------------------------
// [2-2]:
void prepare_canvas_a_proc()
{
	canvas_a.createCanvas(540, 960);
	canvas_a.setTextSize(5);
	canvas_a.drawString("canvas A",200,100);

	canvas_a.fillCenterSquare(100, 100, 50, WHITE);
	canvas_a.fillCenterSquare(200, 100, 40, WHITE);
	canvas_a.fillCenterSquare(300, 100, 30, WHITE);

	canvas_a.drawRoundRect(300, 300, 50, 30, 10, WHITE);

	canvas_a.fillCircle(200, 400, 30, WHITE);
	canvas_a.drawCircle(200, 500, 30, WHITE);

	canvas_a.fillCircle(300, 400, 15, WHITE);
	canvas_a.drawCircle(300, 500, 15, WHITE);

	canvas_a.fillEllipse(200, 600, 30,15, WHITE);
	canvas_a.drawEllipse(200, 700, 30, 15, WHITE);
	
	canvas_a.fillTriangle(200, 800, 300,800, 250,750, WHITE);
	canvas_a.drawTriangle(200, 900, 300,900, 250,850, WHITE);
	
	canvas_a.fillTriangle(400, 800, 500,800, 450,775, WHITE);
	canvas_a.drawTriangle(400, 900, 500,900, 450,875, WHITE);
}

// ---------------------------------------------------------------
// [2-4]:
void prepare_canvas_b_proc()
{
	canvas_b.createCanvas(540, 960);
	canvas_b.setTextSize(5);
	canvas_b.drawString("canvas B",200,150);

	canvas_b.fillCircle(100, 300, 50, WHITE);
	canvas_b.fillCircle(250, 300, 40, WHITE);
	canvas_b.fillCircle(400, 300, 30, WHITE);

}

// ---------------------------------------------------------------
// [2-6]:
void prepare_canvas_c_proc()
{
	canvas_c.createCanvas(540, 960);
	canvas_c.setTextSize(5);
	canvas_c.drawString("canvas C",200,200);

  
	canvas_c.fillTriangle(100, 800, 300,800, 200,700, WHITE);
	canvas_c.drawTriangle(100, 900, 300,900, 200,800, WHITE);
  
	canvas_c.fillTriangle(300, 800, 500,800, 400,700, WHITE);
	canvas_c.drawTriangle(300, 900, 500,900, 400,800, WHITE);
}

// ---------------------------------------------------------------
// [2-8]:
void prepare_canvas_d_proc()
{
	canvas_d.createCanvas(540, 960);
	canvas_d.setTextSize(5);
	canvas_d.drawString("canvas D",200,250);

  
	canvas_d.fillTriangle(100, 600, 300,600, 200,700, WHITE);
	canvas_d.drawTriangle(100, 700, 300,700, 200,800, WHITE);
  
	canvas_d.fillTriangle(300, 600, 500,600, 400,700, WHITE);
	canvas_d.drawTriangle(300, 700, 500,700, 400,800, WHITE);
}

// ---------------------------------------------------------------
// [2]:
void setup()
{
	M5.begin();
	M5.EPD.SetRotation(90);
	M5.TP.SetRotation(90);
	M5.EPD.Clear(true);

	prepare_canvas_a_proc();
	prepare_canvas_b_proc();
	prepare_canvas_c_proc();
	prepare_canvas_d_proc();

	canvas_a.pushCanvas(0,0,UPDATE_MODE_GLD16);
}

// ---------------------------------------------------------------
// [6]:
void loop()
{
	if(M5.TP.avaliable())
		{
		if(!M5.TP.isFingerUp())
			{
			if (finger_get_proc())
				{
				Serial.print("*** touched ***\r\n");
				canvas_switch_proc();
				}
			}
		}
}

// ---------------------------------------------------------------
// [6-4]:
bool finger_get_proc()
{
	bool is_update = false;
	M5.TP.update();
	tp_finger_t FingerItem = M5.TP.readFinger(0);
	if ((point[0] != FingerItem.x) || (point[1] != FingerItem.y))
		{
		is_update = true;
		Serial.printf("ncount = %d\r\n",ncount);
		point[0] = FingerItem.x;
		point[1] = FingerItem.y;
		Serial.printf("Finger ID:%d-->X: %d 	Y: %d	Size: %d\r\n", FingerItem.id, FingerItem.x, FingerItem.y , FingerItem.size);
		}

	return is_update;
}

// ---------------------------------------------------------------
// [6-8]:
void canvas_switch_proc()
{
	ncount++;
	short ikey = ncount % 4;
	switch (ikey)
		{
		case 0:
			canvas_a.pushCanvas(0,0,UPDATE_MODE_GLD16);
			break;
		case 1:
			canvas_b.pushCanvas(0,0,UPDATE_MODE_GLD16);
			break;
		case 2:
			canvas_c.pushCanvas(0,0,UPDATE_MODE_GLD16);
			break;
		case 3:
			canvas_d.pushCanvas(0,0,UPDATE_MODE_GLD16);
			break;
		}
}

// ---------------------------------------------------------------

Arduino IDE
image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?