From 0170bbcf23b5b7cda72a200589997e3122f6cfc6 Mon Sep 17 00:00:00 2001 From: Liz Date: Mon, 9 Sep 2024 11:09:42 -0400 Subject: [PATCH 1/5] examples for qt py ch32v203 adding examples for LED blink, i2c scan, neopixel rainbow swirl and hid keyboard for the QT Py CH32V203. also including compiled binaries --- .../Blink_QTPyCH32/Blink_QTPyCH32.bin | Bin 0 -> 27336 bytes .../Blink_QTPyCH32/Blink_QTPyCH32.ino | 22 +++ .../HID_Keyboard_QTPyCH32.bin | Bin 0 -> 31576 bytes .../HID_Keyboard_QTPyCH32.ino | 174 ++++++++++++++++++ QT_Py_CH32_Examples/I2C_Scan/I2C_Scan.bin | Bin 0 -> 34476 bytes QT_Py_CH32_Examples/I2C_Scan/I2C_Scan.ino | 81 ++++++++ .../Neopixel_QTPyCH32/Neopixel_QTPyCH32.bin | Bin 0 -> 30624 bytes .../Neopixel_QTPyCH32/Neopixel_QTPyCH32.ino | 29 +++ 8 files changed, 306 insertions(+) create mode 100644 QT_Py_CH32_Examples/Blink_QTPyCH32/Blink_QTPyCH32.bin create mode 100644 QT_Py_CH32_Examples/Blink_QTPyCH32/Blink_QTPyCH32.ino create mode 100644 QT_Py_CH32_Examples/HID_Keyboard_QTPyCH32/HID_Keyboard_QTPyCH32.bin create mode 100644 QT_Py_CH32_Examples/HID_Keyboard_QTPyCH32/HID_Keyboard_QTPyCH32.ino create mode 100644 QT_Py_CH32_Examples/I2C_Scan/I2C_Scan.bin create mode 100644 QT_Py_CH32_Examples/I2C_Scan/I2C_Scan.ino create mode 100644 QT_Py_CH32_Examples/Neopixel_QTPyCH32/Neopixel_QTPyCH32.bin create mode 100644 QT_Py_CH32_Examples/Neopixel_QTPyCH32/Neopixel_QTPyCH32.ino diff --git a/QT_Py_CH32_Examples/Blink_QTPyCH32/Blink_QTPyCH32.bin b/QT_Py_CH32_Examples/Blink_QTPyCH32/Blink_QTPyCH32.bin new file mode 100644 index 0000000000000000000000000000000000000000..2eb370113625303f6c9fef8090f3015e98c26cb5 GIT binary patch literal 27336 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 F +#include // required for USB Serial + +const int led = PA6; + +void setup () { + pinMode(led, OUTPUT); +} + +void loop () { + Serial.println("LED on"); + digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) + delay(1000); // wait for a second + + Serial.println("LED off"); + digitalWrite(led, LOW); // turn the LED off by making the voltage LOW + delay(1000); // wait for a second +} diff --git a/QT_Py_CH32_Examples/HID_Keyboard_QTPyCH32/HID_Keyboard_QTPyCH32.bin b/QT_Py_CH32_Examples/HID_Keyboard_QTPyCH32/HID_Keyboard_QTPyCH32.bin new file mode 100644 index 0000000000000000000000000000000000000000..75636bcf2c74a266c22bbfa50d17455852889688 GIT binary patch literal 31576 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 ABme*a literal 0 HcmV?d00001 diff --git a/QT_Py_CH32_Examples/HID_Keyboard_QTPyCH32/HID_Keyboard_QTPyCH32.ino b/QT_Py_CH32_Examples/HID_Keyboard_QTPyCH32/HID_Keyboard_QTPyCH32.ino new file mode 100644 index 000000000..0170bf79c --- /dev/null +++ b/QT_Py_CH32_Examples/HID_Keyboard_QTPyCH32/HID_Keyboard_QTPyCH32.ino @@ -0,0 +1,174 @@ +// SPDX-FileCopyrightText: 2024 Ha Thach for Adafruit Industries +// +// SPDX-License-Identifier: MIT + +/********************************************************************* + Adafruit invests time and resources providing this open source code, + please support Adafruit and open-source hardware by purchasing + products from Adafruit! + + MIT license, check LICENSE for more information + Copyright (c) 2019 Ha Thach for Adafruit Industries + All text above, and the splash screen below must be included in + any redistribution +*********************************************************************/ + +#include +#include "Adafruit_TinyUSB.h" +#include + +const int neopixel_pin = PA4; +#define LED_COUNT 1 +Adafruit_NeoPixel pixels(LED_COUNT, neopixel_pin, NEO_GRB + NEO_KHZ800); + +//------------- Input Pins -------------// +// Array of pins and its keycode. +// Notes: these pins can be replaced by PIN_BUTTONn if defined in setup() + +uint8_t pins[] = {PB1, PB0, PA1, PA0}; //A0, A1, A2, A3 + +// HID report descriptor using TinyUSB's template +// Single Report (no ID) descriptor +uint8_t const desc_hid_report[] = { + TUD_HID_REPORT_DESC_KEYBOARD() +}; + +// USB HID object. For ESP32 these values cannot be changed after this declaration +// desc report, desc len, protocol, interval, use out endpoint +Adafruit_USBD_HID usb_hid; + + +// number of pins +uint8_t pincount = sizeof(pins) / sizeof(pins[0]); + +// For keycode definition check out https://github.com/hathach/tinyusb/blob/master/src/class/hid/hid.h +uint8_t hidcode[] = {HID_KEY_0, HID_KEY_1, HID_KEY_2, HID_KEY_3}; + +bool activeState = false; + +// the setup function runs once when you press reset or power the board +void setup() { + pixels.begin(); + // Manual begin() is required on core without built-in support e.g. mbed rp2040 + if (!TinyUSBDevice.isInitialized()) { + TinyUSBDevice.begin(0); + } + + // Setup HID + usb_hid.setBootProtocol(HID_ITF_PROTOCOL_KEYBOARD); + usb_hid.setPollInterval(2); + usb_hid.setReportDescriptor(desc_hid_report, sizeof(desc_hid_report)); + usb_hid.setStringDescriptor("TinyUSB Keyboard"); + + // Set up output report (on control endpoint) for Capslock indicator + usb_hid.setReportCallback(NULL, hid_report_callback); + + usb_hid.begin(); + + // overwrite input pin with PIN_BUTTONx +#ifdef PIN_BUTTON1 + pins[0] = PIN_BUTTON1; +#endif + +#ifdef PIN_BUTTON2 + pins[1] = PIN_BUTTON2; +#endif + +#ifdef PIN_BUTTON3 + pins[2] = PIN_BUTTON3; +#endif + +#ifdef PIN_BUTTON4 + pins[3] = PIN_BUTTON4; +#endif + + // Set up pin as input + for (uint8_t i = 0; i < pincount; i++) { + pinMode(pins[i], activeState ? INPUT_PULLDOWN : INPUT_PULLUP); + } +} + +void process_hid() { + // used to avoid send multiple consecutive zero report for keyboard + static bool keyPressedPreviously = false; + + uint8_t count = 0; + uint8_t keycode[6] = {0}; + + // scan normal key and send report + for (uint8_t i = 0; i < pincount; i++) { + if (activeState == digitalRead(pins[i])) { + // if pin is active (low), add its hid code to key report + keycode[count++] = hidcode[i]; + + // 6 is max keycode per report + if (count == 6) break; + } + } + + if (TinyUSBDevice.suspended() && count) { + // Wake up host if we are in suspend mode + // and REMOTE_WAKEUP feature is enabled by host + TinyUSBDevice.remoteWakeup(); + } + + // skip if hid is not ready e.g still transferring previous report + if (!usb_hid.ready()) return; + + if (count) { + // Send report if there is key pressed + uint8_t const report_id = 0; + uint8_t const modifier = 0; + + keyPressedPreviously = true; + usb_hid.keyboardReport(report_id, modifier, keycode); + } else { + // Send All-zero report to indicate there is no keys pressed + // Most of the time, it is, though we don't need to send zero report + // every loop(), only a key is pressed in previous loop() + if (keyPressedPreviously) { + keyPressedPreviously = false; + usb_hid.keyboardRelease(0); + } + } +} + +void loop() { + #ifdef TINYUSB_NEED_POLLING_TASK + // Manual call tud_task since it isn't called by Core's background + TinyUSBDevice.task(); + #endif + + // not enumerated()/mounted() yet: nothing to do + if (!TinyUSBDevice.mounted()) { + return; + } + + // poll gpio once each 2 ms + static uint32_t ms = 0; + if (millis() - ms > 2) { + ms = millis(); + process_hid(); + } +} + +void setLED(bool state) { + pixels.setPixelColor(0, pixels.Color(0, state ? 150 : 0, 0)); + pixels.show(); +} + +// Output report callback for LED indicator such as Caplocks +void hid_report_callback(uint8_t report_id, hid_report_type_t report_type, uint8_t const* buffer, uint16_t bufsize) { + (void) report_id; + (void) bufsize; + + // LED indicator is output report with only 1 byte length + if (report_type != HID_REPORT_TYPE_OUTPUT) return; + + // The LED bit map is as follows: (also defined by KEYBOARD_LED_* ) + // Kana (4) | Compose (3) | ScrollLock (2) | CapsLock (1) | Numlock (0) + uint8_t ledIndicator = buffer[0]; + + // turn on LED if capslock is set + setLED(ledIndicator & KEYBOARD_LED_CAPSLOCK); +} diff --git a/QT_Py_CH32_Examples/I2C_Scan/I2C_Scan.bin b/QT_Py_CH32_Examples/I2C_Scan/I2C_Scan.bin new file mode 100644 index 0000000000000000000000000000000000000000..a8087a2837624625153e14d954bbb1c74abdaa1d GIT binary patch literal 34476 zcmce;dt4J&`Y?WGlF1|pB{`}G?Y3xJYwebr zkW6Aw1RNn?y>RhXcH1gcQ>_|;T-16&w~Dx0(Wq2gH`oFZTjYIC0@~g0zVG+*`{$>h zLuStPInQ}+=Q+=r>`eVK1|jtSCB2K3(8Blc=4^y+L&E?5HSmj{e}v~RXW}Q{zp=A? zzh4dH9f041kPbttgH#Wx0n*x~2yKG&cSr{zoq*H=`DY=03+X(h3y>~Cx&-MvNbLcT z59vBQ-^BUQ<~IDUdkbKK-`~HDP#UBqkk osLi(q~{>L3<+f+L_(56l0lL~QZ7Tt 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 +extern Adafruit_TestBed TB; + +#define DEFAULT_I2C_PORT &Wire + +// Some boards have TWO I2C ports, how nifty. We should scan both +#if defined(ARDUINO_ARCH_RP2040) \ + || defined(ARDUINO_ADAFRUIT_QTPY_ESP32S2) \ + || defined(ARDUINO_ADAFRUIT_QTPY_ESP32S3_NOPSRAM) \ + || defined(ARDUINO_ADAFRUIT_QTPY_ESP32S3) \ + || defined(ARDUINO_ADAFRUIT_QTPY_ESP32_PICO) \ + || defined(ARDUINO_SAM_DUE) \ + || defined(ARDUINO_ARCH_RENESAS_UNO) + #define SECONDARY_I2C_PORT &Wire1 +#endif + +void setup() { + Serial.begin(115200); + + // Wait for Serial port to open + while (!Serial) { + delay(10); + } + delay(500); + Serial.println("Adafruit I2C Scanner"); + +#if defined(ARDUINO_ADAFRUIT_QTPY_ESP32S2) || \ + defined(ARDUINO_ADAFRUIT_QTPY_ESP32S3_NOPSRAM) || \ + defined(ARDUINO_ADAFRUIT_QTPY_ESP32S3) || \ + defined(ARDUINO_ADAFRUIT_QTPY_ESP32_PICO) + // ESP32 is kinda odd in that secondary ports must be manually + // assigned their pins with setPins()! + Wire1.setPins(SDA1, SCL1); +#endif + +#if defined(ARDUINO_ADAFRUIT_FEATHER_ESP32S2) + // turn on the I2C power by setting pin to opposite of 'rest state' + pinMode(PIN_I2C_POWER, INPUT); + delay(1); + bool polarity = digitalRead(PIN_I2C_POWER); + pinMode(PIN_I2C_POWER, OUTPUT); + digitalWrite(PIN_I2C_POWER, !polarity); +#endif + +#if defined(ARDUINO_ADAFRUIT_FEATHER_ESP32S2_TFT) + pinMode(TFT_I2C_POWER, OUTPUT); + digitalWrite(TFT_I2C_POWER, HIGH); +#endif + +#if defined(ARDUINO_ADAFRUIT_FEATHER_ESP32S2_REVTFT) + pinMode(TFT_I2C_POWER, OUTPUT); + digitalWrite(TFT_I2C_POWER, HIGH); +#endif + +#if defined(ADAFRUIT_FEATHER_ESP32_V2) + // Turn on the I2C power by pulling pin HIGH. + pinMode(NEOPIXEL_I2C_POWER, OUTPUT); + digitalWrite(NEOPIXEL_I2C_POWER, HIGH); +#endif +} + +void loop() { + Serial.println(""); + Serial.println(""); + + Serial.print("Default port (Wire) "); + TB.theWire = DEFAULT_I2C_PORT; + TB.printI2CBusScan(); + +#if defined(SECONDARY_I2C_PORT) + Serial.print("Secondary port (Wire1) "); + TB.theWire = SECONDARY_I2C_PORT; + TB.printI2CBusScan(); +#endif + + delay(3000); // wait 3 seconds +} diff --git a/QT_Py_CH32_Examples/Neopixel_QTPyCH32/Neopixel_QTPyCH32.bin b/QT_Py_CH32_Examples/Neopixel_QTPyCH32/Neopixel_QTPyCH32.bin new file mode 100644 index 0000000000000000000000000000000000000000..1081db2bfdd75fa636f1556c757883f4037f7e3b GIT binary patch literal 30624 zcmdqJ3sh5A_Bed*O>S<2P{7N}4oX4r?QIY_)>U65K9b2`xj_e@c zS`(6+7!U!k5U`>=tPg&z4^mCF)ez(%)(1L8)X|DYpf4xT0ud|n?Q;XQGr#$L|MjhJ zt>3rSr|WQU&U2rA_Ur7k@5xs6s2PON|C96<3W65Cf14H{R0s+G+dA^Z?_1#g*i-n; z_wUrxzUPUNygGQ+Lu!E31nCr{(~y3686lEIXe^{?NQsaxLH=b(S0P=4^cAEINVg!} zhV)1PLSjhY!u$7-W<#4EcTZYi9ka8h?1nB|fp}8;)BrzljBq=06NdAx> zfwTtt7z@u3=r;_W5s)5*6bb2<|7OjJv#@WSB>A;oblmfCC%;BAJS+EDiT}yDC;gk} zHmhm(pW7b<-^$V3B_~z65*vw7Ny!TRZlt6gs9NGcN=VfdJRwz!;R&f)1W!oSBs?Ki z6Yzvojo=9>N6+{72l6ExYRl(KD55QYnS(ExgnYf5bGr5BdnI~T`1pd968GCD?|$fb z;tgWXUz^5NJn@G553im2)9IJbymSu#BL46~>!OR#d^zt@=H=L{(bptjB@xS1IXUX! z%(~e6=mtqsPEPI9YJz-v%iQR>wNJs@Q(H2lGix*8En`bsbXu)SP2}i3KST{NoZ9SB zsU~+iJU{Hb$D0j?ZP7#;L(@Uqs(6#Zz+2U3WBX*p{;`i_Ld8Uqrk~s)XCys=Jk=AJ zQaqbd8$7C|?|D=`ems=NnO%l?9OS%7iElc5y?0EVtnn;Z_3MwFo*#z$d5N4Fr{y#w zBmd<%9=UI%<^;|Wp{TJ?dE?y?3PK|@QhDP%rAjJ~fWP<`@g4lqFe`MZv^qymXma$C ziZ~0Qu^PF&qAwzqga)47kx=K(2a!-CN56R5a|)}rioR0t_%z<@-4Kw+lIZ5K&t z2@U(JX2j4)#hTjS*^^3X*w?(UR_u;WoG+&|?%eJNWFevHci?(%ecJ@;ZB zFZ9R{K9+wR%5NJRDh)&$E8B{qIZEt73m#|Q?h9;m7D4Hfo8#Z8$xXDfev%Lez{6W~ zlZ_3{!N!*EV8${LDK~cqiJIGk8F4sbB$E*H8ZBjB5#MDj<52bH<{;dYvYcC!TyJ|r-K~TI|Qlv<)7Wazx>8b;70x#Vpt0jlX>M@n1GRP%Xk_4q> zE{K)lN^v!HQ>>Kqij@&AakcEGn1>Zm1{MLo6_M~Hm4up7%BE3Dzg}^9<9Yu@n#ooB8^p@-y<*RTgMY*Gk6G4#$dG2pAkv7;w!`Ys=KWW<)*r%DI8rOTAFW@Q zqhG&JO+0@T>Nl%{abK{e<5stAwA^uw)IPidr)hb_0YfOM!BG8#dHCJ=X`Jmc%kRv<8jvg)>>1dY1|o+=6S+{g6QBD z{1$CK$9d4Iak5P{WyI|y&ZKHP;z1REx#`5S;AwqIWMlaX-qL&~(j`34N45aAdz8@> zdTC#deq@wic}d<B49i+j=;?$xOgKM97E1E%WNU%gg;uCDNVc> zk&F!a^D-orW#(t9|K=DIgc#9}8yNqdwY)!igb6@__D33#XyYTu*!&1$3F#xenHKW{ z1A*+o4Jmv32PvzOiun=?ansD6l}I>k(#CLty(^+;l(4tD$FS+Q{p^-*^}6@@FyOz- zdl2);Bl`U%Zj=ttP{SkX|PY##3CD8IHY^3kH-|-)$B>QmdK(@GqIGz_Uuf@R+SOVR}yNAp3 zg6A!CvbIG8)YZG+6nQT=?dBDP+q-6{NL%D&r8a~i+h4MyilT#^Z$5kL*=L@we?IYr zsu#xoG3SqO&b>AFnWyWYp2;be<>-w%D)hHH_OD)KILlbVky6?j!dNU~KYC`dzY9~O zL3amaxU-B1E?*vJ%Fx0}pMDjAY}ft;WoV;0&w^HsgO(xQVw0!TfxN1KwF^qA=V`fU zv5BWmL@pPjO@Vp~=0GX&A+4O!7X&mAq@2(f#OcycDFgdJRw2@$VJI=<>Dj>XbfHQq z?;Gn_i=bcnf--vaz4?N2V&B*zoibKDRw?ZZp_XO$q;3KD3gS%0EK_i)+PG*}@PhPs zu6%RE9HXWoxL)GQNhu+1p)OpGwb$ZwwLuxVD`;=E!m!sa(lrEAn#YnwAVQApWI_-sPO`y$YDM98+l96S3U#SW1)Kb0ZfBlw3 zmcJHf^0N||d~W6!ESW~BwU;=l)U%*4$(SKS5kYD#?;S+PY(@(`j7v^b0RE;$2Ju%i zR42-e7TGZ6$Gm$la7P6tD-y4FGNB=eS=}Fq=NV<(&7GZg79hN#k27(N`8w9nFUBi~ z<#|7FCnwIOt85!VmZgO*e*(9gR$-h(ja5F{A3|v;N-EQ}26zI4~Gz8r5jMN$C~YJ?HQFQM|=v zsIhIIQ+D!{&Zn6l<`tda{uJow^PV3({qY-TbG6(I^D%Rd4f^w9xs#)RSl4>~+EZm; zcz&4w%c~q z$u2xBN&AEKw&QJ}BU9SN(cEJ;eU|KYGUPJiw7+L^iMdCt`*S@Dg65X%;>_%idyqnV znp*@k8x#=>e+x5@kL0VhySZm@P8g>App5*H{9tVr2R6`xAdJ>e+c>Zr;3_AKV*L?jDN}3ThTAe0ZId=hl>Ke zeCdOb(0CG-5^o`S!u3@Aw^8^D^mQH})p+C`69~=6apPQsCUgqSzZKe_6YX*79o?S- zrP9DNEa4>`x?(B(Qn56=ue}CbL)QWSP+kNpcb3w4RCS4*CYjPBk4mqGbqGqxy6%u^ zIvqKBhj%ziw8!#(giExi`Tgfy#y#|g$i``azwyf%iu*fWiNI#YWXKWyT8s=jHb5$- zbof^ggQ*}P%>UyQ(Q@5 zEzz+wyC)DV=7L(VOyV%t;Fc~rrPvcx_cqY09XS6WE=!`Y%pOn>faF|RaVZ%B;m z=+}T&f^u0)jXBngYaLwvVlP>!aR6>!UI~(X>Mq=Sl9(fFKvy;pc#M>-|9vKy4$-@D zR{UK03TP$~+qVbBa{H1qF{D+1ubsb~S+9VvidO+&6)>}M0d|Q#4s;=n@mPa=5l!>g=5jqabks#2-#Cy9uK@~4hBRNn$mZ2I582@>|*EY<-5SU*ftqCuorFtmz{-#V=#Qhs7p*HH+vZ3k_-49Z$-uVdRJ7t#p!wE?6_qM$sGz^bfY?TOtWN z{zvlJL}nvVZA{mqc#BaZMO6}eR~W%V9`JZco8*`UI8_ov)^e~9m9kx3h$UBu4LZYK zULq%1|8@y4Ng&-3?GGp&yRlmmpkudnlVB}j>j!bon7av06>abAMmBJ3bVHKug}NVf zqjD`{-U$5OF_Y6_sW9IVpmTrF{b029opzqu2oyTn?i(kC%kSTGK>OluXjzeT#Q|-K zy6?*qpNwXxQ$)1*#ZA1XZ&*ogM4Z(VBwz09ZO@-C++Y@kAS#z%9fGO8XMX)khv(Lk ze!Oa*CdK9L&pl$ow8r{7(C13F+~NPEoHb|3I4pBImJBc@5(4xgWrA_UKudLVN8#kH z#ICaMMt>c3`{>m9iOV6PpG8AiZjtu^lMCEFW-D?BygP(*jk?@uHqwi*gp$t~*J-4l z{TV-$-#1R2U-8(BgQIg_?HKL9sQDpA@I02(Ju&2?Zhic;!F`wczCO{RzA5q-pofIm z8k6F}6uCi5Xz}k=lS6?L3~93*IeMRF@;w0$-Hb#(4)d7dtfyo6a(2gtuRXVhK_0dx zXLmTeJ-2qcFHZxzEy61?p3Ub%86qLOnE%`02s?;bkX*V ztsW$1Pza`GBJEIxNVgJn5F6$NtgQo2)lbkX^keBGDcwce-D;6;GTN&9NLgB48rzc? zP5-{&YIRu)V{VaRng2`)SVKXr~qn))o_;G*d;bLwfMV>yB<&(yqA_Fn&NVgySX&Bw3v)YEYrCoy!W3>WMF2%#o!^R z^G}kskn_q!u~xM3YDjby2b3951JWC?_;(^>wUfcRuDts$NYx72ga|+r5Re+ehlo@91Ex8(%gLiJs!rjORkVp zfb!pwS5epV-%DUFaR~eEs^~+KBV|_#@cdIOY~KLL6C|EZtBu8toECnQ>%(W$ym=f_ z>W?C|kxRpn1-8Z(^I;U>$|>q13-260X9oMtG0!{#AL4*+U>%D3$+r{Vi>{Jf-wcvO z?7rFly)Yw53pq_PucXD9k0IRB-}4_Kq(BP;lo&#Q4`4l40ua94|1*STE#TE!*N?VG zvn39M;p8N0BZlw%spC#z_FMbEosu{@W+peU8hZQ9?~Z6PbW_Z!GU1d8$Di{Ot@g za4O7f(8-7!{3%VNBi_sb_oki#Po1nm8gOfdMW#J%HbCC|V^idKBuA;IlZt@a-vb_NQH=cF$N` zwsd87$8ZgPtN7D(C-CusJ{c`R@t>_pbdZz z1ugt5uiyP?jo;}NJop6pa53RB#&3l+i)=^i+XKMqzuy}nKW3|^UB;PPI~_$@(A>f8 z(q|K(kMb_b+j7ufWnGeY5~g?aW}>?^@snsikLX@lkl}t@UYi@2r__IkL>XWqXB5x1 zn2dz)?OG>2t2QenHR%t03Vyk3Ci+&C-7(3A2bCbqyqf;C}t zNN``Xrcb*wg3qTXe^Yr1>wUC0tRZy>E2yX2B8q+JQz zA<{LAaNXc;*@{rwSDUIYJLkFO8NNJeym4H!v9X&3jj9FyF&G=YWSbK#v|E7>9O2lG z=myRM{!?%#(;ovVwU4-Cg|XMJ;xw_`OP?zP#pLs#qq2u07l)*kW0@pp``R(x%Z-{o z67wNrHV~MXmOim;h%CGSlz(6VL;L=3-u#U^xQbTfTqwXa5oZqavAY~{dQbAnHA)8>e=?hMu48}0y zb&|)gg!NzVeD8^OCWlPNJ0-?uL6ycU1rae-l6v~e=Eq}P#@YBe{bksL$-0xK_aF(C zqknrka3aatn$WW`GEI3-(YLThk_wV78O`Z^KxuB?NSf|NE+<|g$7?qP7NS9s$tk5` zpb!1{>uD=5U~UQg3iObvANgSPT#1Ob>cDrs#!J_L7nv;?kVYng?3F&5kN|tj3k4s0 zo|EIAj5>*^NW)kS3g8%Y46v(@qBJoTMoky!@=nsdt^GlyHsYnju#=FGWd)H<`MSs& zkg1_7fo||BW?wR943h4WZ|>jpo`d!sC$*3uG~ zKS^lZ!QT6k2@Ks4$QruE40!3?rQP?QOn6+5*R<`&_Yy#h!&}R+uo63HvI_cDZlpjBi=NTPAszOu=R%NSI|gr zjlUV07P1)sX8Q*+pPM+|$P#oWF4OzLeqYx|vT(*oX#)1H*RkWiK|!kItl4uII%_&B z>Js`X(!t!MeK4P;G+t@kwoXE5G|RF(rq)62Kj7LCt;WeF^qfkR(T8;a`CO|~A|{p6 zFG*$GV2aQ|;be`_Ur(x|$iWuKV%hN-)A8>cb)iny zEF%|BEH@UrVO2m*BomwlIIctnRuASl&~a)O z*`i|u2gkCZG7>EGjtytoNJ?(hHHZuzPfyeV+1^1ND;xA<-IGLjaD6E*yE44!@$|=V z?>yCqz`AZ_mr#*#o=PXcLG+*>PcI z{L|-g{H0<7>@R}LrE+@>o{pU@vz((6pEc7V3w}N2@p;_nt|P!P3KQ8xo+3{}{gcre zx0LD;Vc5j79*~EDe7F@c&s$N_HdGNqeAniX^NZ< z3rQwVmdnA@Ns^~hn$+4M9Zwrt>~uz>GQMkx)-k9yIC z<9I!c+Al?5y@|*s^`hf>=*&M1~L zzzYe|PtL>a9%4#40q7DmkvpC00Q%{QOmlCguUd7O#@8Qx?=eiHK+7WV7of$@%_~z* znJ99pi>zOW;!Mb%b&q7=yq0;v?_ab~#aeq?hA7j* z16473pm_!|e43{twH9lhpv8&87{CwQ6Q8lGW2hwAK2`A9$i+-JMX2G-*G~Nx$~5CO zio6DA>MA2}tulf@<8^TIij?6n`*8$HGha6QRtC=Q#UrW zES~6_QMs|q^RKj?TE#A+5Z2V-xp@!)t=((9|0D}vKVsC~Cf!>c#}4bR zKZWrD5^@yZ<)HO3-;C1axV@t#Ma}7tjpkwv;nNmanvAoL(8m{@?Vyc2Zd5lqiVGsY zJgm*vF(5%kWDi>PxO)QiN$^q6#UwahGMbbZQMh@8%l`B_Wwc$jQ5*$FrM>!(48@`PYD*Za*U@n>MPh| z5F<9V7{k7L;^;3Zp|I7xa!PjVlJ5k4d2#30LJv?6+t&d~Tt4kLQ2xzj(A98y410Xf z#htf7H^f9HJq{i%L(G+eqvv6N)4HLHUE7C3_fpbvVOrAO9+?YVNDEIs(TrDQ)I--xMhRuzJz!L(Xu|HW*qj@ zpasEkrl-L!fjNK;jdNCod<>Bl*k3E5*jJ7qRq2Y?j0Nk}l4R;q%@(VJ<8t>~v!h?I0VIS zg8_^I2kllKtfhxc~wm9t8$xt%0$u8ci z^0k;}_9O&lC+cu-^NM3_N%S`)6GnqS&E=?E!FD#2L*dUN z4{cV4Qs~O&HI>Q`@Xi92U`m+~Gc#t9qMn`&_PW~0e&3DC1lxTE$Ntz3S`f$hfSp?s zhLY$m)iGO}V?s<^OcJ+8#Y_){_?Lfc|LtgdyQ3X3jp0y(DaLI(p>3z*(U=q%Z8lvG zGlLb(hP9%-s(Kh3PF}q2$Zi=>F~u;GkumM`0JLj#crK>aj*XcS1Lq1o&KvO)!LkC) zoGAy-eoxf(xLshywl1lK^*;~>^TD;EZsS^U=1jS#XZWhGM(RP}_m6Qu;63<9c5CVZ z`2CS2MjagA6lbazL++0*eXWLQOjoTp1T?-RkLB3a{p6eSNEN0Td~yb-4+#shGUb$Z zHwX3G{B}_qyj~k>#^+;PfnWII@UBGDv?kH>9E#72k18Vt zVs_}x=I;u2MoxQ~ptMt=}%y5MARE&8a6U40auP+Q=RDjR#c8zq@dD$GrS zo@t4*X6CXRwvlF_LZC-_rpTU`rWSqZhw8`h{}@B06ti7R}qaxYgJGC7{xSX-VcXnCIUJ+%F#cMJJ}h zQ3`xtae`{18;xfR-uHPcE;@OjFH@!>-h2Y%*Xg$l^utzI|1BxM$iHzs4)Rm^FrcSr z6!oxgbLF^dX#y^70(@LTnATE0Otg&qPFVqPR6*KB z0hJaB-0vQ0dcY1fBdIz`+K)>Kh>t?sDwRbPy6G$uIHS=KTws@Ax-6+YQMs|v#{&Sx z2oKrK-2g>5#9oAK= z;a&-F{?GGE79+W*HP8)b_hax3m758W2dP(;9~p8+br&PEMp?fAY#4vGZT42?l&=Kb zS*;Iox7Y$_Xi8KDJ~34Q@COQ7LTSeBW#9WHeyo5WthEEb^I_mSJW3MF%>ylE#( zmA)uP(LRIGdKyOTiF2YvOVNLdX>$4EB?dg+|>Ih|Bx1 z9eTlj8ljhb=w-1A_mk2f+GQ{rZbz!{Oral4u|27~0dCnH< zgjLMItN2^zrW|QbEck>|ude+0eZ!Uh9D8Oa}A%AWVg;gi+A`y4-490WeZM$C18y=8PbX~s7$t@0cIAw z*FS+RnNCbe$hWeVHt@v|f-VSbsp2xZl%|;tGwKuTV7=~=+AZ2>U9Aq=bA!$)a;9xH zV#77WrfPpVCyw8$ar#$d4my95>F=k@4LqkIB@|wf_~Mjeg9fJ$aqQL+1 zht<8fWbgx=kKbVB;f*W=odZ2F-hNs_^B`M}6`v>;HEKv7pU(euw2yc=Ij{Hwzq*g+ zZJ`L)9Iro7Tvcpr*1&j^kTM7CSm7PUhWG5&^G7@v=YR6c_DdK2=l1;{jJ5{>mcp zp&dvhK|YY)mtg)M;dujX1Y_FZ{n7{{P!^%tt^&G}G90F>sXuL3#aRWa@{@^;y5AGy zM^1u5BVDA@>mm~{UR>5yE%XrD;Q1I!}+*NiH9R`snSIc4&q{9BNHR`fEgzDj{Zo#?z zP#(Lnea7+gR;_zW`+cLvMetsZZXD)eJfL(2u{n=;P;1szAFAmynH>>KV`vXjuf z{+q=MDnXXG3+be2_6Veo4-qxQAvPzpB(gyOu#ErcHW@DvVOr#%;!s^L{CiwEdV3uDv4K!YBZ5x zNf}^ua2RVRPwS1%vc`yM;JqWgz!79&H4-CC3&5X2ODEzt@V!WZ{*~+O?@V+23RWhd z81Y%*2qHL%NI7MM6(nI~|F(iF1(6k^r>3JP713jo{`?b)`+(2;a{&AG>p*KeH&2nq za<9i$+C|Od(Z@O}oehW6+U5WxIyDQOD95=)!W!5mpQ*8ZL1ci$EKK5v$0B>n9lyKTEc#_TLM1d33rh( zRz|S=8bX%tn1oLYnmLvqK(cfkRR(+65{XC)eOxpz;z>|FQS{u-4}KJ zcMd1X;?!ZXd1V<+WAks(5gW!cUT1e{Uwh8V~Q&J`sQz(uwL5-!20q0;1*M7aDJQ_m$>lA-sOX{j(=nZ+o%`X z`BAq*6w4vs(|^|aDF>&S!QNY#k}N<;hYt%m5#EkS`SlMPoebAFjT*txDNa=n9AMDykGrH<$VyNIYQ-bj=DBV=Lf!b2T@QTcpOg0-KF$ZOyQL7 zN;u5_YWWn*d;4_maPL=28G&Lx!#v^EI4=8m;&ms(X%VZA2~3h*QDMxx{pbcCAHIIn zO~@{_Ijd~7He<7nD^LQ09bZ__m0D#2zf?&H(>k5(a&$`pnTVxp!=<#KbZiv&GfF9H6W?4TR(v_ zj?ak<_apR?jH6&L{%1Ypvl#20=fTgSoj2*tNnk0$>3EW*QFY9WcLH#t0VV9)or3>K z1o1S2WxfdFMXinGCfyA1-nn!$nmqCa>)`7M;AF<^0{I5AEf=h*x+Q1W(ndICBDDPu zT-xabD;sJIIz9DEP6@t#twIa_5pBHHBM(|_q``g~Icdf9*}v1!8v8nMpH42jF16WH zA9Ye446z>CT5Fuu*LuGR!w~d_aw0@?g!`fU33uhS!Z$47XVT8Fu7iV3D(*B|;A~aHHqZz|FmhJe;~6>&=btV3j7qDlpkbc_ zX&0p3koMAGgDXF()Pj9ff8!V)vxf6Q24AhL7@ZN|<1iWlfxc=? zti?eVHI3LpbxS_w0VCj>dje_^Wp4O3#{s^3Z9Yie9NSqZ?%zm@5$r|J(kL>G(0tQA z!_312=LyxH{>|4u(m z=s>GK#m!?xuz#8#h7|LXHa0=r{;wep+Z)J^k%BZ1Lu}ZmV$mrHV#h{MIeK#Zb;sI)0i90fc;n__!)Lo zv8%CtqF%l}6gZU*MVwGyrfUH%87{`qC`;%Dj9K{Ff?S^kyCA#LK%;6%MYOxD{Q)D! zC!~Z%xzm8XJKex#utu;xUC`?3`aSgrl)$@idIx(1gnc#xObA8z-gow6oT>G*DRPh6 z;8$&2MAvaEUfOegEyT~!{RP%P!IwwThYOTJ-a4>Hq{=XFLw22Wv!fezD0IrI?jW`B zHyNxe{0ky|M@u4vl8BL#2+SSB+>DqBF)zdr!Nmn9Oc-l%x$IkBbj*b32_x1qAH<-P z4~#F2LCe;`8I82wkH6|iBz+SHkq)zE{5`*=0ENn>$DSd>Q*6mS#Q$+6;(z)T;>$w8 zZ?TSGY{>}scFdNe6ivxQ*!RfF{DaP(nk#)7PHLihKF?u)>_fXPc>E+wpXw9i%zVM~ z@naX7kv}_t@pcb0F9s0yO?wFNy!nHTFa#FKHGkrkF8GU?;Ae>j?_x>=;QC6Uu1Ysk z@NfR0W%C0_d}fhii%{M*uww!shG_lx*#Y=e^}Yf3$Vs9(8AwV6F#}qsw#md*S^+*f z0KEp0;;@_Qx$*ZdPJr{aF{=iBRkm5S+vfN)P(kQD_+@O*KoC`t%4Eny7=F-zb=Nm3 zx0C^Q!*_Yb_aIWOn!blRVg0;65t^iRgJ8W6cL8+-{RS*0=WVdH>!$X$wPIgrtT~zk zpKj02GrtFF3-mDIfJ69N6VuHW$%&G9^Y^iwmi^Twpqy|t79xcKK9ES+bp`*#bi>fF zVq0TizZ52aV=Y5_?_v$HY)u#i=hxC2+vGu!1wLsY&*2(B=-72$Nn8_#9=>mC zP?kd40;y0^2hTd?R!Aj~N+E57v>nn8NgZR6)EO^H8U`^3w)(IDy#n8+IukX(z5RFv z3oa4pqK>0ePIC?d!H$JaIdd4^e!y?%e(xAv9e_?;)W~p{Jdly)fujM(dftCbUCJpw*Y&i(v3FDIjqP*AusRm@4A>yyj}q<+G@MuV zt{sAz-WS6O@|C$_i0VT8*2$=AtMMP=5$`i^8$&>=3$&zOXZQYu?lkkZ40P32KWXzM z@JFU%zqza-+Wcw|@J-PU`B>dx!LqfygqHefY<>7(!H$Ybhyw3}hyb)y`Dia$n}t^) z{eD8!3tYexlq_e>*|KyL$H#0=0& znc_u=9oI!BS!&R#RN^Y%OpD8m)qxPFoyUNG{+MkuebshViPsqReRcSGwb~A~k4@b% zmEF`mQB9rW7GZhyLCbNnkXxY)`w4N*f1k_xaF-F!B}Y!_uyp0x3SUn^dkQpc|m z3mSwi9e{o2ZNxW+gO3KJ`_JQxuISJsYZ& zIyd4q&?Y;1W0qP(>e#mi(P^JXkqoMg3zvy%&DeX-{@952o3T{1=fn995t`u{Y>3bVnv#opf68nIGB1F8>DYn8f~b09FvBYG1eCdO8$v=?$c`cDh+r zL#If5k!Dz~GC&_M*k0NLtGx=Zc9l*E{DW6~(RP9MF|Ydfk~3i4cYdgx=#PRAALCvP zl4*SqX5Y!tJp(W%ZFCUEEEg#Qf4&mIju_t6#y1yM8kJ$a>g=&2qYF zS>KUK8|P%gOlH7JPW@)OlcMoH-y2A14>_@B;8%;6vW7;n-Q2D^ViEQnZ?&Ui0(K#O zNyNV46_08QN>>KjA_X)ornFzqsuyd(yX!aI#Bx;n;->r+vo>LB$f=n1*{IGSbS(}% zXQ0$oe3#@dp8L-;2gwHU7XsBgi}Md{2T!P%F7lL4E7q~U@}kcb$sp@Mvfjn^9kz=w zhf^!A?g9N#>%4nSu}e`mZGY}Z)1t+(T)y>1&|CA*mh0GoJ;L52`=E0Wx4@E?9~Xm8 zlre*Sw5VN%U}avDNt0f?hkRDpU;%zNHqS&dU0hy%9&71F@YTVN?t9E@eoKM3H(;lBb-nl0GEo55;U8zi#a>e#ZeGOX28%9LSNxS0W*eY&EKX*#RUZi92K z(>j8A``%q^!}7P+ha|n7iwMnZ&^Xy{wH_>oLMzx1fj245AqULtdwg1W{w9`o*eazU zqCrwOv{0ep!zO`84D=g1Q+>v+G=hx^32b!Q&Fp!AVLX2gFzv70c{3;b;D&EKwZq-m zH_L<7QEu38V{AHvVLWClJgI~oR>>Y^F%2UZ3}heN+3l%~>co2$y#D~(_I~!kC0(A{ z8*UzaaS+E%o2etkg53f>vD-1Dn9UWR*t$*bqX8d{aNkZ_fi0E60>HqnX*wz`DdaZH zcNVNq_Lshx-5nM9EZ%b=`(RW@46gkXSmU)(*Z8D`-2EO*cW*@xK=BZus_c)U%bU9)(akLA>vi$|u!Zpx3P8WF)@cnndcPs8g z9lRfW&a2ix{&?iCgSFrjMFH9*NePMN)iV`|Tq4AQ_Pm?kAZtm~LJtR{>S8NkKYwt^ zdF5C!QU;3=>_RWcsF-&i2T#ay6>~|Ws+Piz;_h_BAEtu*E9Ytg@&a-nd%~Db5sx1Y z+NXqQ@qCxv9HtH~;E#a+BsmapTkT~KS8kDF z`i4kW_`VR;j>Z07Xpuu@V-7iGT~1Z)-Qz9i=c|%3cmRuH1l2gAsxgb z2eSWc7vozgXhkmU<+jfTn`#wAZ@25vth`_?c=lFyAqS2mG;96+=oz+<3*ac@n9L_#@N{TwO5Eeb~783}~*+%o^GsB(XnyT^4cV9wSNccfWG! z9>3NrD#soJc`khfz7`VR75E*Gy?ssw)*lIT%5KRyZDUL#MCXhQl&SSfU zUGRp(_$0g*bjFe%EPHlZQWR`I_=D5I&4#+>cVo4I!Nmj1lC9P2@#cGZZrwEsk zZQLyZ+Y4ao4`jdE<2RU9Rv>VT26jb(yg3vid)i69v40qJRv;x&zsg9ZJxNp>sj$S` z?3Q*?!NnI>T9W8ya=#77&m^s-3A?44R2ZJmPo{@a6+Kw+Vm{13axj%`-VL@(-Bj%R zXIFZWjKXhtB!lkv&Ns4>D2O@&NEnD{7;><=LUiN&(b~Zj4`qZ7mzFzL`f5XaLKh4= zh{wIaH_B(7_>_Ukq6kb&mOIQExR(jAx6FX?o>Fq6B*j)^3yR(v9iiN=R0l6Ge`$Ws za?OHod%?7O;G1N6g~kC?#L&rOFP}`ddCoGlW83AErB4A>5eo}SzbJjG@=y4=Y-097 z&(}o7|K5L_YdDHGR9+9iIUL0hmB+)U!_5X%Oo{C<&J~_%3kxI!Nn1Xz8DAW8vf|=jByz6^?!EE%-hkzRCUP9ciOwr(W>X2A+jmdwNnIIQmdWY1*~4IP1)Y zlqNW(?is$1f7e)N)|aMVOJ^kE$UdVBohV^L_Q5IVC*)WSBi5%RQM*<4lm2fh~q&nFG*0{0`p-3F@Xo?2NTYhIu4i_pQ|X1DmPv*3Gz3z6KzvWH*Txktbj;@ zz$Z>ds0~_f-mLk2pq>N@6N8VvKhc_iL^V7V zwz}Z*$;)$Ipq|e^1$`w$$>KRh+CzCP*N!T+Y)-qx5&kahjNq;TS8^DX&IUNZyJ86_ zG9J%^+tZYhYI}P-TI_muHbiQ{-F#c4?U&k7NaM4!KZf5kz#naIhq(X7=Vm`)%lK}?s^T-u@F@(>} z;lsL-`;z2Aa`-HqUkEolk({Hf5tl~Je=%PQ*vGRhozH0chu7tAgx|i>#Za0)QhIr$ z^c4J_ph!*z4g#Mt-pjM%P7>y+Vo@jPI9kQ}cOuv}sK8^TXC?UlIl7Jw>qN)!zWnZ$ zf_wOR9=E(wFro4*#Y=~GC?*_sK#zEb&4$1iy)hGxayoo3*93(X`$VPq90<37mV(!+ z(K%sqX3U)e9G7Zse*G8Ri#0a(pgjVuJyjd-hfVGWk6eGjfZ}S*x;NSiChS`jGX$Q7 zCg#~LG XrH($Yth8z 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 bfI#ryHta!m*_(oSH-(B~3RG53D(>_TR_E1h literal 0 HcmV?d00001 diff --git a/QT_Py_CH32_Examples/Neopixel_QTPyCH32/Neopixel_QTPyCH32.ino b/QT_Py_CH32_Examples/Neopixel_QTPyCH32/Neopixel_QTPyCH32.ino new file mode 100644 index 000000000..ebf81cfd5 --- /dev/null +++ b/QT_Py_CH32_Examples/Neopixel_QTPyCH32/Neopixel_QTPyCH32.ino @@ -0,0 +1,29 @@ +// SPDX-FileCopyrightText: 2024 ladyada for Adafruit Industries +// +// SPDX-License-Identifier: MIT + +#include +#include // required for USB Serial +#include + +const int neopixel_pin = PA4; +#define LED_COUNT 1 +Adafruit_NeoPixel pixels(LED_COUNT, neopixel_pin, NEO_GRB + NEO_KHZ800); + +void setup () { + pixels.begin(); +} + +uint16_t firstPixelHue = 0; + +void loop() { + firstPixelHue += 256; + for(int i=0; i Date: Mon, 9 Sep 2024 11:10:44 -0400 Subject: [PATCH 2/5] test onlys --- QT_Py_CH32_Examples/Blink_QTPyCH32/.none.test.only | 0 QT_Py_CH32_Examples/HID_Keyboard_QTPyCH32/.none.test.only | 0 QT_Py_CH32_Examples/I2C_Scan/.none.test.only | 0 QT_Py_CH32_Examples/Neopixel_QTPyCH32/.none.test.only | 0 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 QT_Py_CH32_Examples/Blink_QTPyCH32/.none.test.only create mode 100644 QT_Py_CH32_Examples/HID_Keyboard_QTPyCH32/.none.test.only create mode 100644 QT_Py_CH32_Examples/I2C_Scan/.none.test.only create mode 100644 QT_Py_CH32_Examples/Neopixel_QTPyCH32/.none.test.only diff --git a/QT_Py_CH32_Examples/Blink_QTPyCH32/.none.test.only b/QT_Py_CH32_Examples/Blink_QTPyCH32/.none.test.only new file mode 100644 index 000000000..e69de29bb diff --git a/QT_Py_CH32_Examples/HID_Keyboard_QTPyCH32/.none.test.only b/QT_Py_CH32_Examples/HID_Keyboard_QTPyCH32/.none.test.only new file mode 100644 index 000000000..e69de29bb diff --git a/QT_Py_CH32_Examples/I2C_Scan/.none.test.only b/QT_Py_CH32_Examples/I2C_Scan/.none.test.only new file mode 100644 index 000000000..e69de29bb diff --git a/QT_Py_CH32_Examples/Neopixel_QTPyCH32/.none.test.only b/QT_Py_CH32_Examples/Neopixel_QTPyCH32/.none.test.only new file mode 100644 index 000000000..e69de29bb From f6081e840796b71973b6ada8af07b4b3495a94ab Mon Sep 17 00:00:00 2001 From: Liz Date: Mon, 9 Sep 2024 11:25:28 -0400 Subject: [PATCH 3/5] Update PicoW_YBox3.ino --- PicoW_YBox3/PicoW_YBox3.ino | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/PicoW_YBox3/PicoW_YBox3.ino b/PicoW_YBox3/PicoW_YBox3.ino index 49745be84..7d7510545 100644 --- a/PicoW_YBox3/PicoW_YBox3.ino +++ b/PicoW_YBox3/PicoW_YBox3.ino @@ -151,7 +151,6 @@ void loop() { bgy = miny, // Y relative to background bitmap (>= 0) x, y, bx1, bgx1; // Loop counters and working vars uint8_t p; // 'packed' value of 2 ball pixels - int8_t bufIdx = 0; uint8_t *buf = display.getBuffer(); // -> back buffer @@ -195,7 +194,7 @@ void loop() { if (httpResponseCode > 0) { String payload = http.getString(); Serial.println(payload); - DynamicJsonDocument doc(1024); + JsonDocument doc(1024); DeserializationError error = deserializeJson(doc, payload); if (!error) { if (channelNow == "weather") { From ccaf807c9442034608414ae7555c42331d1f80e5 Mon Sep 17 00:00:00 2001 From: Liz Date: Mon, 9 Sep 2024 11:39:17 -0400 Subject: [PATCH 4/5] fix ybox3 --- PicoW_YBox3/{.feather_rp2040.test.only => .none.test.only} | 0 PicoW_YBox3/PicoW_YBox3.ino | 3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) rename PicoW_YBox3/{.feather_rp2040.test.only => .none.test.only} (100%) diff --git a/PicoW_YBox3/.feather_rp2040.test.only b/PicoW_YBox3/.none.test.only similarity index 100% rename from PicoW_YBox3/.feather_rp2040.test.only rename to PicoW_YBox3/.none.test.only diff --git a/PicoW_YBox3/PicoW_YBox3.ino b/PicoW_YBox3/PicoW_YBox3.ino index 7d7510545..49745be84 100644 --- a/PicoW_YBox3/PicoW_YBox3.ino +++ b/PicoW_YBox3/PicoW_YBox3.ino @@ -151,6 +151,7 @@ void loop() { bgy = miny, // Y relative to background bitmap (>= 0) x, y, bx1, bgx1; // Loop counters and working vars uint8_t p; // 'packed' value of 2 ball pixels + int8_t bufIdx = 0; uint8_t *buf = display.getBuffer(); // -> back buffer @@ -194,7 +195,7 @@ void loop() { if (httpResponseCode > 0) { String payload = http.getString(); Serial.println(payload); - JsonDocument doc(1024); + DynamicJsonDocument doc(1024); DeserializationError error = deserializeJson(doc, payload); if (!error) { if (channelNow == "weather") { From 881ab47517f21abdbf401be055b8f97ad0e4e13e Mon Sep 17 00:00:00 2001 From: Liz Date: Mon, 9 Sep 2024 11:51:42 -0400 Subject: [PATCH 5/5] Update Feather_DVI_Arduino_Video_Synth.ino --- .../Feather_DVI_Arduino_Video_Synth.ino | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Feather_DVI_Arduino_Video_Synth/Feather_DVI_Arduino_Video_Synth/Feather_DVI_Arduino_Video_Synth.ino b/Feather_DVI_Arduino_Video_Synth/Feather_DVI_Arduino_Video_Synth/Feather_DVI_Arduino_Video_Synth.ino index 8a04aa373..4bf18c98c 100644 --- a/Feather_DVI_Arduino_Video_Synth/Feather_DVI_Arduino_Video_Synth/Feather_DVI_Arduino_Video_Synth.ino +++ b/Feather_DVI_Arduino_Video_Synth/Feather_DVI_Arduino_Video_Synth/Feather_DVI_Arduino_Video_Synth.ino @@ -726,7 +726,7 @@ void draw_gradient(int x, int y, int w, int h) { } } -void millisDelay( long int delayTime){ - long int start_time = millis(); +void millisDelay(int delayTime){ + int start_time = millis(); while ( millis() - start_time < delayTime) ; }