Skip to content

Pico 2 and Pico 1 Touch Macropad fixes #3

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
TobiasVanDyk opened this issue Jul 15, 2023 · 0 comments
Open

Pico 2 and Pico 1 Touch Macropad fixes #3

TobiasVanDyk opened this issue Jul 15, 2023 · 0 comments
Labels
documentation Improvements or additions to documentation

Comments

@TobiasVanDyk
Copy link
Owner

TobiasVanDyk commented Jul 15, 2023

  • Large Text file processing for nKeys: Can now handle very large text strings strings, preferably stored on SDCard, using nKeys n,o,p,q,r. If nKeys = m,s,t then large strings also enabled for M S T keys 01 - 96. Large strings tested up to 64kB. Keys MST 01-24 are best used for text<200 char and MST 25-96 for large text or use all NKeys NOPQR etc 01-96 for large text. For example copy two large (>10kB) files L1 and S12 on SDCard. Then program nKey n01 with content L1. Use KeyBrd editor with n01 as source in brown not white and add L1[Sav]. Test by pressing key nKey [n01]. Change nKey letter to S with [Cfg][Opt]PadKey[o] then press nKey [S12] - tested both keys both with notepad as the focus.
/////////////////////////////////////
int DoLargeFile(const char *STRf)
/////////////////////////////////////
{ int n, s, dTime = 5, nStrLen = 0;
  File f;

  if (LayerAxD)  if (SDFS.exists(STRf))     f = SDFS.open(STRf, "r");     else return 0;
  if (!LayerAxD) if (LittleFS.exists(STRf)) f = LittleFS.open(STRf, "r"); else return 0;
  
  nStrLen = f.size(); if (nStrLen<ByteSize) dTime = 10; 
  
  while( f.position() < f.size() ) { s = f.readBytes((char *)MacroBuff, sizeof(MacroBuff)); delay(dTime);
                                     n = 0; while (MacroBuff[n]!=0) { usb_hid.keyboardPress(HIDKbrd, MacroBuff[n]); delay(dTime);
                                                                      usb_hid.keyboardRelease(HIDKbrd);             delay(dTime); 
                                                                      n++; if (n>=s) break; } 
                                   } 
  f.close();
  return nStrLen;
}

New code for the two corrections above included in VolumeMacroPadPico35IPS258.zip:

VolumeMacroPadPico35IPS258.zip

  • Added *Code processing for nKeys: For example with Source p01 construct *bb*7 in the KeyBrd Editor and press [Sav] (not [EXE] that will execute the star command) A file p01 will be saved with a length of 6 - press [Lst] to list the contents which is 2A 62 62 2A 37 00. Press the key [p01] which will set the normal LCD rightness to level 7.

  • nKeys are similar to a combination of symbolic links in Linux and shortcuts in Windows - as both are redirected files the latter is the term that is used to describe nKeys. As the 24 K1-K24 Link keys used to chain macros, textfiles, nKeys, and *codes in a sequence, are also referred to as "links", using the term (symbolic) links for the nKeys, could be confusing.

Add the code below to void DoNKeys(int Button):

  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  // Check for special commands Start with * eg *ab*n n = 0-9 - ignore * codes if double **
  // For example with Source p01 construct *bb*7 in the KeyBrd Editor and press [Sav] (not [EXE] that will execute the star command)
  // A file p01 will be saved with a length of 6 - press [Lst] to list the contents which is 2A 62 62 2A 37 00. Press the key [p01]
  // which will set the normal LCD rightness to level 7
  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  if ((nFile[0]==0x2A)&&(nFile[1]!=0x2A)) 
     {for (n = 0; n < StrLen-1; n++) KeyBrdByte[n] = nFile[n]; KeyBrdByteNum = StrLen;
      if (SendBytesStarCodes()) return; else status("*Code incorrect"); return; }   
  if ((nFile[0]==0x2A)&&(nFile[1]==0x2A)) { for (n = 0; n < StrLen; n++) nFile[n] = nFile[n+1]; StrLen--; }

Also corrected position of check for m s t a k in DoNKeys().

  ////////////////////////////////////////////////////////// Test if 1sr char is m,s,t,a,k or M,S,T,A,K then handle as macro/text file
  // For example with Source m01 construct GUIx in the KeyBrd Editor and press [EXE] then [Up] key to save. A file m01 will be saved 
  // with a length of 3 - press [Lst] to list the contents which is E3 1B 00. Exit the KeyBrd and then press [Cfg][ and then press [Opt]
  // until the nKeys character choice shows - press the option Pad [o] until m shows as the nKey character press [L2][L3][L4] and then 
  // key [M01] and the Windows Menu will open. Press [L1] thn press Pad [n] and then press nKey [m01] and the Windows Menu will also
  // open.
  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  // which will set the normal LCD rightness to level 7 
  a = NKeysX[Button][0];  strcpy(MSTAName, NKeysX[Button]); 
  for (n=0; n<10; n++) if (a==MacroChar[n]) { if (MacroKeys(c, 3)) return; }   // mstak-MSTAK files is macro/string 

New code for the two corrections above included in VolumeMacroPadPico35IPS256.zip:
VolumeMacroPadPico35IPS256.zip

  • Pico 2's have now been acquired from the local Pishop.co.za

Note that the Touch Macro Pad code presented below works fine for a Pico 2 provided the touch frequency is set to below 2.5MHz and setting it to 1 MHz or even 250kHz works fine. Translating the Pico 1 RTC code into TimeLib.h code has been completed.

Look here or here, but note this RP2350 Errata E9 - Pull-down lock-up. Currently testing 640x480 (two 480x320 screens mounted side-by-side) as touch macropads.

  • Also note issue #3465 regarding resistive touchscreens here. The Bodmer Keypad_240x320.ino example runs on the Waveshare IPS ST7789 LCD Pico Board 320x240 2.8 inch with touch working - but use one of the four 2.5.43 fixes described below.
    The Pico 2 seems to work with this LCD's resistive touch panel if its calData[5] are about 4388 3451 4492 3465 t. But sometimes parameter 1 and 3 change and are then very large > 10k values (61874 and 61733 have been observed which could be overflow values from the 16-bit variables used in calData), appear, and there is then no touch response.

  • Similarly the Waveshare LCD Type C (125MHz) was constructed on a breadboard and compiled with Pico SDK 2.1.0, Arduino Pico 4.3 and the included Adafruit_TinyUSB_Arduino 3.3.4, and TFTeSPI 2.5.43. The sourcecode removed PicoSDK RTC functions and PicoSDK includes. This yielded a fully working touchpad with correct calibration data calData[5] = { 288, 3625, 270, 3548, 5 }. BUT using the exact same code, the same Pico 2 and the same LCD, but constructing it on stripboard, was non touch-responsive and yielded incorrect calibration data: calData[5] = { 61745, 3595, 61707, 3444, 5 }. The code and build file used are attached below.

VolumeMacroPad201.zip

pico-2

  • ST7789 LCD Macropad and TFT_eSP V2.5.43 fix:
    Recommended fix: Replace line 52 in the file Processors/TFT_eSPI_RP2040.h with the line as below:
  // Processor specific code used by SPI bus transaction begin/end_tft_write functions
  #define SET_BUS_WRITE_MODE spi_set_format(SPI_X,  8, (spi_cpol_t)(TFT_SPI_MODE >> 1), (spi_cpha_t)(TFT_SPI_MODE & 0x1), SPI_MSB_FIRST)
  // Old line
  //#define SET_BUS_READ_MODE  spi_set_format(SPI_X,  8, (spi_cpol_t)0, (spi_cpha_t)0, SPI_MSB_FIRST)
  // New line see https://github.com/Bodmer/TFT_eSPI/discussions/3561
  #define SET_BUS_READ_MODE  spi_set_format(SPI_X,  8, (spi_cpol_t)(TFT_SPI_MODE >> 1), (spi_cpha_t)(TFT_SPI_MODE & 0x1), SPI_MSB_FIRST)

Also try adding: #define TFT_SPI_MODE SPI_MODE0 to TFT_eSPI.h refer to:

https://github.com/Bodmer/TFT_eSPI/issues/3564
It seems that the problem with the black screen depends on this option:
// Some ST7789 boards do not work with Mode 0
#ifndef TFT_SPI_MODE
  #if defined(ST7789_DRIVER) || defined(ST7789_2_DRIVER)
    #define TFT_SPI_MODE SPI_MODE3
  #else
    #define TFT_SPI_MODE SPI_MODE0
  #endif
#endif
The display works only if SPI_MODE0 mode is selected

Newer fixes: Use the 3files or 2files fix when using TFT_eSPI-Bodmer version 2.5.43 and also read this

Working2Files.zip
WorkingFiles3Files.zip

Old fix: To obtain a working Touch-Macropad for the the Waveshare IPS ST7789 LCD Pico Board 320x240 2.8 inch using Bodmer TFT_eSPI version 2.5.43 replace the file Processors/TFT_eSPI_RP2040.h with the same file from the previous version V2.5.34.

Also see the comment Bodmer/TFT_eSPI/issues/3476: For file TFT_eSPI_RP2040.h

Replace:
2.5.43 #define SET_BUS_READ_MODE  spi_set_format(SPI_X,  8, (spi_cpol_t)0, (spi_cpha_t)0, SPI_MSB_FIRST)
With:
2.5.34 #define SET_BUS_READ_MODE  // spi_set_format(SPI_X,  8, (spi_cpol_t)0, (spi_cpha_t)0, SPI_MSB_FIRST)
  • Choosing an LCD Touch Display: Of the 5 different LCD displays tested here, with the firmware as attached below, my favourite is the fast Waveshare 3.5 inch Type C 125MHz LCD display (even though it is not an IPS screen). It is available here.

  • Win11 24H2 new icon-bar with labels is good! - but you do not need icons here - they could have used buttons labelled Cut-Copy-Rename-Delete.

Old Win11 22H2:
Win11Icons

New Win11 24H2:
Win11-not-obtuse-icons

These were the really good old days when Windows usability still included user personalization and task studies

Image

Windows Audio and Midi News
A
B

@TobiasVanDyk TobiasVanDyk added the enhancement New feature or request label Jul 15, 2023
@TobiasVanDyk TobiasVanDyk added the bug Something isn't working label Dec 3, 2023
@TobiasVanDyk TobiasVanDyk changed the title A reset once and SDCard reader has been implemented for the 4" ILI9486 Arduino-Uno LCD. Compile using PicoArduino 3.6.0 only. A reset once and SDCard reader has been implemented for the 2.8" STM7889 and 4" ILI9486 Arduino-Uno LCD. Dec 3, 2023
@TobiasVanDyk TobiasVanDyk changed the title Compile using PicoArduino 3.6.0 only. A reset once and SDCard reader has been implemented for the 2.8" STM7889 and 4" ILI9486 Arduino-Uno LCD. Compile using PicoArduino 3.6.0 only. A reset once and SDCard reader has been implemented for the 2.8" STM7789 and 4" ILI9486 Arduino-Uno LCD. Dec 3, 2023
@TobiasVanDyk TobiasVanDyk changed the title Compile using PicoArduino 3.6.0 only. A reset once and SDCard reader has been implemented for the 2.8" STM7789 and 4" ILI9486 Arduino-Uno LCD. Compile using PicoArduino 3.6.0 or 3.6.2. A reset once and SDCard reader has been implemented for the 2.8" STM7789 and 4" ILI9486 Arduino-Uno LCD. Dec 8, 2023
@TobiasVanDyk TobiasVanDyk removed the bug Something isn't working label Dec 8, 2023
@TobiasVanDyk TobiasVanDyk changed the title Compile using PicoArduino 3.6.0 or 3.6.2. A reset once and SDCard reader has been implemented for the 2.8" STM7789 and 4" ILI9486 Arduino-Uno LCD. New versions for 2.8" STM7789, 3.5" ILI9486 RPi using PicoArduino 3.6.0 or 3.6.2. Dec 31, 2023
@TobiasVanDyk TobiasVanDyk changed the title New versions for 2.8" STM7789, 3.5" ILI9486 RPi using PicoArduino 3.6.0 or 3.6.2. New versions for 2.8" STM7789 Pico, 3.5" ILI9486 RPi, and 4" ILI9486 Arduino, using PicoArduino 3.6.0 or 3.6.2. Jan 1, 2024
@TobiasVanDyk TobiasVanDyk changed the title New versions for 2.8" STM7789 Pico, 3.5" ILI9486 RPi, and 4" ILI9486 Arduino, using PicoArduino 3.6.0 or 3.6.2. New versions for 2.8" STM7789 Pico, 3.5" ILI9486 RPi, 3.5" ILI9488 Pico Eval Board, and 4" ILI9486 Arduino, using PicoArduino 3.6.0 or 3.6.2. Jan 1, 2024
@TobiasVanDyk TobiasVanDyk reopened this Jan 3, 2024
@TobiasVanDyk TobiasVanDyk changed the title New versions for 2.8" STM7789 Pico, 3.5" ILI9486 RPi, 3.5" ILI9488 Pico Eval Board, and 4" ILI9486 Arduino, using PicoArduino 3.6.0 or 3.6.2. Experimental versions for 2.8" STM7789 Pico, 3.5" ILI9486 RPi, 3.5" ILI9488 Pico Eval Board, and 4" ILI9486 Arduino, using PicoArduino 3.6.0 or 3.6.2. Jan 3, 2024
@TobiasVanDyk TobiasVanDyk added the bug Something isn't working label Jan 3, 2024
@TobiasVanDyk TobiasVanDyk changed the title Experimental versions for 2.8" STM7789 Pico, 3.5" ILI9486 RPi, 3.5" ILI9488 Pico Eval Board, and 4" ILI9486 Arduino, using PicoArduino 3.6.0 or 3.6.2. Experimental versions for 2.8" STM7789 Pico, 3.5" ILI9486 RPi, 3.5" ILI9488 Pico Eval Board, and 4" ILI9486 Arduino, using PicoArduino 3.6.2 or 3.6.3. Jan 4, 2024
@TobiasVanDyk TobiasVanDyk changed the title Experimental versions for 2.8" STM7789 Pico, 3.5" ILI9486 RPi, 3.5" ILI9488 Pico Eval Board, and 4" ILI9486 Arduino, using PicoArduino 3.6.2 or 3.6.3. Experimental versions for 2.8" STM7789 Pico, 3.5" ILI9486 RPi, 3.5" ILI9488 Pico Eval Board, and 4" ILI9486 Arduino, using PicoArduino 3.6.3. Jan 18, 2024
@TobiasVanDyk TobiasVanDyk added documentation Improvements or additions to documentation good first issue Good for newcomers question Further information is requested and removed good first issue Good for newcomers documentation Improvements or additions to documentation question Further information is requested bug Something isn't working labels Jan 18, 2024
@TobiasVanDyk TobiasVanDyk changed the title Experimental versions for 2.8" STM7789 Pico, 3.5" ILI9486 RPi, 3.5" ILI9488 Pico Eval Board, and 4" ILI9486 Arduino, using PicoArduino 3.6.3. Experimental versions for 2.8" STM7789 Pico, 3.5" ILI9486 RPi, 3.5" ILI9488 Pico Eval Board, and 4" ILI9486 Arduino, using PicoArduino 3.6.3 and 3.6.2. Jan 18, 2024
@TobiasVanDyk TobiasVanDyk changed the title Experimental versions for 2.8" STM7789 Pico, 3.5" ILI9486 RPi, 3.5" ILI9488 Pico Eval Board, and 4" ILI9486 Arduino, using PicoArduino 3.6.3 and 3.6.2. Experimental versions for 2.8" STM7789 Pico, 3.5" ILI9486 RPi, 3.5" ILI9488 Pico Eval Board, and 4" ILI9486 Arduino, using PicoArduino 3.7.0 and 3.6.3. Feb 3, 2024
@TobiasVanDyk TobiasVanDyk changed the title Experimental versions for 2.8" STM7789 Pico, 3.5" ILI9486 RPi, 3.5" ILI9488 Pico Eval Board, and 4" ILI9486 Arduino, using PicoArduino 3.7.0 and 3.6.3. Experimental versions for 2.8" STM7789 Pico, 3.5" ILI9486 RPi, 3.5" ILI9488 Pico Eval Board, and 4" ILI9486 Arduino, using PicoArduino 3.7.2 and 3.6.3. Feb 17, 2024
@TobiasVanDyk TobiasVanDyk changed the title Experimental versions for 2.8" STM7789 Pico, 3.5" ILI9486 RPi, 3.5" ILI9488 Pico Eval Board, and 4" ILI9486 Arduino, using PicoArduino 3.7.2 and 3.6.3. Corrections and Experimental versions Mar 21, 2024
@TobiasVanDyk TobiasVanDyk reopened this Mar 21, 2024
@TobiasVanDyk TobiasVanDyk added documentation Improvements or additions to documentation and removed enhancement New feature or request labels Mar 21, 2024
@TobiasVanDyk TobiasVanDyk added enhancement New feature or request bug Something isn't working experimental new-hardware and removed bug Something isn't working labels Mar 25, 2024
@TobiasVanDyk TobiasVanDyk changed the title Corrections and Experimental versions Enhancements and New LCD Panels and Corrections and Experimental versions Apr 1, 2024
@TobiasVanDyk TobiasVanDyk changed the title Enhancements and New LCD Panels and Corrections and Experimental versions New LCD Panels, Enhancements, Corrections, and Experimental versions Apr 1, 2024
@TobiasVanDyk TobiasVanDyk changed the title New LCD Panels, Enhancements, Corrections, and Experimental versions Closed Apr 18, 2024
@TobiasVanDyk TobiasVanDyk changed the title Closed Problem with ST7789 and TFT_eSP V2.5.43 Apr 25, 2024
@TobiasVanDyk TobiasVanDyk changed the title Problem with ST7789 and TFT_eSP V2.5.43 ST7789 LCD Macropad and TFT_eSP V2.5.43 fix Apr 25, 2024
@TobiasVanDyk TobiasVanDyk added the NOk Not Ok label Apr 25, 2024
@TobiasVanDyk TobiasVanDyk changed the title ST7789 LCD Macropad and TFT_eSP V2.5.43 fix Pico Touch Macropad fixes Apr 28, 2024
@TobiasVanDyk TobiasVanDyk removed the NOk Not Ok label Jun 20, 2024
@TobiasVanDyk TobiasVanDyk added enhancement New feature or request igu I give up and removed enhancement New feature or request labels Jul 25, 2024
@TobiasVanDyk TobiasVanDyk added life-changing and removed igu I give up labels Aug 21, 2024
@TobiasVanDyk TobiasVanDyk changed the title Pico Touch Macropad fixes Pico 2 and Pico 1 Touch Macropad fixes Aug 25, 2024
@TobiasVanDyk TobiasVanDyk added NOk Not Ok igu I give up labels Nov 29, 2024
@TobiasVanDyk TobiasVanDyk removed NOk Not Ok igu I give up labels Apr 16, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation
Projects
None yet
Development

No branches or pull requests

1 participant