first commit

This commit is contained in:
Daniel Esteban 2026-04-30 11:16:53 +02:00
commit 02313ec8d6
13 changed files with 82508 additions and 0 deletions

9
LICENSE Normal file
View file

@ -0,0 +1,9 @@
MIT License
Copyright (c) 2026 GoEducation
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

2
README.md Normal file
View file

@ -0,0 +1,2 @@
# kuzu

7
go.mod Normal file
View file

@ -0,0 +1,7 @@
module code.madriguera.me/GoEducation/hikari
go 1.22.1
require tinygo.org/x/drivers v0.35.0
require github.com/tinygo-org/pio v0.3.0 // indirect

4
go.sum Normal file
View file

@ -0,0 +1,4 @@
github.com/tinygo-org/pio v0.3.0 h1:opEnOtw58KGB4RJD3/n/Rd0/djYGX3DeJiXLI6y/yDI=
github.com/tinygo-org/pio v0.3.0/go.mod h1:wf6c6lKZp+pQOzKKcpzchmRuhiMc27ABRuo7KVnaMFU=
tinygo.org/x/drivers v0.35.0 h1:cTK36tsI/S4Mg3hCPH0MBjV/ta7XKQ+wpvch4mVqgsE=
tinygo.org/x/drivers v0.35.0/go.mod h1:DQgKyHkB4G6IEOKVTAjApbKnWGwESN91EVJO+nMOE9Y=

View file

@ -0,0 +1,116 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="210mm"
height="297mm"
viewBox="0 0 210 297"
version="1.1"
id="svg1"
xml:space="preserve"
inkscape:version="1.4 (1:1.4+202410161351+e7c3feb100)"
sodipodi:docname="SIMPLE-monochrome-chip-go.svg"
inkscape:export-filename="monochrome-chip-go.png"
inkscape:export-xdpi="95.8"
inkscape:export-ydpi="95.8"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
inkscape:zoom="3.84"
inkscape:cx="189.45312"
inkscape:cy="225.52083"
inkscape:window-width="1920"
inkscape:window-height="1019"
inkscape:window-x="1920"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:current-layer="g9"
inkscape:lockguides="false" /><defs
id="defs1" /><path
id="path171"
style="display:inline;fill:#1a1a1a;fill-opacity:1;stroke:#000000;stroke-width:0.654225;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
inkscape:label="side"
d="m 49.267792,32.805577 c 0.563865,-0.0094 0.901938,0.301387 1.265556,0.575676 1.034159,0.92492 0.754477,1.748268 0.305407,2.559017 0.331863,-0.032 0.598474,-0.006 0.800468,0.10852 v -0.0083 l 6.147946,3.661275 c 0.683615,0.472434 0.679796,0.945051 0.720886,1.417485 l -0.0047,0.283703 -2.232939,-1.502234 -1.989542,0.795817 -0.143144,4.638477 0.914673,0.406177 1.283126,-0.738457 2.087211,1.182874 -0.08527,5.046204 -2.29185,-1.362191 -1.584916,0.4439 -0.125574,5.641 0.914156,0.406177 0.984436,-0.474907 2.011247,0.81132 -0.24753,14.686959 -2.255677,0.288871 -0.861446,-0.615466 -1.107943,-0.05064 -0.05013,4.928898 1.541508,0.654224 2.66237,-0.975651 -0.03979,2.354895 c 0.02232,0.409 -0.109384,0.740941 -0.745691,0.820621 l -6.59908,1.224215 5.17e-4,-0.01499 c -0.199049,0.02372 -0.423699,0.01 -0.676445,-0.02532 l -2.562117,-0.442868 c -0.02611,-0.109221 -0.0711,-0.231579 -0.129191,-0.353466 l 0.268717,-10.5823 c 0.02028,-3.725856 -3.883358,-6.849063 -8.553483,-6.962366 -3.196595,0.174233 -7.308946,1.848438 -7.46156,5.972245 l -0.185518,8.982398 3.063895,0.529167 c -0.09193,0.04284 -0.166264,0.08364 -0.25063,0.125573 L 30.736051,76.668501 C 29.23926,76.454822 28.683115,75.491625 28.907222,74.347712 l 0.219164,-10.770886 c 0.07767,0.129209 0.165481,0.267777 0.240295,0.393257 l 0.148828,-6.763411 c -0.06614,-0.02156 -0.180958,-0.05339 -0.257865,-0.07596 l 0.28267,-13.868409 c 0.352147,-0.979814 0.163849,-2.067906 2.391068,-2.672705 l 1.204578,-0.369486 c -0.243787,-0.863691 -0.851184,-1.500278 -0.189136,-2.930054 0.270312,-0.532405 0.626654,-0.938491 1.253154,-0.947746 0.328166,-0.0048 0.730578,0.09904 1.233516,0.350883 1.068004,0.606744 0.927677,1.592998 0.577226,2.6448 l 2.109949,-0.646989 c 1.215548,1.233944 3.083235,1.085047 4.641577,-0.984953 l 4.999695,-1.105875 c -0.371017,-1.090136 -1.085654,-2.135989 0.397908,-3.465422 0.4553,-0.231507 0.812585,-0.324257 1.107943,-0.329179 z m -3.646806,9.255766 c -0.513571,-0.0074 -1.048795,0.07175 -1.609204,0.251664 -1.776612,1.067738 -2.798447,2.512589 -2.983797,4.37596 0.04087,2.479663 0.646926,4.323132 3.630269,5.967595 1.884897,0.697413 4.057924,0.352443 5.569686,-2.585889 0.726341,-2.356916 0.589727,-4.233974 -1.491899,-6.86263 -0.95997,-0.695906 -1.985199,-1.130337 -3.115055,-1.1467 z m -11.397754,1.81746 c -0.517199,-0.0018 -0.995359,0.173577 -1.500167,0.323495 -1.350424,0.689488 -2.13024,2.012617 -2.287199,4.028177 0.167171,1.41085 0.283304,2.835543 2.386935,3.730005 2.206105,0.564665 3.874001,-0.157195 4.625041,-2.238106 0.1994,-1.892663 -0.01001,-2.780484 -0.895553,-4.525305 -0.934494,-1.02044 -1.664087,-1.315953 -2.329057,-1.318266 z m 4.290178,9.034591 c -0.19289,-0.0042 -0.384866,0.05072 -0.529684,0.199988 -0.04572,0.1388 -0.829173,-0.02164 -0.715085,0.09215 -0.254686,0.05858 0.280093,0.322947 -0.07091,0.579647 -0.498537,0.381193 -0.404132,1.007499 -0.05323,1.257288 l 0.401009,-0.13746 0.0124,1.455726 c -0.06032,0.864526 0.523342,1.335969 1.301213,1.688269 0.02012,0.0049 0.03874,0.0085 0.05839,0.01292 0.20842,0.08067 0.410365,0.08757 0.594279,0.04651 0.355392,-0.03937 0.587753,-0.223484 0.732772,-0.510046 0.0987,-0.146279 0.150581,-0.297587 0.140043,-0.418579 0.09596,-0.45918 0.07793,-1.052535 0.01395,-1.699638 0.296411,0.0099 0.577172,-0.329916 -0.176734,-1.396297 -0.346066,-0.236031 -0.617858,-0.421795 -0.898653,-0.535885 0.0043,-0.08293 -0.02129,-0.192112 -0.09974,-0.346749 -0.143824,-0.149458 -0.42812,-0.281758 -0.710034,-0.287837 z m 8.301302,6.241479 c -0.336746,0.08773 -0.449769,0.04106 -0.768946,0.457337 -0.537032,0.700402 -0.499197,1.902512 -0.03514,2.387451 4.200398,3.447696 4.356852,4.323871 9.043376,4.307747 0.502499,-0.0472 0.770444,-0.352242 0.804085,-0.915189 l -0.681612,-4.480347 c -0.150856,-0.298136 -0.466106,-0.455501 -0.945162,-0.472323 -2.886663,0.551409 -5.235934,-0.449792 -7.416601,-1.284676 z m -8.080127,18.727023 3.430281,0.592728 c -0.04935,0.0499 -0.0871,0.0971 -0.130741,0.145728 L 38.74337,78.051911 c -0.0099,-0.04674 -0.01384,-0.101651 -0.0088,-0.170015 z"
sodipodi:nodetypes="sccccccccccccccccccccccccccccccccccccccccccccccccccsccccccsscccccsscccccsscccccccccccccccscsccccccccccc" /><g
inkscape:groupmode="layer"
id="layer4"
inkscape:label="mano-led"
style="display:inline;fill:#999999;fill-opacity:1"><g
inkscape:groupmode="layer"
id="layer5"
inkscape:label="LED"><path
id="path6"
style="display:inline;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.272594"
d="M 29.428618,48.629416 C 27.586213,47.499507 25.58695,47.369575 23.559147,47.421582 l -0.170402,0.828058 c 0.03792,0.2746 0.201709,0.321113 0.322356,0.376362 2.172707,0.99494 2.87249,1.068129 4.784362,1.14659 0.272063,0.01118 0.775519,0.01635 0.762753,-0.315119 z"
sodipodi:nodetypes="cccsscc" /><path
id="path186"
style="display:inline;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.272594;stroke-dasharray:none;stroke-opacity:1"
d="m 27.645036,42.322051 c 1.253468,0.257902 2.060504,1.483145 1.802527,2.736597 -0.0039,0.01454 -0.008,0.02904 -0.01227,0.0435 l 0.0032,6.54e-4 -0.524366,3.006272 -4.538987,-0.934043 0.524367,-3.006273 0.0032,6.55e-4 c 0.0018,-0.01496 0.0038,-0.02989 0.0059,-0.04481 0.257891,-1.253414 1.483046,-2.060446 2.73646,-1.802555 z"
sodipodi:nodetypes="ccccccccccc" /><path
id="rect185"
style="display:inline;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.272594"
d="M 29.428618,48.629416 C 27.586213,47.499507 25.58695,47.369575 23.559147,47.421582 l -0.170402,0.828058 c 0.01423,0.02667 0.326731,-0.09392 0.454035,-0.09803 1.815731,-0.05862 3.45863,0.29821 5.052072,1.032392 0.124275,0.05726 0.353802,0.283242 0.363362,0.273489 z"
sodipodi:nodetypes="cccsscc" /><rect
style="display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.272594;stroke-dasharray:none;stroke-opacity:1"
id="rect186"
width="0.64652652"
height="8.505518"
x="-37.308792"
y="40.663177"
transform="matrix(-0.96616588,-0.2579215,-0.2579215,0.96616588,0,0)" /><rect
style="display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.272594;stroke-dasharray:none;stroke-opacity:1"
id="rect6"
width="0.68873221"
height="10.219508"
x="-35.183643"
y="44.067543"
transform="matrix(-0.98622221,-0.16542595,-0.16542595,0.98622221,0,0)" /><path
style="display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.272594;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 44.909979,47.26281 c 0.29285,0.403367 0.471502,0.852412 0.298379,1.442168 -0.228942,0.417549 -0.596981,0.696001 -1.292979,0.646493 -0.553414,-0.09807 -0.959853,-0.356164 -1.442167,-1.094062 -0.04571,-0.509048 -0.260918,-1.027512 0.497299,-1.491898 0.701412,-0.127158 1.377364,-0.118523 1.939468,0.497299 z"
id="path190"
sodipodi:nodetypes="cccccc" /><path
style="display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.272594;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 36.535443,47.488363 c 0.385434,0.47377 0.514036,0.962895 0.403354,1.448202 -0.174375,0.499172 -0.670714,0.571181 -1.202051,0.62589 -0.522579,-0.12448 -0.932227,-0.369916 -1.243249,-1.491899 0.06031,-0.78878 0.450404,-0.860652 0.862994,-0.997097 0.396589,0.02739 0.742325,0.02908 1.178952,0.414904 z"
id="path189"
sodipodi:nodetypes="cccccc" /></g></g><g
inkscape:groupmode="layer"
id="g9"
inkscape:label="face copy"
style="display:inline"><path
id="path9"
style="display:inline;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.272594;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 56.270465,39.900751 3.944979,2.654102 1.219564,-0.303858 0.45682,0.387057 -0.01602,3.480924 -2.111499,0.826823 -3.428731,-1.943034 -1.283126,0.738457 -0.914673,-0.406177 0.143144,-4.638477 z m -10.649479,2.160592 c 1.129856,0.01636 2.155085,0.450794 3.115055,1.1467 2.081626,2.628656 2.21824,4.505714 1.491899,6.86263 -1.511762,2.938332 -3.684789,3.283302 -5.569686,2.585889 -2.983343,-1.644463 -3.589396,-3.487932 -3.630269,-5.967595 0.18535,-1.863371 1.207185,-3.308222 2.983797,-4.37596 0.560409,-0.179915 1.095633,-0.259102 1.609204,-0.251664 z m -11.397754,1.81746 c 0.66497,0.0023 1.394563,0.297826 2.329057,1.318266 0.885541,1.744821 1.094953,2.632642 0.895553,4.525305 -0.75104,2.080911 -2.418936,2.802771 -4.625041,2.238106 -2.103631,-0.894462 -2.219764,-2.319155 -2.386935,-3.730005 0.156959,-2.01556 0.936775,-3.338689 2.287199,-4.028177 0.504808,-0.149918 0.982968,-0.325294 1.500167,-0.323495 z m 21.822441,5.990849 3.962549,2.354895 1.58905,-0.514181 0.526583,0.28112 -0.0155,4.624007 -2.035018,0.819072 -3.839559,-1.548743 -0.984436,0.474907 -0.914156,-0.406177 0.125574,-5.641 z M 38.51341,52.913394 c 0.281914,0.0061 0.56621,0.138379 0.710034,0.287837 0.07845,0.154637 0.104028,0.263817 0.09974,0.346749 0.280795,0.11409 0.552587,0.299854 0.898653,0.535885 0.753906,1.066381 0.473145,1.406234 0.176734,1.396297 0.06397,0.647103 0.08201,1.240458 -0.01395,1.699638 0.01054,0.120992 -0.04135,0.2723 -0.140043,0.418579 -0.145019,0.286562 -0.37738,0.470673 -0.732772,0.510046 -0.183914,0.04106 -0.385859,0.03416 -0.594279,-0.04651 -0.01965,-0.0044 -0.03827,-0.008 -0.05839,-0.01292 -0.777871,-0.3523 -1.361532,-0.823743 -1.301213,-1.688269 l -0.0124,-1.455726 -0.401009,0.13746 c -0.350905,-0.249789 -0.44531,-0.876095 0.05323,-1.257288 0.351006,-0.134897 0.644484,-0.228737 0.89917,-0.287321 -0.114088,-0.113782 -0.158895,-0.245672 -0.113172,-0.384472 0.144818,-0.149263 0.336794,-0.204148 0.529684,-0.199988 z m -13.077238,2.040702 c 0.549039,-0.0044 1.269697,0.74834 1.692403,0.934827 l -0.07958,0.437699 c 0.892597,0.484794 1.895688,0.693963 2.466516,0.88005 l -0.148828,6.763411 c -1.236445,-2.073801 -2.887702,-4.735146 -4.12998,-5.397086 -0.151099,-0.0051 -0.305147,-0.01034 -0.463021,-0.01034 -0.26382,-2.842757 0.113452,-3.604177 0.662492,-3.608565 z m 21.37854,4.200777 c 2.180667,0.834884 4.529938,1.836085 7.416601,1.284676 0.479056,0.01682 0.794306,0.174187 0.945162,0.472323 l 0.681612,4.480347 c -0.03364,0.562947 -0.301586,0.86799 -0.804085,0.915189 -4.686524,0.01612 -4.842978,-0.860051 -9.043376,-4.307747 -0.464057,-0.484939 -0.501892,-1.687049 0.03514,-2.387451 0.319177,-0.416278 0.4322,-0.369608 0.768946,-0.457337 z m -7.925098,2.477885 c 4.670125,0.113303 8.573765,3.23651 8.553483,6.962366 l -0.268717,10.5823 c 0.105839,0.222078 0.176493,0.45057 0.146761,0.585494 0.619673,2.503494 -8.358853,1.950223 -5.156275,-1.288294 l -3.430281,-0.592728 c -0.0076,0.103252 -0.0027,0.18762 0.02842,0.235644 1.812309,2.792298 -10.987766,2.042795 -4.456576,-1.000972 l -3.063895,-0.529167 0.185518,-8.982398 c 0.152614,-4.123807 4.264965,-5.798012 7.46156,-5.972245 z m 14.882812,9.374105 1.107943,0.05064 0.861446,0.615466 3.856612,-0.49351 1.524972,0.273885 -0.02325,3.681946 -0.628386,0.217041 -0.93431,-0.328662 -4.273641,1.566313 -1.541508,-0.654224 z" /><path
style="display:inline;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.873;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 47.512154,79.626052 31.584338,76.873819 31.76983,67.891408 c 0.152614,-4.123807 4.26527,-5.797825 7.461865,-5.972058 4.670125,0.113303 8.573833,3.236334 8.553551,6.96219 z"
id="path202"
sodipodi:nodetypes="cccccc" /></g><g
inkscape:groupmode="layer"
id="g7"
inkscape:label="mouth"
style="display:inline"><path
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.272594;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 40.439993,55.287031 c 0.201419,1.772473 0.139028,3.234969 -1.51207,2.830734 -0.777871,-0.3523 -1.361401,-0.823364 -1.301082,-1.68789 l 0.104223,-1.698489 z"
id="path1"
sodipodi:nodetypes="ccccc" /><path
style="display:inline;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.272594;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 38.954297,58.117765 c -0.396199,-0.17944 0.216777,-1.948928 1.406319,-1.049121 0.381452,0.288546 -0.449717,1.453356 -1.406319,1.049121 z"
id="path2"
sodipodi:nodetypes="csc" /><path
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.272594;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 39.429125,55.117609 -0.01758,1.248335 c -0.304757,0.496535 -0.609517,0.284844 -0.914274,-0.05275 l -0.01758,-1.494485 z"
id="path3"
sodipodi:nodetypes="ccccc" /><path
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.272594;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 38.488477,54.880248 -0.80878,-0.105492 -0.01758,1.485694 c 0.157701,0.467455 0.503974,0.545673 0.835154,0.184614 z"
id="path4"
sodipodi:nodetypes="ccccc" /></g></svg>

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Binary file not shown.

76040
hikari/hikari.kicad_pcb Normal file

File diff suppressed because it is too large Load diff

127
hikari/hikari.kicad_prl Normal file
View file

@ -0,0 +1,127 @@
{
"board": {
"active_layer": 7,
"active_layer_preset": "",
"auto_track_width": true,
"hidden_netclasses": [],
"hidden_nets": [],
"high_contrast_mode": 0,
"net_color_mode": 1,
"opacity": {
"images": 0.6,
"pads": 1.0,
"shapes": 1.0,
"tracks": 1.0,
"vias": 1.0,
"zones": 0.6
},
"prototype_zone_fills": false,
"selection_filter": {
"dimensions": true,
"footprints": true,
"graphics": true,
"keepouts": true,
"lockedItems": false,
"otherItems": true,
"pads": true,
"text": true,
"tracks": true,
"vias": true,
"zones": true
},
"visible_items": [
"vias",
"footprint_text",
"footprint_anchors",
"ratsnest",
"grid",
"footprints_front",
"footprints_back",
"footprint_values",
"footprint_references",
"tracks",
"drc_errors",
"drawing_sheet",
"bitmaps",
"pads",
"zones",
"drc_warnings",
"drc_exclusions",
"locked_item_shadows",
"conflict_shadows",
"shapes",
"board_outline_area",
"ly_points"
],
"visible_layers": "ffffffff_ffffffff_ffffffff_ffffffdf",
"zone_display_mode": 0
},
"git": {
"integration_disabled": false,
"repo_type": "",
"repo_username": "",
"ssh_key": ""
},
"meta": {
"filename": "hikari.kicad_prl",
"version": 5
},
"net_inspector_panel": {
"col_hidden": [
false,
false,
false,
false,
false,
false,
false,
false,
false,
false
],
"col_order": [
0,
1,
2,
3,
4,
5,
6,
7,
8,
9
],
"col_widths": [],
"custom_group_rules": [],
"expanded_rows": [],
"filter_by_net_name": true,
"filter_by_netclass": true,
"filter_text": "",
"group_by_constraint": false,
"group_by_netclass": false,
"show_time_domain_details": false,
"show_unconnected_nets": false,
"show_zero_pad_nets": false,
"sort_ascending": true,
"sorting_column": -1
},
"open_jobsets": [],
"project": {
"files": []
},
"schematic": {
"hierarchy_collapsed": [],
"selection_filter": {
"graphics": true,
"images": true,
"labels": true,
"lockedItems": false,
"otherItems": true,
"pins": true,
"ruleAreas": true,
"symbols": true,
"text": true,
"wires": true
}
}
}

668
hikari/hikari.kicad_pro Normal file
View file

@ -0,0 +1,668 @@
{
"board": {
"3dviewports": [],
"design_settings": {
"defaults": {
"apply_defaults_to_fp_barcodes": false,
"apply_defaults_to_fp_dimensions": false,
"apply_defaults_to_fp_fields": false,
"apply_defaults_to_fp_shapes": false,
"apply_defaults_to_fp_text": false,
"board_outline_line_width": 0.05,
"copper_line_width": 0.2,
"copper_text_italic": false,
"copper_text_size_h": 1.5,
"copper_text_size_v": 1.5,
"copper_text_thickness": 0.3,
"copper_text_upright": false,
"courtyard_line_width": 0.05,
"dimension_precision": 4,
"dimension_units": 3,
"dimensions": {
"arrow_length": 1270000,
"extension_offset": 500000,
"keep_text_aligned": true,
"suppress_zeroes": true,
"text_position": 0,
"units_format": 0
},
"fab_line_width": 0.1,
"fab_text_italic": false,
"fab_text_size_h": 1.0,
"fab_text_size_v": 1.0,
"fab_text_thickness": 0.15,
"fab_text_upright": false,
"other_line_width": 0.1,
"other_text_italic": false,
"other_text_size_h": 1.0,
"other_text_size_v": 1.0,
"other_text_thickness": 0.15,
"other_text_upright": false,
"pads": {
"drill": 0.8,
"height": 1.27,
"width": 2.54
},
"silk_line_width": 0.1,
"silk_text_italic": false,
"silk_text_size_h": 1.0,
"silk_text_size_v": 1.0,
"silk_text_thickness": 0.1,
"silk_text_upright": false,
"zones": {
"min_clearance": 0.5
}
},
"diff_pair_dimensions": [],
"drc_exclusions": [],
"meta": {
"version": 2
},
"rule_severities": {
"annular_width": "error",
"clearance": "error",
"connection_width": "warning",
"copper_edge_clearance": "error",
"copper_sliver": "warning",
"courtyards_overlap": "error",
"creepage": "error",
"diff_pair_gap_out_of_range": "error",
"diff_pair_uncoupled_length_too_long": "error",
"drill_out_of_range": "error",
"duplicate_footprints": "warning",
"extra_footprint": "warning",
"footprint": "error",
"footprint_filters_mismatch": "ignore",
"footprint_symbol_field_mismatch": "warning",
"footprint_symbol_mismatch": "warning",
"footprint_type_mismatch": "ignore",
"hole_clearance": "error",
"hole_to_hole": "warning",
"holes_co_located": "warning",
"invalid_outline": "error",
"isolated_copper": "warning",
"item_on_disabled_layer": "error",
"items_not_allowed": "error",
"length_out_of_range": "error",
"lib_footprint_issues": "warning",
"lib_footprint_mismatch": "warning",
"malformed_courtyard": "error",
"microvia_drill_out_of_range": "error",
"mirrored_text_on_front_layer": "warning",
"missing_courtyard": "ignore",
"missing_footprint": "warning",
"missing_tuning_profile": "warning",
"net_conflict": "warning",
"nonmirrored_text_on_back_layer": "warning",
"npth_inside_courtyard": "error",
"padstack": "warning",
"pth_inside_courtyard": "error",
"shorting_items": "error",
"silk_edge_clearance": "warning",
"silk_over_copper": "warning",
"silk_overlap": "warning",
"skew_out_of_range": "error",
"solder_mask_bridge": "error",
"starved_thermal": "error",
"text_height": "warning",
"text_on_edge_cuts": "error",
"text_thickness": "warning",
"through_hole_pad_without_hole": "error",
"too_many_vias": "error",
"track_angle": "error",
"track_dangling": "warning",
"track_not_centered_on_via": "ignore",
"track_on_post_machined_layer": "error",
"track_segment_length": "error",
"track_width": "error",
"tracks_crossing": "error",
"tuning_profile_track_geometries": "ignore",
"unconnected_items": "error",
"unresolved_variable": "error",
"via_dangling": "warning",
"zones_intersect": "error"
},
"rules": {
"max_error": 0.005,
"min_clearance": 0.0,
"min_connection": 0.0,
"min_copper_edge_clearance": 0.5,
"min_groove_width": 0.0,
"min_hole_clearance": 0.25,
"min_hole_to_hole": 0.25,
"min_microvia_diameter": 0.2,
"min_microvia_drill": 0.1,
"min_resolved_spokes": 2,
"min_silk_clearance": 0.0,
"min_text_height": 0.8,
"min_text_thickness": 0.08,
"min_through_hole_diameter": 0.3,
"min_track_width": 0.2,
"min_via_annular_width": 0.1,
"min_via_diameter": 0.5,
"solder_mask_to_copper_clearance": 0.005,
"use_height_for_length_calcs": true
},
"teardrop_options": [
{
"td_onpthpad": true,
"td_onroundshapesonly": false,
"td_onsmdpad": true,
"td_ontrackend": false,
"td_onvia": true
}
],
"teardrop_parameters": [
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_round_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_rect_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_track_end",
"td_width_to_size_filter_ratio": 0.9
}
],
"track_widths": [],
"tuning_pattern_settings": {
"diff_pair_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 1.0
},
"diff_pair_skew_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
},
"single_track_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
}
},
"via_dimensions": [],
"zones_allow_external_fillets": false
},
"ipc2581": {
"bom_rev": "",
"dist": "",
"distpn": "",
"internal_id": "",
"mfg": "",
"mpn": "",
"sch_revision": ""
},
"layer_pairs": [],
"layer_presets": [],
"viewports": []
},
"boards": [],
"component_class_settings": {
"assignments": [],
"meta": {
"version": 0
},
"sheet_component_classes": {
"enabled": false
}
},
"cvpcb": {
"equivalence_files": []
},
"erc": {
"erc_exclusions": [],
"meta": {
"version": 0
},
"pin_map": [
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
1,
0,
1,
2
],
[
0,
1,
0,
0,
0,
0,
1,
1,
2,
1,
1,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2
],
[
1,
1,
1,
1,
1,
0,
1,
1,
1,
1,
1,
2
],
[
0,
0,
0,
1,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
1,
2,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
0,
2,
1,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2
]
],
"rule_severities": {
"bus_definition_conflict": "error",
"bus_entry_needed": "error",
"bus_to_bus_conflict": "error",
"bus_to_net_conflict": "error",
"different_unit_footprint": "error",
"different_unit_net": "error",
"duplicate_reference": "error",
"duplicate_sheet_names": "error",
"endpoint_off_grid": "warning",
"extra_units": "error",
"field_name_whitespace": "warning",
"footprint_filter": "ignore",
"footprint_link_issues": "warning",
"four_way_junction": "ignore",
"ground_pin_not_ground": "warning",
"hier_label_mismatch": "error",
"isolated_pin_label": "warning",
"label_dangling": "error",
"label_multiple_wires": "warning",
"lib_symbol_issues": "warning",
"lib_symbol_mismatch": "warning",
"missing_bidi_pin": "warning",
"missing_input_pin": "warning",
"missing_power_pin": "error",
"missing_unit": "warning",
"multiple_net_names": "warning",
"net_not_bus_member": "warning",
"no_connect_connected": "warning",
"no_connect_dangling": "warning",
"pin_not_connected": "error",
"pin_not_driven": "error",
"pin_to_pin": "warning",
"power_pin_not_driven": "error",
"same_local_global_label": "warning",
"similar_label_and_power": "warning",
"similar_labels": "warning",
"similar_power": "warning",
"simulation_model_issue": "ignore",
"single_global_label": "ignore",
"stacked_pin_name": "warning",
"unannotated": "error",
"unconnected_wire_endpoint": "warning",
"undefined_netclass": "error",
"unit_value_mismatch": "error",
"unresolved_variable": "error",
"wire_dangling": "error"
}
},
"libraries": {
"pinned_footprint_libs": [],
"pinned_symbol_libs": []
},
"meta": {
"filename": "hikari.kicad_pro",
"version": 3
},
"net_settings": {
"classes": [
{
"bus_width": 12,
"clearance": 0.2,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "Default",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"priority": 2147483647,
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.2,
"tuning_profile": "",
"via_diameter": 0.6,
"via_drill": 0.3,
"wire_width": 6
},
{
"name": "POWER",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"priority": 0,
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.8,
"tuning_profile": ""
}
],
"meta": {
"version": 5
},
"net_colors": null,
"netclass_assignments": null,
"netclass_patterns": [
{
"netclass": "POWER",
"pattern": "3V3"
},
{
"netclass": "POWER",
"pattern": "GND"
}
]
},
"pcbnew": {
"last_paths": {
"idf": "",
"netlist": "",
"plot": "",
"specctra_dsn": "",
"vrml": ""
},
"page_layout_descr_file": ""
},
"schematic": {
"annotate_start_num": 0,
"annotation": {
"method": 0,
"sort_order": 0
},
"bom_export_filename": "${PROJECTNAME}.csv",
"bom_fmt_presets": [],
"bom_fmt_settings": {
"field_delimiter": ",",
"keep_line_breaks": false,
"keep_tabs": false,
"name": "CSV",
"ref_delimiter": ",",
"ref_range_delimiter": "",
"string_delimiter": "\""
},
"bom_presets": [],
"bom_settings": {
"exclude_dnp": false,
"fields_ordered": [
{
"group_by": false,
"label": "Reference",
"name": "Reference",
"show": true
},
{
"group_by": false,
"label": "Qty",
"name": "${QUANTITY}",
"show": true
},
{
"group_by": true,
"label": "Value",
"name": "Value",
"show": true
},
{
"group_by": true,
"label": "DNP",
"name": "${DNP}",
"show": true
},
{
"group_by": true,
"label": "Exclude from BOM",
"name": "${EXCLUDE_FROM_BOM}",
"show": true
},
{
"group_by": true,
"label": "Exclude from Board",
"name": "${EXCLUDE_FROM_BOARD}",
"show": true
},
{
"group_by": true,
"label": "Footprint",
"name": "Footprint",
"show": true
},
{
"group_by": false,
"label": "Datasheet",
"name": "Datasheet",
"show": true
}
],
"filter_string": "",
"group_symbols": true,
"include_excluded_from_bom": true,
"name": "Default Editing",
"sort_asc": true,
"sort_field": "Reference"
},
"bus_aliases": {},
"connection_grid_size": 50.0,
"drawing": {
"dashed_lines_dash_length_ratio": 12.0,
"dashed_lines_gap_length_ratio": 3.0,
"default_line_thickness": 6.0,
"default_text_size": 50.0,
"field_names": [],
"hop_over_size_choice": 0,
"intersheets_ref_own_page": false,
"intersheets_ref_prefix": "",
"intersheets_ref_short": false,
"intersheets_ref_show": false,
"intersheets_ref_suffix": "",
"junction_size_choice": 3,
"label_size_ratio": 0.375,
"operating_point_overlay_i_precision": 3,
"operating_point_overlay_i_range": "~A",
"operating_point_overlay_v_precision": 3,
"operating_point_overlay_v_range": "~V",
"overbar_offset_ratio": 1.23,
"pin_symbol_size": 25.0,
"text_offset_ratio": 0.15
},
"legacy_lib_dir": "",
"legacy_lib_list": [],
"meta": {
"version": 1
},
"page_layout_descr_file": "",
"plot_directory": "",
"reuse_designators": true,
"subpart_first_id": 65,
"subpart_id_separator": 0,
"top_level_sheets": [
{
"filename": "hikari.kicad_sch",
"name": "hikari",
"uuid": "e4c886cf-e4c8-46cf-a4c8-86cfe4c886cf"
}
],
"used_designators": "SW2,U1-2",
"variants": []
},
"sheets": [
[
"e4c886cf-e4c8-46cf-a4c8-86cfe4c886cf",
"Root"
]
],
"text_variables": {},
"tuning_profiles": {
"meta": {
"version": 0
},
"tuning_profiles_impedance_geometric": []
}
}

5202
hikari/hikari.kicad_sch Normal file

File diff suppressed because it is too large Load diff

45
hikari/qrcode.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 10 KiB

288
main.go Normal file
View file

@ -0,0 +1,288 @@
// Hikari WS2812 LED effects for XIAO ESP32C3
//
// Hardware:
// D6 (GPIO21) WS2812 data (20 LEDs, 4 rows × 5 columns)
// D3 (GPIO5) Pushbutton, active-low (internal pull-up)
//
// Flash:
// tinygo flash -target=xiao-esp32c3 -stack-size=8KB .
package main
import (
"image/color"
"machine"
"time"
"tinygo.org/x/drivers/ws2812"
)
// ─── constants ────────────────────────────────────────────────────────────────
const (
numLEDs = 20
numRows = 4
numCols = 5
numEffects = 7
frameDelay = 20 * time.Millisecond
debounce = 200 * time.Millisecond
)
// Pin assignments for XIAO ESP32C3
const (
pinLED = machine.D6 // WS2812 data line
pinBtn = machine.D3 // Button (pulled up, LOW when pressed)
)
// ─── globals ──────────────────────────────────────────────────────────────────
var (
leds [numLEDs]color.RGBA
strip ws2812.Device
// xorshift32 PRNG seeded with a compile-time constant
rngState uint32 = 0xCAFE1234
)
// ─── colour helpers ───────────────────────────────────────────────────────────
// wheel maps 0-255 → smooth full-hue spectrum (R→G→B→R)
func wheel(pos uint8) color.RGBA {
switch {
case pos < 85:
return color.RGBA{R: pos * 3, G: 255 - pos*3, B: 0}
case pos < 170:
pos -= 85
return color.RGBA{R: 255 - pos*3, G: 0, B: pos * 3}
default:
pos -= 170
return color.RGBA{R: 0, G: pos * 3, B: 255 - pos*3}
}
}
// dim scales a colour by brightness (0-255)
func dim(c color.RGBA, brightness uint8) color.RGBA {
return color.RGBA{
R: uint8(uint16(c.R) * uint16(brightness) >> 8),
G: uint8(uint16(c.G) * uint16(brightness) >> 8),
B: uint8(uint16(c.B) * uint16(brightness) >> 8),
}
}
// idx converts grid coordinates to LED index (simple row-major)
func idx(row, col int) int { return row*numCols + col }
// clear sets all LEDs to off
func clear() {
for i := range leds {
leds[i] = color.RGBA{}
}
}
// rand returns the next pseudo-random uint32
func rand() uint32 {
rngState ^= rngState << 13
rngState ^= rngState >> 17
rngState ^= rngState << 5
return rngState
}
// ─── effect 1 Rainbow ───────────────────────────────────────────────────────
// All LEDs show the same hue; the hue cycles slowly through the full spectrum.
func effectRainbow(step uint32) {
c := wheel(uint8(step >> 2)) // full cycle ≈ 20 s
for i := range leds {
leds[i] = c
}
}
// ─── effect 2 Row sweep ─────────────────────────────────────────────────────
// One row at a time is lit; the active row sweeps downward while the hue drifts.
func effectRowSweep(step uint32) {
clear()
row := int(step/40) % numRows
c := wheel(uint8(step >> 1))
for col := 0; col < numCols; col++ {
leds[idx(row, col)] = c
}
}
// ─── effect 3 Column sweep ──────────────────────────────────────────────────
// One column at a time is lit; the active column sweeps rightward.
func effectColSweep(step uint32) {
clear()
col := int(step/40) % numCols
c := wheel(uint8(step >> 1))
for row := 0; row < numRows; row++ {
leds[idx(row, col)] = c
}
}
// ─── effect 4 Stars ─────────────────────────────────────────────────────────
// Random LEDs glow in random colours then fade out, one by one.
type star struct {
pos uint8 // LED index
hue uint8 // colour on the wheel
br uint8 // current brightness (0-255)
dir int8 // +1 rising, -1 falling
}
const (
numStars = 8
starStep = 7 // brightness change per frame (~35 frames to full glow)
)
var (
starList [numStars]star
starsOK bool
)
func initStars() {
for i := range starList {
starList[i] = star{
pos: uint8(rand() % numLEDs),
hue: uint8(rand()),
br: uint8(i * (255 / numStars)), // stagger so they don't sync
dir: 1,
}
}
starsOK = true
}
func effectStars(_ uint32) {
if !starsOK {
initStars()
}
clear()
for i := range starList {
s := &starList[i]
// Advance brightness
nb := int16(s.br) + int16(s.dir)*starStep
switch {
case nb >= 255:
s.br = 255
s.dir = -1
case nb <= 0:
// Star died pick a new random one
s.br = 0
s.dir = 1
s.pos = uint8(rand() % numLEDs)
s.hue = uint8(rand())
default:
s.br = uint8(nb)
}
leds[s.pos] = dim(wheel(s.hue), s.br)
}
}
// ─── effect 5 Breathing ─────────────────────────────────────────────────────
// All LEDs pulse in unison with a triangular brightness envelope; the hue
// drifts imperceptibly slowly.
func effectBreathing(step uint32) {
t := uint8(step) // 0-255, period = 256 frames ≈ 5 s
var br uint8
if t < 128 {
br = t * 2 // 0 → 254
} else {
br = (255 - t) * 2 // 254 → 0
}
hue := uint8(step >> 7) // hue changes once per breath cycle
for i := range leds {
leds[i] = dim(wheel(hue), br)
}
}
// ─── effect 6 Rainbow rows ──────────────────────────────────────────────────
// Each row shows a distinct hue (separated by 64/256 of the wheel); all hues
// advance together, making the whole grid slowly rotate through colours.
func effectRainbowRows(step uint32) {
base := uint8(step >> 2) // same drift speed as effect 1
for row := 0; row < numRows; row++ {
c := wheel(base + uint8(row*64))
for col := 0; col < numCols; col++ {
leds[idx(row, col)] = c
}
}
}
// ─── effect 7 Column wave ───────────────────────────────────────────────────
// A bright column chases across the grid with a fading two-column tail.
func effectWave(step uint32) {
clear()
head := int(step/8) % numCols // advances one column every 8 frames ≈ 160 ms
hue := uint8(step >> 1)
// Brightness per distance behind the head
bri := [numCols]uint8{255, 110, 35, 0, 0}
for col := 0; col < numCols; col++ {
dist := (head - col + numCols) % numCols
if dist >= numCols || bri[dist] == 0 {
continue
}
c := dim(wheel(hue+uint8(col*12)), bri[dist])
for row := 0; row < numRows; row++ {
leds[idx(row, col)] = c
}
}
}
// ─── main ─────────────────────────────────────────────────────────────────────
func main() {
// Initialise WS2812
pinLED.Configure(machine.PinConfig{Mode: machine.PinOutput})
strip = ws2812.New(pinLED)
// Initialise button with internal pull-up
pinBtn.Configure(machine.PinConfig{Mode: machine.PinInputPullup})
var (
effect int
step uint32
prevBtn bool
lastPress time.Time
)
for {
// ── Button: detect falling edge with debounce ─────────────────────
btnDown := !pinBtn.Get() // LOW = pressed (active-low)
if btnDown && !prevBtn && time.Since(lastPress) > debounce {
effect = (effect + 1) % numEffects
lastPress = time.Now()
starsOK = false // force stars to reinitialise next time
}
prevBtn = btnDown
// ── Render current effect ─────────────────────────────────────────
switch effect {
case 0:
effectRainbow(step)
case 1:
effectRowSweep(step)
case 2:
effectColSweep(step)
case 3:
effectStars(step)
case 4:
effectBreathing(step)
case 5:
effectRainbowRows(step)
case 6:
effectWave(step)
}
strip.WriteColors(leds[:])
step++
time.Sleep(frameDelay)
}
}