Pico-MCU-from-Raspberry-Pi icon indicating copy to clipboard operation
Pico-MCU-from-Raspberry-Pi copied to clipboard

Pico 2 and Pico 1 Touch Macropad fixes

Open TobiasVanDyk opened this issue 2 years ago • 0 comments
trafficstars

  • 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 avatar Jul 15 '23 05:07 TobiasVanDyk