LoginSignup

Why not login to Qiita and try out its useful features?

We'll deliver articles that match you.

You can read useful information later.

24
17

More than 1 year has passed since last update.

M5Stackใงใƒšใƒณใƒ—ใƒญใƒƒใ‚ฟใ‚’ไฝœใฃใฆใฟใŸ

Last updated at Posted at 2021-09-13

M5Stackใงใƒšใƒณใƒ—ใƒญใƒƒใ‚ฟใ‚’ไฝœใฃใฆใฟใŸ

by coppercele
1 / 6

M5Stackใจใ‚นใƒ†ใƒƒใƒ”ใƒณใ‚ฐใƒขใƒผใ‚ฟใƒผใ€ใ‚ตใƒผใƒœใงใƒšใƒณใƒ—ใƒญใƒƒใ‚ฟใ‚’ไฝœๆˆใ—ใพใ—ใŸ
่‡ชๅˆ†ใฏๆ‰‹ๅง‹ใ‚ใจใ—ใฆๆ‰‹ใซๅ…ฅใ‚Œใ‚„ใ™ใ„้ƒจๆใ‚’ไฝฟใ„ใพใ—ใŸใŒๅฟœ็”จใ™ใ‚Œใฐใ‚‚ใฃใจ้ซ˜็ฒพๅบฆใชใ‚‚ใฎใ‚‚ไฝœใ‚Œใ‚‹ใจๆ€ใ„ใพใ™

ใ“ใ‚“ใชๆ„Ÿใ˜ใงๅ‹•ไฝœใ—ใพใ™

ไฝฟ็”จใ™ใ‚‹ใƒ‡ใƒใ‚คใ‚น

image.png

M5Stack Basic - ใ‚นใ‚คใƒƒใƒใ‚ตใ‚คใ‚จใƒณใ‚น
https://www.switch-science.com/catalog/3647/

Arduinoไบ’ๆ›ใชESP32ใŒใ‚ฑใƒผใ‚นใซๅ…ฅใฃใฆใฆใƒœใ‚ฟใƒณใจใƒ‡ใ‚ฃใ‚นใƒ—ใƒฌใ‚คใจใƒใƒƒใƒ†ใƒชใƒผใŒใคใ„ใฆใฆIOใ‚‚่ฑŠๅฏŒใงWifiใจBluetoothใ‚‚ไฝฟใˆใ‚‹ใƒ‹ใ‚ฏใ„ๅฅด

ใƒใƒชใ‚จใƒผใ‚ทใƒงใƒณใซใ‚ˆใฃใฆ9่ปธใ‚ปใƒณใ‚ตใŒใคใ„ใฆใŸใ‚Šใ™ใ‚‹ใ‘ใฉbasicใฏไธ€็•ชๅŸบๆœฌ็š„ใชๅฅด


image.png

M5Stack็”จGRBLใƒขใ‚ธใƒฅใƒผใƒซ - ใ‚นใ‚คใƒƒใƒใ‚ตใ‚คใ‚จใƒณใ‚น
https://www.switch-science.com/catalog/6994/

ใ‚นใƒ†ใƒƒใƒ”ใƒณใ‚ฐใƒขใƒผใ‚ฟใƒผใ‚’3ๅ€‹ใพใงๅˆถๅพกใงใใ‚‹ใƒขใ‚ธใƒฅใƒผใƒซ
ใ‚นใ‚ฟใƒƒใ‚ฏใ™ใ‚‹ใจๆœ€ๅคง6ๅ€‹ใพใงไฝฟใˆใพใ™
GcodeใŒไฝฟใˆใ‚‹ใฎใงๅ‰ฒใจใŠๆ‰‹่ปฝใซใ‚นใƒ†ใƒƒใƒ”ใƒณใ‚ฐใƒขใƒผใ‚ฟใƒผใ‚’ๅ‹•ใ‹ใ›ใพใ™


image.png
M5Stack็”จ12ใƒใƒฃใƒณใƒใƒซ ใ‚ตใƒผใƒœใƒ‰ใƒฉใ‚คใƒใƒขใ‚ธใƒฅใƒผใƒซ - ใ‚นใ‚คใƒƒใƒใ‚ตใ‚คใ‚จใƒณใ‚น
https://www.switch-science.com/catalog/6060/

ใ‚ตใƒผใƒœใ‚’12ๅ€‹ใพใงๅˆถๅพกใงใใ‚‹ใƒขใ‚ธใƒฅใƒผใƒซ
็พๅœจใฏๅž‹่ฝใกใฟใŸใ„ใชใฎใงServo2ใƒขใ‚ธใƒฅใƒผใƒซใ‚’ไฝฟ็”จใ—ใฆใใ ใ•ใ„

M5Stack็”จServo2ใƒขใ‚ธใƒฅใƒผใƒซ - 16ใƒใƒฃใƒณใƒใƒซ ใ‚ตใƒผใƒœใƒ‰ใƒฉใ‚คใƒ - ใ‚นใ‚คใƒƒใƒใ‚ตใ‚คใ‚จใƒณใ‚น
https://www.switch-science.com/catalog/6737/


image.png

Amazon | 3Dใƒ—ใƒชใƒณใ‚ฟใ‚ฌใ‚คใƒ‰ใƒฌใƒผใƒซใ‚ปใƒƒใƒˆT8ใƒชใƒผใƒ‰ใ‚นใ‚ฏใƒชใƒฅใƒผ ใƒ”ใƒƒใƒ1mmใƒชใƒผใƒ‰1mm +ใƒชใƒ‹ใ‚ขใ‚ทใƒฃใƒ•ใƒˆ8 * 100mm + KP08 SK8 SC8UU +ใƒŠใƒƒใƒˆใƒใ‚ฆใ‚ธใƒณใ‚ฐ+ใ‚ซใƒƒใƒ—ใƒชใƒณใ‚ฐ+ใ‚นใƒ†ใƒƒใƒ—ใƒขใƒผใ‚ฟ (200mm) | ใƒชใƒ‹ใ‚ขใ‚ฌใ‚คใƒ‰ | ็”ฃๆฅญใƒป็ ”็ฉถ้–‹็™บ็”จๅ“ ้€š่ฒฉ
https://www.amazon.co.jp/gp/product/B07D3P1YST/

่‡ชๅˆ†ใฏใ‚นใƒ†ใƒƒใƒ”ใƒณใ‚ฐใƒขใƒผใ‚ฟใซ้–ขใ—ใฆใฏ็ด ไบบใ ใฃใŸใฎใงใ‚นใƒ†ใƒƒใƒ”ใƒณใ‚ฐใƒขใƒผใ‚ฟใƒผใจใƒฌใƒผใƒซใŒใ‚ปใƒƒใƒˆใซใชใฃใฆใ‚‹ใ‚‚ใฎใ‚’่ณผๅ…ฅใ—ใพใ—ใŸ


image.png

Amazon.co.jp: ใƒžใ‚คใ‚ฏใƒญใ‚นใƒฉใ‚คใƒ‡ใ‚ฃใƒณใ‚ฐใƒ†ใƒผใƒ–ใƒซใ‚นใƒ†ใƒƒใƒ”ใƒณใ‚ฐใƒขใƒผใ‚ฟใƒผใƒชใƒ‹ใ‚ขใƒขใƒผใ‚ฟใƒผใ‚นใ‚ฏใƒชใƒฅใƒผ2็›ธ4็ทšใƒชใƒ‹ใ‚ขใ‚นใƒ†ใƒƒใƒ”ใƒณใ‚ฐใƒขใƒผใ‚ฟใƒผใ‚นใ‚ฏใƒชใƒฅใƒผใ‚นใƒฉใ‚คใƒ‰ใƒ†ใƒผใƒ–ใƒซ4โ€‘9V้ง†ๅ‹•้›ปๅœง18ยฐใ‚นใƒ†ใƒƒใƒ—่ง’ : ็”ฃๆฅญใƒป็ ”็ฉถ้–‹็™บ็”จๅ“
https://www.amazon.co.jp/gp/product/B08LQ36RZM/

Y่ปธใซใฏ็ฐกๆ˜“ๅž‹ใฎใƒชใƒ‹ใ‚ขใƒฌใƒผใƒซใ‚’ไฝฟใ„ใพใ—ใŸ
Stepperใƒขใ‚ธใƒฅใƒผใƒซใŒ9V~ใชใฎใงๅฏพๅฟœใ—ใŸ้›ปๅœงใฎ็‰ฉใ‚’็”จๆ„ใ—ใพใ—ใ‚‡ใ†
ใŸใ ใ“ใฎใƒขใƒผใ‚ฟใƒผใฏ4~9Vใชใ‚“ใงใ™ใŒ็Ÿญๆ™‚้–“ใง้Ž็†ฑใ™ใ‚‹ใฎใงๅฎŸ็”จๆ™‚ใฏ
ไธŠ่จ˜ใฎๅคงใใ„ใ‚นใƒ†ใƒƒใƒ”ใƒณใ‚ฐใƒขใƒผใ‚ฟใƒผใ‚’ไฝฟใฃใŸๆ–นใŒใ„ใ„ใจๆ€ใ„ใพใ™

ใƒใƒผใƒ‰ใ‚’ๆง‹็ฏ‰ใ™ใ‚‹

ใƒ›ใƒผใƒ ใ‚ปใƒณใ‚ฟใƒผใงใ‚ขใ‚ฏใƒชใƒซๆฟใ‚’่ฒทใฃใฆใใฆใƒ‰ใƒชใƒซใง็ฉดใ‚’้–‹ใ‘ใฆX่ปธใฎใƒฌใƒผใƒซใ‚’ใƒใ‚ธๆญขใ‚ใ—ใพใ—ใŸ
ๅทฆๅดใฎใ‚นใƒ†ใƒƒใƒ”ใƒณใ‚ฐใƒขใƒผใ‚ฟใƒผใฏ้ซ˜ใ•ใŒๅˆใ‚ใชใ‹ใฃใŸใฎใงใ‚ขใ‚ฏใƒชใƒซๆฟใฎๅค–ใซๅ‡บใ—ใฆ้ซ˜ใ•ใ‚’้€ƒใŒใ—ใฆใ„ใพใ™

unnamed.jpg

ใƒกใƒข
่ตคA+้’A-้ป’B+็ท‘B-
image.png

Y่ปธใฏX่ปธใฎใ‚ขใƒซใƒŸใƒ–ใƒญใƒƒใ‚ฏใฎใƒใ‚ธ็ฉดใฎๅน…ใŒใกใ‚‡ใ†ใฉใ‚ˆใ‹ใฃใŸใฎใง
็›ดๆŽฅใƒใ‚ธๆญขใ‚ใ—ใพใ—ใŸ
image.png

ใƒชใƒŸใƒƒใƒˆใ‚นใ‚คใƒƒใƒใฏๅทฅๅ…ท็ฎฑใซใ‚ใฃใŸใ‚ฟใ‚ฏใƒˆใ‚นใ‚คใƒƒใƒใ‚’ไฝฟใ„ใพใ—ใŸ
ใ‚ฐใƒซใƒผใ‚ฌใƒณใงใ‚ขใƒซใƒŸใƒ–ใƒญใƒƒใ‚ฏใซๅฝ“ใŸใ‚‹ใจใ“ใ‚ใซๅ›บๅฎšใ—ใพใ™
image.png

ใƒชใƒŸใƒƒใƒˆใ‚นใ‚คใƒƒใƒใฏGNDใŒXYZๅ…ฑ็”จใชใฎใงๆŽฅ็ถšใ™ใ‚‹ใŸใ‚ใฎๅŸบๆฟใ‚’ไฝœใ‚Šใพใ—ใŸ

image.png

ใ‚ตใƒผใƒœใฏServoใƒขใ‚ธใƒฅใƒผใƒซใ‹ใ‚‰ๅˆถๅพกใ—ใพใ™

Y่ปธใฎใ‚นใƒ†ใƒƒใƒ—ใƒขใƒผใ‚ฟใƒผใซใ‚ตใƒผใƒœใ‚’่จญ็ฝฎใ—ใพใ™
ๅฐๅบงใฏthingiverseใง่ฆ‹ใคใ‘ใŸใ‚ขใ‚ฏใƒใƒฅใ‚จใƒผใ‚ฟใƒผใ‚’
Fusion360ใงๅˆ‡ใฃใŸใ‚Š่ฒผใฃใŸใ‚Šใ—ใฆ3Dใƒ—ใƒชใƒณใ‚ฟใงๅ‡บๅŠ›ใ—ใพใ—ใŸ

Linear Servo Actuators by potentprintables - Thingiverse
https://www.thingiverse.com/thing:3170748

image.png

ใ“ใ‚Œใซใƒšใƒณใ‚’ๅ›บๅฎšใ™ใ‚‹ใ“ใจใงใ‚ตใƒผใƒœใ‚’ๅ›žใ—ใฆไธŠไธ‹ใ™ใ‚‹ใ“ใจใŒใงใใพใ™

ใ‚นใ‚ฑใƒƒใƒใ‚’ๆ›ธใ„ใฆใ„ใ

Githubใฎใ‚ตใƒณใƒ—ใƒซใ‚ณใƒผใƒ‰ใ‚’่ฆ‹ใชใŒใ‚‰ๆ›ธใ„ใฆใ„ใใพใ™

ไปฅไธ‹ใฎ.inoใจ.cppใจ.hใ‚’ๅŒใ˜ใƒ•ใ‚ฉใƒซใƒ€ใซๅ…ฅใ‚Œใ‚Œใฐใ‚ณใƒณใƒ‘ใ‚คใƒซใงใใ‚‹ใจๆ€ใ„ใพใ™

M5Stack/xyz_control.ino at master ยท m5stack/M5Stack ยท GitHub
https://github.com/m5stack/MODULE_GRBL13.2/tree/master/examples/xyz_control

MODULE_GRBL13.2/src at master ยท m5stack/MODULE_GRBL13.2 ยท GitHub
https://github.com/m5stack/MODULE_GRBL13.2/tree/master/src

ๅŸบๆœฌ็š„ใซใฏG1ใฎ็›ด็ทšใ ใ‘ไฝฟใฃใฆใ„ใพใ™

_GRBL.sendGcode("G1 X5Y5Z5 F200");

ใกใชใฟใซๅ‹•ไฝœใŒ้…ใ‹ใฃใŸใฎใง
ๅˆๆœŸๅŒ–ใฎๅผ•ๆ•ฐใจใ‹CcodeใฎFRAMEใ‚’ๅค‰ใˆใฆใฟใŸใ‚“ใงใ™ใŒ

  _GRBL.Init(400, 400, 400, 30);
  _GRBL.sendGcode("G1 X2 F100");
  _GRBL.sendGcode("G1 X2 F200");
  _GRBL.sendGcode("G1 X3 F300");
  _GRBL.sendGcode("G1 X4 F400");
  _GRBL.sendGcode("G1 X5 F500");

่„ฑ่ชฟใ™ใ‚‹ใ‚“ใงใ™ใ‚ˆใญใƒปใƒปใƒป(ยดใƒปฯ‰ใƒป`)

ใ†ใพใ„่จญๅฎšๆ–นๆณ•ใŒใ‚ใฃใŸใ‚‰ๆ•™ใˆใฆใใ ใ•ใ„(ยดใƒปฯ‰ใƒป`)

ใ‚นใƒ†ใƒƒใƒ—ใƒขใƒผใ‚ฟใƒผใ‚’ๅ‹•ใ‹ใ›ใ‚‹ใ‚ˆใ†ใซใชใฃใŸใฎใงใ“ใ‚“ใช้–ขๆ•ฐใ‚’ไฝœใ‚Šใพใ—ใŸ

void moveTo(float toX, float toY) {
  String command = "G1 X";
  command += String(toX);
  command += " F200";
  Serial.println(command.c_str());
  _GRBL.Gcode((char *)(command.c_str()));
  command = "G1 Y";
  command += String(toY);
  command += " F200";
  Serial.println(command.c_str());
  _GRBL.Gcode((char *)(command.c_str()));
  _GRBL.WaitIdle();
}

C่จ€่ชžใŒๅˆ†ใ‹ใ‚‰ใชใ„ใฎใงJavaใƒฉใ‚คใ‚ฏใชๆ›ธใๆ–นใงใ™(ยดใƒปฯ‰ใƒป`)

ๅŽŸ็‚นๆˆปใ—ใ‚’ๅฎŸ่ฃ…ใ™ใ‚‹

ใƒชใ‚ปใƒƒใƒˆใ™ใ‚‹ใ”ใจใซๅŽŸ็‚นใŒๅค‰ใ‚ใฃใฆใ‚‚ๅ›ฐใ‚‹ใฎใงๅŽŸ็‚นใซๆˆปใ™ๅ‹•ไฝœใ‚’ๅฎŸ่ฃ…ใ—ใพใ™

ใพใš1ใ ใ‘๏ผ‹ๆ–นๅ‘ใซๅ‹•ใ‹ใ—ใฆใ‹ใ‚‰ใƒชใƒŸใƒƒใƒˆใ‚นใ‚คใƒƒใƒใŒๆŠผใ•ใ‚Œใ‚‹ใพใง-0.3ใšใคๅ‹•ใ‹ใ—็ถšใ‘ใพใ™

ใƒชใƒŸใƒƒใƒˆใ‚นใ‚คใƒƒใƒใŒๆŠผใ•ใ‚Œใ‚‹ใจ_GRBL.InLock()ใŒtrueใซใชใ‚‹ใฎใง
Unlock()ใ—ใฆใ‹ใ‚‰+ใซๆˆปใ—ใพใ™

ใ“ใฎๆ™‚ใ‚ฟใ‚ฏใƒˆใ‚นใ‚คใƒƒใƒใŒๆŠผใ•ใ‚ŒใŸใพใพUnlock()ใ™ใ‚‹ใฎใงๅณlock()ใ•ใ‚Œใ‚‹ใ“ใจใŒใ‚ใ‚Šใ€
ใใฎๅฏพ็ญ–ใฎใŸใ‚ใซๅ‹•ใ‹ใ—ใฆใ‹ใ‚‰ๅฐ‘ใ—ๅพ…ใฃใฆใƒชใƒŸใƒƒใƒˆใ‚นใ‚คใƒƒใƒใŒๆŠผใ•ใ‚ŒใŸใพใพใ ใจๅ†ๅบฆๅ‹•ใ‹ใ™ใ‚ˆใ†ใซใ—ใฆใ„ใพใ™


void resetOrigin(char *axis) {
  _GRBL.SetMode("distance");  //ใ€€็›ธๅฏพ็งปๅ‹•ใƒขใƒผใƒ‰
  std::string str = "G1 1 F200";

  str.insert(3, axis);

  // USE Gcode
  _GRBL.Gcode(const_cast<char *>(str.c_str()));  // +1็งปๅ‹•

  str = "G1 -0.3 F200";
  str.insert(3, axis);

  while (!_GRBL.InLock()) {
    _GRBL.Gcode(
        const_cast<char *>(str.c_str()));  // -0.2ใšใคใƒญใƒƒใ‚ฏใ•ใ‚Œใ‚‹ใพใง็งปๅ‹•
    delay(100);
  }

  Serial.println("Locked");
  Serial.println("Back to Origin");

  str = "G1 0.2 F200";
  str.insert(3, axis);

  while (_GRBL.InLock()) {
    _GRBL.UnLock();  // ใƒชใƒŸใƒƒใƒˆใ‚นใ‚คใƒƒใƒใฎใƒญใƒƒใ‚ฏใ‚’่งฃ้™คใ™ใ‚‹
    _GRBL.SetMode("distance");  // absoluteใซๆˆปใ‚‹ใฎใงๅ†่จญๅฎš
    _GRBL.Gcode(const_cast<char *>(str.c_str()));
    delay(300);
    // ใ‚นใ‚คใƒƒใƒใŒๆŠผใ—ใฃใฑใชใ—ใ ใจๅณๅบงใซใƒญใƒƒใ‚ฏใซๆˆปใ‚‹ใฎใง็งปๅ‹•ใ—ใฆใ‹ใ‚‰ๅฐ‘ใ—ๅพ…ใค
  }

  _GRBL.SetMode("absolute");
  Serial.println("Moved to Origin");
}

็”ป้ขใ‚’ใ‚ฟใƒƒใƒ—ใ™ใ‚‹

ใ‚ตใƒผใƒœใ‚’ๅ›žใ™ใจใƒšใƒณใ‚’ไธŠไธ‹ใงใใ‚‹ใฎใงใƒšใƒณใฎไธŠใ’ไธ‹ใ’ใจใ‚ฟใƒƒใƒ—ใง้–ขๆ•ฐใ‚’ไฝœใ‚Šใพใ™

ๅฎšๆ•ฐใฏ็พ็‰ฉๅˆใ‚ใ›ใง่ชฟๆ•ดใ—ใฆใใ ใ•ใ„

int PEN_UP = 130;
int PEN_DOWN = 100;

void penUp() {
  // servo(PEN_UP);
  Servo_write_angle(0, PEN_UP);
  delay(100);
}
void penDown() {
  Servo_write_angle(0, PEN_DOWN);
  delay(100);
}
void tap() {
  penDown();
  penUp();
}

void Servo_write_angle(uint8_t number, uint8_t angle) {
  Wire.beginTransmission(SERVO_ADDR);
  Wire.write(0x10 | number);
  Wire.write(angle);
  Wire.endTransmission();
}

ใใ†ใ—ใŸใ‚‰็”ป้ขใฎไธŠใ‚’ๅ‹•ใ‹ใ—ใฆใ‚ฟใƒƒใƒ—ใ™ใ‚‹ๅ ดๆ‰€ใ‚’ๅฎšๆ•ฐใซใ—ใฆใ„ใใพใ™
ไปŠๅ›žใฏใƒ‡ใƒขใฎใŸใ‚ใซๆŸFGโ—ใ‚’ๆ“ไฝœใ™ใ‚‹ใ“ใจใซใ—ใพใ—ใŸ

image.png

่‡ชๅˆ†ใŒๅ‹•ใ‹ใ—ใŸๆ„Ÿใ˜ใงใฏๆจชใฎ1ใƒžใ‚นใŒ10,็ธฆใŒ1ใใ‚‰ใ„ใซใชใ‚‹ใฎใงใ‚ฟใƒƒใƒ—ใ™ใ‚‹ๅ ดๆ‰€ใ‚’ๅˆ—ๆŒ™ใ—ใฆใ„ใใพใ™

้•ทใใชใ‚‹ใฎใงๆŠ˜ใ‚ŠใŸใŸใฟ
float SKILL_1_1_X = 0;
float SKILL_1_1_Y = 0.7;
float SKILL_1_2_X = 4;
float SKILL_1_2_Y = 0.7;
float SKILL_1_3_X = 7.5;
float SKILL_1_3_Y = 0.7;

float SKILL_2_1_X = 13.5;
float SKILL_2_1_Y = 0.7;
float SKILL_2_2_X = 17.5;
float SKILL_2_2_Y = 0.7;
float SKILL_2_3_X = 21;
float SKILL_2_3_Y = 0.7;

float SKILL_3_1_X = 27.5;
float SKILL_3_1_Y = 0.7;
float SKILL_3_2_X = 31;
float SKILL_3_2_Y = 0.7;
float SKILL_3_3_X = 34.5;
float SKILL_3_3_Y = 0.7;

float OPPONENT_1_X = 17;
float OPPONENT_1_Y = 1.5;
float OPPONENT_2_X = 29;
float OPPONENT_2_Y = 1.5;
float OPPONENT_3_X = 39;
float OPPONENT_3_Y = 1.5;

float ATTACK_X = 52;
float ATTACK_Y = 0.5;

float CARD_1_X = 8;
float CARD_1_Y = 0.7;
float CARD_2_X = 17;
float CARD_2_Y = 0.7;
float CARD_3_X = 29;
float CARD_3_Y = 0.7;
float CARD_4_X = 39;
float CARD_4_Y = 0.7;
float CARD_5_X = 50;
float CARD_5_Y = 0.7;

float HOUGU_1_X = 17;
float HOUGU_1_Y = 3.9;
float HOUGU_2_X = 29;
float HOUGU_2_Y = 3.9;
float HOUGU_3_X = 38;
float HOUGU_3_Y = 3.9;

float MASTER_SKILL_X = 54;
float MASTER_SKILL_Y = 2.6;
float MASTER_SKILL_1_X = 42;
float MASTER_SKILL_1_Y = 2.6;
float MASTER_SKILL_2_X = 46;
float MASTER_SKILL_2_Y = 2.6;
float MASTER_SKILL_3_X = 50;
float MASTER_SKILL_3_Y = 2.6;

float ORDER_CHANGE_1_X = 7;
float ORDER_CHANGE_1_Y = 2.6;
float ORDER_CHANGE_2_X = 15;
float ORDER_CHANGE_2_Y = 2.6;
float ORDER_CHANGE_3_X = 24;
float ORDER_CHANGE_3_Y = 2.6;
float ORDER_CHANGE_4_X = 33;
float ORDER_CHANGE_4_Y = 2.6;
float ORDER_CHANGE_5_X = 41;
float ORDER_CHANGE_5_Y = 2.6;
float ORDER_CHANGE_6_X = 50;
float ORDER_CHANGE_6_Y = 2.6;

float ORDER_EXEC_X = 28;
float ORDER_EXEC_Y = 0.0;

ใ‚ฟใƒƒใƒ—ใ™ใ‚‹ๅบงๆจ™ใŒๅˆ†ใ‹ใฃใŸใ‚‰ใใ‚Œใžใ‚Œใ‚’้–ขๆ•ฐใซใพใจใ‚ใฆใŠใใพใ™

้•ทใใชใ‚‹ใฎใงๆŠ˜ใ‚ŠใŸใŸใฟ
void skill1(int num) {
  Serial.printf("exec Skill1-%d\n", num);

  switch (num) {
    case 1:
      moveTo(SKILL_1_1_X, SKILL_1_1_Y);
      break;
    case 2:
      moveTo(SKILL_1_2_X, SKILL_1_2_Y);
      break;
    case 3:
      moveTo(SKILL_1_3_X, SKILL_1_3_Y);
      break;

    default:
      break;
  }
  tap();
}
void skill2(int num) {
  Serial.printf("exec Skill2-%d\n", num);
  switch (num) {
    case 1:
      moveTo(SKILL_2_1_X, SKILL_2_1_Y);
      break;
    case 2:
      moveTo(SKILL_2_2_X, SKILL_2_2_Y);
      break;
    case 3:
      moveTo(SKILL_2_3_X, SKILL_2_3_Y);
      break;

    default:
      break;
  }
  tap();
}
void skill3(int num) {
  Serial.printf("exec Skill3-%d\n", num);
  switch (num) {
    case 1:
      moveTo(SKILL_3_1_X, SKILL_3_1_Y);
      break;
    case 2:
      moveTo(SKILL_3_2_X, SKILL_3_2_Y);
      break;
    case 3:
      moveTo(SKILL_3_3_X, SKILL_3_3_Y);
      break;

    default:
      break;
  }
  tap();
}

void skillTo(int num) {
  Serial.printf("exec Skill to %d\n", num);
  switch (num) {
    case 1:
      moveTo(OPPONENT_1_X, OPPONENT_1_Y);
      break;
    case 2:
      moveTo(OPPONENT_2_X, OPPONENT_2_Y);
      break;
    case 3:
      moveTo(OPPONENT_3_X, OPPONENT_3_Y);
      break;

    default:
      break;
  }
  tap();
}

void masterSkill(int num) {
  moveTo(MASTER_SKILL_X, MASTER_SKILL_Y);
  tap();
  switch (num) {
    case 1:
      moveTo(MASTER_SKILL_1_X, MASTER_SKILL_1_Y);
      break;
    case 2:
      moveTo(MASTER_SKILL_2_X, MASTER_SKILL_2_Y);
      break;
    case 3:
      moveTo(MASTER_SKILL_3_X, MASTER_SKILL_3_Y);
      break;

    default:
      break;
  }
  tap();
}

void orderChange(int num) {
  switch (num) {
    case 1:
      moveTo(ORDER_CHANGE_1_X, ORDER_CHANGE_1_Y);
      break;
    case 2:
      moveTo(ORDER_CHANGE_2_X, ORDER_CHANGE_2_Y);
      break;
    case 3:
      moveTo(ORDER_CHANGE_3_X, ORDER_CHANGE_3_Y);
      break;
    case 4:
      moveTo(ORDER_CHANGE_4_X, ORDER_CHANGE_4_Y);
      break;
    case 5:
      moveTo(ORDER_CHANGE_5_X, ORDER_CHANGE_5_Y);
      break;
    case 6:
      moveTo(ORDER_CHANGE_6_X, ORDER_CHANGE_6_Y);
      break;
    case 7:
      moveTo(ORDER_EXEC_X, ORDER_EXEC_Y);
      break;

    default:
      break;
  }
  tap();
}

void hougu(int num) {
  switch (num) {
    case 1:
      moveTo(HOUGU_1_X, HOUGU_1_Y);
      break;
    case 2:
      moveTo(HOUGU_2_X, HOUGU_2_Y);
      break;
    case 3:
      moveTo(HOUGU_3_X, HOUGU_3_Y);
      break;

    default:
      break;
  }
  tap();
}

void card(int num) {
  switch (num) {
    case 1:
      moveTo(CARD_1_X, CARD_1_Y);
      break;
    case 2:
      moveTo(CARD_2_X, CARD_2_Y);
      break;
    case 3:
      moveTo(CARD_3_X, CARD_3_Y);
      break;
    case 4:
      moveTo(CARD_4_X, CARD_4_Y);
      break;
    case 5:
      moveTo(CARD_5_X, CARD_5_Y);
      break;

    default:
      break;
  }
  tap();
}

void atack() {
  moveTo(ATTACK_X, ATTACK_Y);
  tap();
}

ใ‚ณใƒžใƒณใƒ‰ใ‚’ๆŒ‡ๅฎšใงใใ‚‹ใ‚ˆใ†ใซใ™ใ‚‹

ๅ›ณๅฝขใ‚’ๆ›ธใใซใ—ใ‚็”ป้ขใ‚’ใ‚ฟใƒƒใƒ—ใ™ใ‚‹ใซใ—ใ‚ใ‚ฟใƒƒใƒ—ใ™ใ‚‹ๅ ดๆ‰€ใ‚’้€ฃ็ถšใ—ใฆๆŒ‡ๅฎšใ—ใชใ„ใจใ„ใ‘ใชใ„ใฎใง
ใ‚ฟใƒƒใƒ—ใ™ใ‚‹ใ‚ณใƒžใƒณใƒ‰ใ‚’SDใ‚ซใƒผใƒ‰ไธŠใฎใƒ•ใ‚กใ‚คใƒซใซไฟๅญ˜ใ—ใฆ้ธๆŠžใงใใ‚‹ใ‚ˆใ†ใซใ—ใพใ™

ใ“ใ“ใฏESP-NOWใชใ‚ŠUARTใชใ‚Šใง้€šไฟกใ—ใฆใ‚‚ใ„ใ„ใจๆ€ใ„ใพใ™ใฎใง้ƒฝๅˆใฎใ„ใ„ๆ–นๆณ•ใ‚’้ธใ‚“ใงใใ ใ•ใ„

ไปŠๅ›žใฏใ“ใฎใ‚ˆใ†ใชJSONใ‚’็”จๆ„ใ—ใพใ—ใŸ


{
    "data": [
        {
            "name": "rans",
            "command": {
                "wave1": "SK11,ST3,SK21,ST3,MS3,ST3,AT,HG3,CD4,CD5",
                "wave2": "SK23,ST3,SK33,AT,HG3,CD4,CD5",
                "wave3": "SK12,SK22,SK13,ST3,AT,HG3,CD4,CD5"
            }
        }
    ]
}

ใ‚ณใƒžใƒณใƒ‰ใฎๆ„ๅ‘ณใฏ
SKxyโ†’xไบบ็›ฎใฎใ‚นใ‚ญใƒซyใ‚’ๅฎŸ่กŒ
STxโ†’ใ‚นใ‚ญใƒซใฎใ‚ฟใƒผใ‚ฒใƒƒใƒˆใ‚’xไบบ็›ฎใจใ™ใ‚‹
MSxโ†’ใƒžใ‚นใ‚ฟใƒผใ‚นใ‚ญใƒซใ‚’ไฝฟใ†
ATโ†’Attackใƒœใ‚ฟใƒณใ‚’ๆŠผใ™
HGxโ†’xไบบ็›ฎใฎๅฎๅ…ทใ‚ซใƒผใƒ‰ใ‚’้ธๆŠž
CDxโ†’x็•ช็›ฎใฎใ‚ซใƒผใƒ‰ใ‚’้ธๆŠž
ใจใชใฃใฆใ„ใพใ™

JSONใ‚’SDใ‚ซใƒผใƒ‰ไธŠใซ็ฝฎใ„ใŸใ‚‰่ชญใฟ่พผใ‚“ใงjsonArrayใซๆ ผ็ดใ—ใพใ™
ArduinoJsonใ‚’ไฝฟ็”จใ—ใพใ—ใŸ

ArduinoJson: Efficient JSON serialization for embedded C++
https://arduinojson.org/

  File f = SD.open("/fgo.json");
  DeserializationError error = deserializeJson(jsonObject, f);
  JsonArray jsonArry = jsonObject["data"].as<JsonArray>();

JSONใฎๅ†…ๅฎนใŒๅ–ๅพ—ๅ‡บๆฅใŸใ‚‰M5Stack TreeViewใซๆธกใ—ใฆ้ธๆŠžใงใใ‚‹ใ‚ˆใ†ใซใ—ใพใ™

GitHub - lovyan03/M5Stack_TreeView: M5Stack TreeView menu UI library.
https://github.com/lovyan03/M5Stack_TreeView

  tv.itemHeight = 25;
  tv.itemWidth = 100;
  tv.setTextFont(2);

  for (int i = 0; i < jsonArry.size(); i++) {
    Serial.printf("sd:jsonArry[0].name=%s\n",
                  (const char *)(jsonArry[i]["name"]));
  }
  for (int i = 0; i < jsonArry.size(); i++) {
    tv.addItems(std::vector<MenuItem *>{
        new MenuItem((const char *)(jsonArry[i]["name"]), i,
                     std::vector<MenuItem *>{new MenuItem("Wave1", 1, func),
                                             new MenuItem("Wave2", 2, func),
                                             new MenuItem("Wave3", 3, func

                                                          )})});
  }
  tv.begin();

TreeViewใงใ‚ณใƒžใƒณใƒ‰ใ‚’้ธๆŠžใ™ใ‚‹ใจtag็•ชๅทใŒๅ–ๅพ—ใงใใ‚‹ใฎใงJsonArrayใ‹ใ‚‰่ฉฒๅฝ“ใฎใ‚ณใƒžใƒณใƒ‰ใ‚’ๅ–ๅพ—ใ—ใพใ™

void func(MenuItem *mi) {
  Serial.print(mi->parentItem()->tag);
  Serial.print(":");
  Serial.println(mi->tag);

  JsonArray jsonArry = jsonObject["data"].as<JsonArray>();
  Serial.printf("sd:jsonArry.size=%d\n", jsonArry.size());

  String str = String(mi->tag);

  str = "wave" + str;
  Serial.printf("name:%s\n",
                (const char *)jsonArry[mi->parentItem()->tag]["name"]);
  Serial.printf(
      "%s:%s\n", str,
      (const char *)(jsonArry[mi->parentItem()->tag]["command"][str]));
  decodeCommand(jsonArry[mi->parentItem()->tag]["command"][str]);
}

่ฉฒๅฝ“ใฎใ‚ณใƒžใƒณใƒ‰่กŒใŒๅ–ๅพ—ๅ‡บๆฅใŸใ‚‰่กŒใ‚’ใƒ‡ใ‚ณใƒผใƒ‰ใ—ใฆๅ…ˆใปใฉไฝœใฃใŸ่ฉฒๅฝ“ใฎไฝ็ฝฎใ‚’ใ‚ฟใƒƒใƒ—ใ™ใ‚‹้–ขๆ•ฐใซๆธกใ—ใพใ™


void decodeCommand(String str) {
  Serial.printf("command:%s\n", str.c_str());

  int index = 0;

  while (true) {
    String com = str.substring(index, str.indexOf(",", index));
    Serial.printf("%s\n", com);

    index = str.indexOf(",", index) + 1;

    if (com.startsWith("SK")) {
      // Serial.println("Skill");
      // Serial.println(atoi(com.substring(2, 3).c_str()));
      switch (atoi(com.substring(2, 3).c_str())) {
        case 1:
          skill1(atoi(com.substring(3).c_str()));
          break;
        case 2:
          skill2(atoi(com.substring(3).c_str()));
          break;
        case 3:
          skill3(atoi(com.substring(3).c_str()));
          break;
        default:
          break;
      }
    } else if (com.startsWith("AT")) {
      atack();
    } else if (com.startsWith("MS")) {
      masterSkill(atoi(com.substring(2).c_str()));
    } else if (com.startsWith("ST")) {
      skillTo(atoi(com.substring(2).c_str()));
    } else if (com.startsWith("OC")) {
      orderChange(atoi(com.substring(2).c_str()));
    } else if (com.startsWith("HG")) {
      hougu(atoi(com.substring(2).c_str()));
    } else if (com.startsWith("CD")) {
      card(atoi(com.substring(2).c_str()));
    } else if (com.startsWith("RS")) {
      resetOrigin("X");
      resetOrigin("Y");
    }

    if (index == 0) {
      break;
    }
  }
}

ใ“ใ‚ŒใงJSONใซๅˆ—ๆŒ™ใ•ใ‚ŒใŸใ‚ณใƒžใƒณใƒ‰ใŒ้ †ๆฌกๅฎŸ่กŒใ•ใ‚Œใฆ่‡ชๅ‹•ๆ“็ธฆใŒๅฏ่ƒฝใซใชใ‚Šใพใ™

ๆœ€ๅพŒใซใƒกใƒƒใƒใƒฃ้•ทใใชใ‚Šใพใ—ใŸใŒใ‚ฝใƒผใ‚นใ‚’็ฝฎใ„ใฆใŠใใพใ™

้•ทใใชใ‚‹ใฎใงๆŠ˜ใ‚ŠใŸใŸใฟ
#include <ArduinoJson.h>
#include <M5Stack.h>
#include <M5TreeView.h>
#include <string.h>

#include "GrblControl.h"

#define STEPMOTOR_I2C_ADDR 0x70
#define SERVO_ADDR 0x53
GRBL _GRBL = GRBL(STEPMOTOR_I2C_ADDR);

int degree = 0;

int PEN_UP = 130;
int PEN_DOWN = 100;

float SKILL_1_1_X = 0;
float SKILL_1_1_Y = 0.7;
float SKILL_1_2_X = 4;
float SKILL_1_2_Y = 0.7;
float SKILL_1_3_X = 7.5;
float SKILL_1_3_Y = 0.7;

float SKILL_2_1_X = 13.5;
float SKILL_2_1_Y = 0.7;
float SKILL_2_2_X = 17.5;
float SKILL_2_2_Y = 0.7;
float SKILL_2_3_X = 21;
float SKILL_2_3_Y = 0.7;

float SKILL_3_1_X = 27.5;
float SKILL_3_1_Y = 0.7;
float SKILL_3_2_X = 31;
float SKILL_3_2_Y = 0.7;
float SKILL_3_3_X = 34.5;
float SKILL_3_3_Y = 0.7;

float OPPONENT_1_X = 17;
float OPPONENT_1_Y = 1.5;
float OPPONENT_2_X = 29;
float OPPONENT_2_Y = 1.5;
float OPPONENT_3_X = 39;
float OPPONENT_3_Y = 1.5;

float ATTACK_X = 52;
float ATTACK_Y = 0.5;

float CARD_1_X = 8;
float CARD_1_Y = 0.7;
float CARD_2_X = 17;
float CARD_2_Y = 0.7;
float CARD_3_X = 29;
float CARD_3_Y = 0.7;
float CARD_4_X = 39;
float CARD_4_Y = 0.7;
float CARD_5_X = 50;
float CARD_5_Y = 0.7;

float HOUGU_1_X = 17;
float HOUGU_1_Y = 3.9;
float HOUGU_2_X = 29;
float HOUGU_2_Y = 3.9;
float HOUGU_3_X = 38;
float HOUGU_3_Y = 3.9;

float MASTER_SKILL_X = 54;
float MASTER_SKILL_Y = 2.6;
float MASTER_SKILL_1_X = 42;
float MASTER_SKILL_1_Y = 2.6;
float MASTER_SKILL_2_X = 46;
float MASTER_SKILL_2_Y = 2.6;
float MASTER_SKILL_3_X = 50;
float MASTER_SKILL_3_Y = 2.6;

float ORDER_CHANGE_1_X = 7;
float ORDER_CHANGE_1_Y = 2.6;
float ORDER_CHANGE_2_X = 15;
float ORDER_CHANGE_2_Y = 2.6;
float ORDER_CHANGE_3_X = 24;
float ORDER_CHANGE_3_Y = 2.6;
float ORDER_CHANGE_4_X = 33;
float ORDER_CHANGE_4_Y = 2.6;
float ORDER_CHANGE_5_X = 41;
float ORDER_CHANGE_5_Y = 2.6;
float ORDER_CHANGE_6_X = 50;
float ORDER_CHANGE_6_Y = 2.6;

float ORDER_EXEC_X = 28;
float ORDER_EXEC_Y = 0.0;

float x = 0.0;
float y = 0.0;

M5TreeView tv;

StaticJsonDocument<2048> jsonObject;

// addr 0x11 means "control the number 1 servo by angle"
void Servo_write_angle(uint8_t number, uint8_t angle) {
  Wire.beginTransmission(SERVO_ADDR);
  Wire.write(0x10 | number);
  Wire.write(angle);
  Wire.endTransmission();
}

void penUp() {
  // servo(PEN_UP);
  Servo_write_angle(0, PEN_UP);
  delay(100);
  // myservo.detach();
}
void penDown() {
  Servo_write_angle(0, PEN_DOWN);
  delay(100);
  // myservo.detach();
}

void resetOrigin(char *axis) {
  _GRBL.SetMode("distance");  //ใ€€็›ธๅฏพ็งปๅ‹•ใƒขใƒผใƒ‰
  std::string str = "G1 1 F200";

  str.insert(3, axis);

  // USE Gcode
  _GRBL.Gcode(const_cast<char *>(str.c_str()));  // +1็งปๅ‹•

  str = "G1 -0.3 F200";
  str.insert(3, axis);

  while (!_GRBL.InLock()) {
    _GRBL.Gcode(
        const_cast<char *>(str.c_str()));  // -0.2ใšใคใƒญใƒƒใ‚ฏใ•ใ‚Œใ‚‹ใพใง็งปๅ‹•
    delay(100);
  }

  Serial.println("Locked");
  Serial.println("Back to Origin");

  str = "G1 0.2 F200";
  str.insert(3, axis);

  while (_GRBL.InLock()) {
    _GRBL.UnLock();  // ใƒชใƒŸใƒƒใƒˆใ‚นใ‚คใƒƒใƒใฎใƒญใƒƒใ‚ฏใ‚’่งฃ้™คใ™ใ‚‹
    _GRBL.SetMode("distance");  // absoluteใซๆˆปใ‚‹ใฎใงๅ†่จญๅฎš
    _GRBL.Gcode(const_cast<char *>(str.c_str()));
    delay(300);
    // ใ‚นใ‚คใƒƒใƒใŒๆŠผใ—ใฃใฑใชใ—ใ ใจๅณๅบงใซใƒญใƒƒใ‚ฏใซๆˆปใ‚‹ใฎใง็งปๅ‹•ใ—ใฆใ‹ใ‚‰ๅฐ‘ใ—ๅพ…ใค
  }

  _GRBL.SetMode("absolute");
  Serial.println("Moved to Origin");
}

void moveTo(float toX, float toY) {
  String command = "G1 X";
  command += String(toX);
  command += " F200";
  Serial.println(command.c_str());
  _GRBL.Gcode((char *)(command.c_str()));
  command = "G1 Y";
  command += String(toY);
  command += " F200";
  Serial.println(command.c_str());
  _GRBL.Gcode((char *)(command.c_str()));
  _GRBL.WaitIdle();
}

void tap() {
  penDown();
  penUp();
}

void skill1(int num) {
  Serial.printf("exec Skill1-%d\n", num);

  switch (num) {
    case 1:
      moveTo(SKILL_1_1_X, SKILL_1_1_Y);
      break;
    case 2:
      moveTo(SKILL_1_2_X, SKILL_1_2_Y);
      break;
    case 3:
      moveTo(SKILL_1_3_X, SKILL_1_3_Y);
      break;

    default:
      break;
  }
  tap();
}
void skill2(int num) {
  Serial.printf("exec Skill2-%d\n", num);
  switch (num) {
    case 1:
      moveTo(SKILL_2_1_X, SKILL_2_1_Y);
      break;
    case 2:
      moveTo(SKILL_2_2_X, SKILL_2_2_Y);
      break;
    case 3:
      moveTo(SKILL_2_3_X, SKILL_2_3_Y);
      break;

    default:
      break;
  }
  tap();
}
void skill3(int num) {
  Serial.printf("exec Skill3-%d\n", num);
  switch (num) {
    case 1:
      moveTo(SKILL_3_1_X, SKILL_3_1_Y);
      break;
    case 2:
      moveTo(SKILL_3_2_X, SKILL_3_2_Y);
      break;
    case 3:
      moveTo(SKILL_3_3_X, SKILL_3_3_Y);
      break;

    default:
      break;
  }
  tap();
}

void skillTo(int num) {
  Serial.printf("exec Skill to %d\n", num);
  switch (num) {
    case 1:
      moveTo(OPPONENT_1_X, OPPONENT_1_Y);
      break;
    case 2:
      moveTo(OPPONENT_2_X, OPPONENT_2_Y);
      break;
    case 3:
      moveTo(OPPONENT_3_X, OPPONENT_3_Y);
      break;

    default:
      break;
  }
  tap();
}

void masterSkill(int num) {
  moveTo(MASTER_SKILL_X, MASTER_SKILL_Y);
  tap();
  switch (num) {
    case 1:
      moveTo(MASTER_SKILL_1_X, MASTER_SKILL_1_Y);
      break;
    case 2:
      moveTo(MASTER_SKILL_2_X, MASTER_SKILL_2_Y);
      break;
    case 3:
      moveTo(MASTER_SKILL_3_X, MASTER_SKILL_3_Y);
      break;

    default:
      break;
  }
  tap();
}

void orderChange(int num) {
  switch (num) {
    case 1:
      moveTo(ORDER_CHANGE_1_X, ORDER_CHANGE_1_Y);
      break;
    case 2:
      moveTo(ORDER_CHANGE_2_X, ORDER_CHANGE_2_Y);
      break;
    case 3:
      moveTo(ORDER_CHANGE_3_X, ORDER_CHANGE_3_Y);
      break;
    case 4:
      moveTo(ORDER_CHANGE_4_X, ORDER_CHANGE_4_Y);
      break;
    case 5:
      moveTo(ORDER_CHANGE_5_X, ORDER_CHANGE_5_Y);
      break;
    case 6:
      moveTo(ORDER_CHANGE_6_X, ORDER_CHANGE_6_Y);
      break;
    case 7:
      moveTo(ORDER_EXEC_X, ORDER_EXEC_Y);
      break;

    default:
      break;
  }
  tap();
}

void hougu(int num) {
  switch (num) {
    case 1:
      moveTo(HOUGU_1_X, HOUGU_1_Y);
      break;
    case 2:
      moveTo(HOUGU_2_X, HOUGU_2_Y);
      break;
    case 3:
      moveTo(HOUGU_3_X, HOUGU_3_Y);
      break;

    default:
      break;
  }
  tap();
}

void card(int num) {
  switch (num) {
    case 1:
      moveTo(CARD_1_X, CARD_1_Y);
      break;
    case 2:
      moveTo(CARD_2_X, CARD_2_Y);
      break;
    case 3:
      moveTo(CARD_3_X, CARD_3_Y);
      break;
    case 4:
      moveTo(CARD_4_X, CARD_4_Y);
      break;
    case 5:
      moveTo(CARD_5_X, CARD_5_Y);
      break;

    default:
      break;
  }
  tap();
}

void atack() {
  moveTo(ATTACK_X, ATTACK_Y);
  tap();
}

void decodeCommand(String str) {
  Serial.printf("command:%s\n", str.c_str());

  int index = 0;

  while (true) {
    String com = str.substring(index, str.indexOf(",", index));
    Serial.printf("%s\n", com);

    index = str.indexOf(",", index) + 1;

    if (com.startsWith("SK")) {
      // Serial.println("Skill");
      // Serial.println(atoi(com.substring(2, 3).c_str()));
      switch (atoi(com.substring(2, 3).c_str())) {
        case 1:
          skill1(atoi(com.substring(3).c_str()));
          break;
        case 2:
          skill2(atoi(com.substring(3).c_str()));
          break;
        case 3:
          skill3(atoi(com.substring(3).c_str()));
          break;
        default:
          break;
      }
    } else if (com.startsWith("AT")) {
      atack();
    } else if (com.startsWith("MS")) {
      masterSkill(atoi(com.substring(2).c_str()));
    } else if (com.startsWith("ST")) {
      skillTo(atoi(com.substring(2).c_str()));
    } else if (com.startsWith("OC")) {
      orderChange(atoi(com.substring(2).c_str()));
    } else if (com.startsWith("HG")) {
      hougu(atoi(com.substring(2).c_str()));
    } else if (com.startsWith("CD")) {
      card(atoi(com.substring(2).c_str()));
    } else if (com.startsWith("RS")) {
      resetOrigin("X");
      resetOrigin("Y");
    } else if (com.startsWith("AC")) {
      if (clockStarted) {
        clockStarted = false;
      } else {
        clockStarted = true;
        xTaskCreatePinnedToCore(clockTask, "clockTask", 4096, NULL, 1, NULL, 0);
      }

    }

    if (index == 0) {
      break;
    }
  }
}

void func(MenuItem *mi) {
  Serial.print(mi->parentItem()->tag);
  Serial.print(":");
  Serial.println(mi->tag);

  JsonArray jsonArry = jsonObject["data"].as<JsonArray>();
  Serial.printf("sd:jsonArry.size=%d\n", jsonArry.size());

  String str = String(mi->tag);

  str = "wave" + str;
  Serial.printf("name:%s\n",
                (const char *)jsonArry[mi->parentItem()->tag]["name"]);
  Serial.printf(
      "%s:%s\n", str,
      (const char *)(jsonArry[mi->parentItem()->tag]["command"][str]));
  decodeCommand(jsonArry[mi->parentItem()->tag]["command"][str]);
}

void setup() {
  M5.begin(true, true, true, true);

  _GRBL.Init(400, 400, 400, 30);
  _GRBL.SetMode("absolute");
  dacWrite(25, 0);  //ใ€€ใƒŽใ‚คใ‚บๅฏพ็ญ–

  tv.itemHeight = 25;
  tv.itemWidth = 100;
  tv.setTextFont(2);

  File f = SD.open("/fgo.json");

  DeserializationError error = deserializeJson(jsonObject, f);

  if (error) {
    Serial.print(F("deserializeJson() failed: "));
    Serial.println(error.f_str());
    return;
  }
  JsonArray jsonArry = jsonObject["data"].as<JsonArray>();
  Serial.printf("sd:jsonArry.size=%d\n", jsonArry.size());

  for (int i = 0; i < jsonArry.size(); i++) {
    Serial.printf("sd:jsonArry[0].name=%s\n",
                  (const char *)(jsonArry[i]["name"]));
  }
  for (int i = 0; i < jsonArry.size(); i++) {
    tv.addItems(std::vector<MenuItem *>{
        new MenuItem((const char *)(jsonArry[i]["name"]), i,
                     std::vector<MenuItem *>{new MenuItem("Wave1", 1, func),
                                             new MenuItem("Wave2", 2, func),
                                             new MenuItem("Wave3", 3, func

                                                          )})});
  }
  tv.begin();
  // penUp();
  delay(1000);
  Servo_write_angle(0, PEN_UP);
}

void loop() {
  M5.update();
  tv.update();

24
17
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

M5stack's like ranking last week

youtoy

ใ€Œใคใใ‚ใŒใ‚„ใ€ใจใ„ใ†ใƒขใƒŽไฝœใ‚Š็ณปๅฑ•็คบใ‚คใƒ™ใƒณใƒˆใงๅ‡บๅฑ•ใ—ใŸๆ™‚ใฎๆƒ…ๅ ฑๆ็คบใฎๅทฅๅคซใซใคใ„ใฆ๏ผˆ้›ปๅญใƒšใƒผใƒ‘ใƒผ็ณปใƒ‡ใƒใ‚คใ‚นใจ iPad ใฎๆดป็”จ๏ผ‰

ใ“ใฎ่จ˜ไบ‹่ชฐๅพ—๏ผŸ ็งใ—ใ‹ๅพ—ใ—ใชใ„ใƒ‹ใƒƒใƒใชๆŠ€่ก“ใง่จ˜ไบ‹ๆŠ•็จฟ๏ผ
youtoy

ใ€3Dใƒ—ใƒชใƒณใ‚ฟๅˆฉ็”จใ€‘ๅฑ•็คบ็”จใซๅคงๆดป่บใ—ใฆใ„ใ‚‹้›ปๅญใƒšใƒผใƒ‘ใƒผใƒ‡ใƒใ‚คใ‚นใ€ŒM5Paperใ€ใฎใ‚นใ‚ฟใƒณใƒ‰ใ‚’ๅ‡บๅŠ›ใ—ใฆใƒคใ‚นใƒชใง่ชฟๆ•ด

Linked from these articles

Comments

No comments

Let's comment your feelings that are more than good

Being held Article posting campaign

ใฏใ—ใ‚™ใ‚ใฆใฎ่จ˜ไบ‹ๆŠ•็จฟ

~
View details

ใ€Œ็ต„็น”ใ€ใ‚„ใ€Œใƒใƒผใƒ ใ€ใงใฎใ‚ณใƒŸใƒฅใƒ‹ใ‚ฑใƒผใ‚ทใƒงใƒณใซใคใ„ใฆใ€ใ‚ใชใŸใฎ่€ƒใˆใ‚’ใ‚ทใ‚งใ‚ขใ—ใ‚ˆใ†!

~
View details
24
17

Login to continue?

Login or Sign up with social account

Login or Sign up with your email address