<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[CoreS3 virtual buttons]]></title><description><![CDATA[<p dir="auto">Page 7 of the CoreS3 document "CoreS3 Development kit.pdf" contains the following information.<br />
**<br />
Covering most of the from is the capacitive multitouch screen sensor with three dedicated touch zones available in code as buttons A, B and C.<br />
These are not clearly marked as zone A shares the same location and the left microphone,<br />
Zone B shares the same location as the camera and zone C shares the same location as the right microphone.<br />
**<br />
However, there is no mention of CoreS3 in the comments on M5Unified's Button.ino.<br />
I actually tested Button.ino and it doesn't work.<br />
That's why I thought CoreS3 was not equipped with virtual buttons.</p>
<p dir="auto">But when I test the code below,</p>
<pre><code>#include &lt;Arduino.h&gt;
#include &lt;M5Unified.h&gt;
void setup() {
   auto cfg = M5.config();
   M5.begin(cfg);
}

void loop() {
   M5.update();
   if(M5.Touch.isEnabled()){
     auto t = M5.Touch.getDetail();
     auto p = t.isPressed();
     auto r = t.isReleased();
     auto h = t.isHolding();
    
     auto x = t.base_x;
     auto y = t.base_y;
     M5.Display.setCursor(0,0);
     M5.Display.setTextSize(2);
     M5.Display.printf("x=%4d y=%4d PRH=%d %d %d",x,y,p,r,h);
   }
   delay(1);
}
</code></pre>
<p dir="auto">When you touch the Zone A area, x=80, y=2000 will be displayed.<br />
Pressed Released Holding is also displayed correctly. In other words, it seems that only button A is implemented.<br />
When I touch Zone B or C, it doesn't respond at all.</p>
<p dir="auto">What does this mean?<br />
Is there any official comment on this?</p>
]]></description><link>https://community.m5stack.com/topic/5809/cores3-virtual-buttons</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Apr 2026 22:32:01 GMT</lastBuildDate><atom:link href="https://community.m5stack.com/topic/5809.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 15 Nov 2023 01:09:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to CoreS3 virtual buttons on Fri, 05 Dec 2025 09:27:22 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/chama" aria-label="Profile: chama">@<bdi>chama</bdi></a> did you end up figuring this out? I have the same issue, where only virtual button A works.</p>
<p dir="auto"><a href="https://community.m5stack.com/topic/7919/cores3-lite-virtual-buttons-b-and-c-not-working?_=1764926737465">https://community.m5stack.com/topic/7919/cores3-lite-virtual-buttons-b-and-c-not-working?_=1764926737465</a></p>
<p dir="auto">Thank you!</p>
]]></description><link>https://community.m5stack.com/post/30277</link><guid isPermaLink="true">https://community.m5stack.com/post/30277</guid><dc:creator><![CDATA[ngolf]]></dc:creator><pubDate>Fri, 05 Dec 2025 09:27:22 GMT</pubDate></item><item><title><![CDATA[Reply to CoreS3 virtual buttons on Thu, 16 Nov 2023 08:32:18 GMT]]></title><description><![CDATA[<p dir="auto">Sorry, that was a mistake I made on earlier available information. and seamed to work with my fat fingers. I have rechecked, corrected and updated the document and its in the process of being re uploaded.</p>
]]></description><link>https://community.m5stack.com/post/22780</link><guid isPermaLink="true">https://community.m5stack.com/post/22780</guid><dc:creator><![CDATA[ajb2k3]]></dc:creator><pubDate>Thu, 16 Nov 2023 08:32:18 GMT</pubDate></item><item><title><![CDATA[Reply to CoreS3 virtual buttons on Thu, 16 Nov 2023 03:35:25 GMT]]></title><description><![CDATA[<p dir="auto">Hello <a class="plugin-mentions-user plugin-mentions-a" href="/user/felmue" aria-label="Profile: felmue">@<bdi>felmue</bdi></a><br />
Thank you for reading my bad English.<br />
And the idea of touching the lower rim of the display is good.</p>
<p dir="auto">However, it is a mystery whether there is a built-in sensor only at the position of the microphone hole at the bottom left.</p>
<p dir="auto">The documentation I wrote in the first post can be found on this page ( <a href="https://docs.m5stack.com/en/core/CoreS3" target="_blank" rel="noopener noreferrer nofollow ugc">https://docs.m5stack.com/en/core/CoreS3</a> ) under the link "CoreS3 User Guide".</p>
<p dir="auto">The direct link is here ( <a href="https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/products/core/CoreS3/CoreS3%20Development%20Kit-compressed%20(1).pdf" target="_blank" rel="noopener noreferrer nofollow ugc">https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/products/core/CoreS3/CoreS3 Development Kit-compressed (1).pdf</a> ).</p>
<p dir="auto">Thanks<br />
chama</p>
]]></description><link>https://community.m5stack.com/post/22776</link><guid isPermaLink="true">https://community.m5stack.com/post/22776</guid><dc:creator><![CDATA[chama]]></dc:creator><pubDate>Thu, 16 Nov 2023 03:35:25 GMT</pubDate></item><item><title><![CDATA[Reply to CoreS3 virtual buttons on Wed, 15 Nov 2023 13:59:55 GMT]]></title><description><![CDATA[<p dir="auto">Hello <a class="plugin-mentions-user plugin-mentions-a" href="/user/chama" aria-label="Profile: chama">@<bdi>chama</bdi></a></p>
<p dir="auto">interesting. I've never studied that document before and assumed there are no virtual buttons for M5CoreS3. That said, it is relatively easy to add them, but in contrast to M5Core2 where the touch area actually goes a bit below the display I don't think that is true for M5CoreS3. So for the M5CoreS3 you have to touch the lower rim of the display.</p>
<p dir="auto">Using Unified's <a href="https://github.com/m5stack/M5Unified/blob/master/examples/Basic/Button/Button.ino" target="_blank" rel="noopener noreferrer nofollow ugc">Button.ino</a> example I've added below code block after the <code>M5.update()</code> statement to make BtnA, BtnB and BtnC work.</p>
<pre><code>  {
    auto ms = m5gfx::millis();
    if (M5.Touch.isEnabled()) {
      M5.Touch.update(ms);
    }
    uint_fast8_t btn_bits = 0;
    int i = M5.Touch.getCount();
    while (--i &gt;= 0) {
      auto raw = M5.Touch.getTouchPointRaw(i);
      if (raw.y &gt;= 238) {
        auto det = M5.Touch.getDetail(i);
        if (det.state &amp; m5::touch_state_t::touch) {
          if (M5.BtnA.isPressed()) { btn_bits |= 1 &lt;&lt; 0; }
          if (M5.BtnB.isPressed()) { btn_bits |= 1 &lt;&lt; 1; }
          if (M5.BtnC.isPressed()) { btn_bits |= 1 &lt;&lt; 2; }
          if (btn_bits || !(det.state &amp; m5::touch_state_t::mask_moving)) {
            btn_bits |= 1 &lt;&lt; ((raw.x - 2) / 107);
          }
        }
      }
    }
    M5.BtnA.setRawState(ms, btn_bits &amp; 1);
    M5.BtnB.setRawState(ms, btn_bits &amp; 2);
    M5.BtnC.setRawState(ms, btn_bits &amp; 4);
  }
</code></pre>
<p dir="auto">Note: The basic idea for above code block is inspired by the M5Core2 implementation. See <a href="https://github.com/m5stack/M5Unified/blob/master/src/M5Unified.cpp#L1077" target="_blank" rel="noopener noreferrer nofollow ugc">here</a>.</p>
<p dir="auto">Edit: I just realized that github user tobozo suggested a similar fix before. See <a href="https://github.com/m5stack/M5Unified/issues/66" target="_blank" rel="noopener noreferrer nofollow ugc">here</a>.</p>
<p dir="auto">Thanks<br />
Felix</p>
]]></description><link>https://community.m5stack.com/post/22760</link><guid isPermaLink="true">https://community.m5stack.com/post/22760</guid><dc:creator><![CDATA[felmue]]></dc:creator><pubDate>Wed, 15 Nov 2023 13:59:55 GMT</pubDate></item></channel></rss>