From 71030bb7d1643e720ee03643e07c7be389a72dcd Mon Sep 17 00:00:00 2001 From: whowechina Date: Tue, 24 Jun 2025 12:23:52 +0800 Subject: [PATCH] Change the way of button mapping --- Production/Firmware/ju_pico.uf2 | Bin 92672 -> 92672 bytes README.md | 10 ++++----- README_CN.md | 4 ++-- firmware/src/main.c | 38 ++++++++++++++------------------ 4 files changed, 24 insertions(+), 28 deletions(-) diff --git a/Production/Firmware/ju_pico.uf2 b/Production/Firmware/ju_pico.uf2 index 4098f8130099a907e4b3caed46c5217f9017fd53..c78e44882380892c1d1eadcdceacaebef208af83 100644 GIT binary patch delta 8371 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 delta 8398 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 P4vAj)GUnd)O6>mvh~sMW diff --git a/README.md b/README.md index c3f0337..23bcc3b 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ You can check out my other cool projects. I made this project in my personal time with no financial benefit or sponsorship. I will continue to improve the project. I have done my best to ensure that everything is accurate and functional, there's always a chance that mistakes may occur. I cannot be held responsible for any loss of your time or money that may result from using this open source project. Thank you for your understanding. ## About the License -It's CC-NC. So DIY for yourself and for your friend, don't make money from it. And plagiarism that doesn’t even dare to mention the original author is not acceptable. Plase note that pooling orders and group buying for raw materials is acceptable. Selling off any leftover components without profit is also acceptable. +It's CC-NC. So DIY for yourself and for your friend, don't make money from it. And plagiarism that doesn’t even dare to mention the original author is not acceptable. Please note that pooling orders and group buying for raw materials is acceptable. Selling off any leftover components without profit is also acceptable. If you're interested in buying from me, or for commercial use, please contact me (Discord, QQ group, Wechat group or leave your contact in issue section). @@ -47,8 +47,8 @@ https://discord.gg/M8f2PPQFEA ## HOW TO BUILD JU PICO ### PCB and Components -* Go JLCPCB and make order with the gerber zip files (latest `Production\PCB\ju_io_xxx.zip` and `Procution\PCB\ju_button_xxx.zip`), regular FR-4 board, black color, **1.6mm** thickness. -* 1x Rasberry Pico Pi Pico or pin-to-pin compatible clones (U1). +* Go JLCPCB and make order with the gerber zip files (latest `Production\PCB\ju_io_xxx.zip` and `Production\PCB\ju_button_xxx.zip`), regular FR-4 board, black color, **1.6mm** thickness. +* 1x Raspberry Pico Pi Pico or pin-to-pin compatible clones (U1). https://www.raspberrypi.com/products/raspberry-pi-pico * 1x USB Type-C socket (918-418K2023S40001 or KH-TYPE-C-16P) * 4x WS2812B-3528 RGB LEDs. @@ -92,7 +92,7 @@ Here's what it looks like. * Infill: >=80%. * Support: Yes, better with special support material. * Glue on bed: Yes, it prevents corner warping. -* Files are always in milimeter unit, not inch. +* Files are always in millimeter unit, not inch. #### Parts * You have two options for the Frame part, choose either one. @@ -148,7 +148,7 @@ Each 3D printer and filament has its own tolerance, as does the acrylic cutting ### Usage * Attach the Ju Pico to a 15.6-inch portable monitor using VHB residue-free adhesive tape. Use 3 to 4 small pieces on the monitor's frame, but avoid placing any on the screen. Position it in the orientation that best suits your needs. -* Use the button closest to the left edge (when the 'Ju Pico' logo is upright) to set button mapping that matches your orientation. Analog joystick in HID report indicates which side the logo should be. You can use the following website to see the joystick status. +* Press the auxiliary button closest to letter 'j" of the logo "Ju Pico" together with the top left main button in the actual placement to set button order that matches your orientation. Analog joystick position in HID report indicates which side the logo should be. You can use the following website to see the joystick status. https://greggman.github.io/html5-gamepad-test/ ## CAD Source File diff --git a/README_CN.md b/README_CN.md index f2f089c..6f67656 100644 --- a/README_CN.md +++ b/README_CN.md @@ -46,7 +46,7 @@ https://discord.gg/M8f2PPQFEA ## 如何制作 Ju Pico ### PCB 及元器件 -* 去 JLCPCB 下单,使用最新的 `主控 PCB` 和 `按钮 PCB`,gerber 文件分别是 `Production\PCB\ju_io_xxx.zip` 和 `Procution\PCB\ju_button_xxx.zip`,常规的 FR-4 板材,黑色,**1.6mm** 厚度。 +* 去 JLCPCB 下单,使用最新的 `主控 PCB` 和 `按钮 PCB`,gerber 文件分别是 `Production\PCB\ju_io_xxx.zip` 和 `Production\PCB\ju_button_xxx.zip`,常规的 FR-4 板材,黑色,**1.6mm** 厚度。 * 1x Rasberry Pico Pi Pico 或者兼容的克隆板(U1)。 https://www.raspberrypi.com/products/raspberry-pi-pico * 1x USB Type-C 插座 (918-418K2023S40001 或 KH-TYPE-C-16P) @@ -147,7 +147,7 @@ Ju Pico 有 16 个按钮,所以你需要订购 16 个按钮帽。 ### 使用 * 把 Ju Pico 贴到一个 15.6 英寸的便携显示器上,需要使用 VHB 无痕胶带(国内也叫“点点胶”)。在显示器的外框上用 3 到 4 片就够,注意不要粘到屏幕上。你可以选择你最喜欢的朝向。 -* 用最靠左的按钮('Ju Pico' 标志正立时)来切换按钮映射,使其与你的朝向匹配。HID 汇报的模拟摇杆的位置指示了 Logo 应该在哪侧。你可以使用下面的网站查看摇杆状态。 +* 按下最靠近 'J' 字母(“Ju Pico” 标志)的辅助按钮和实际摆放下的最左上角的主按钮来切换按键顺序,使其与你的朝向匹配。HID 汇报的模拟摇杆的位置指示了 Logo 应该在哪侧。你可以使用下面的网站查看摇杆状态。 https://greggman.github.io/html5-gamepad-test/ ## CAD 源文件 diff --git a/firmware/src/main.c b/firmware/src/main.c index 14f0848..099778e 100644 --- a/firmware/src/main.c +++ b/firmware/src/main.c @@ -32,37 +32,33 @@ #include "commands.h" #include "hid.h" -#define BUTTON_ROTATE_BIT 0x10000 -static bool in_rotate_setting = false; +#define ROTATE_BUTTON_MASK 0x10000 +static uint64_t rotate_display_timeout = 0; static void runtime_ctrl() { - static uint64_t rotate_setting_timeout = 0; - - static uint32_t last_button = 0; - uint32_t new_button = button_read(); - uint32_t triggered = new_button & ~last_button; - last_button = new_button; - + uint32_t button = button_read(); uint64_t now = time_us_64(); - if (triggered & BUTTON_ROTATE_BIT) { - if (in_rotate_setting) { - ju_cfg->hid.rotate = (ju_cfg->hid.rotate + 1) % 4; - } else { - in_rotate_setting = true; - } - rotate_setting_timeout = now + 5000000; - } - if (in_rotate_setting && (now > rotate_setting_timeout)) { - in_rotate_setting = false; + if ((button & ROTATE_BUTTON_MASK) && (button & 0xffff)) { + rotate_display_timeout = now + 2000000; + if (button & 0x0001) { + ju_cfg->hid.rotate = 0; + } else if (button & 0x1000) { + ju_cfg->hid.rotate = 1; + } else if (button & 0x8000) { + ju_cfg->hid.rotate = 2; + } else if (button & 0x0008) { + ju_cfg->hid.rotate = 3; + } config_changed(); } } static void run_lights() { - if (in_rotate_setting) { + uint64_t now = time_us_64(); + if (now < rotate_display_timeout) { for (int i = 0; i < 4; i++) { uint32_t color = 0; if (ju_cfg->hid.rotate == i) { @@ -73,7 +69,7 @@ static void run_lights() return; } - uint32_t phase = time_us_32() >> 15; + uint32_t phase = now >> 15; for (int i = 0; i < 8; i++) { uint32_t x = (phase + i * 40) & 0xff; rgb_set_color(i, rgb32_from_hsv(x, 0xff, 0xff));