ESP32 Interrupts
#include <>
/*F********************************************************************
*
**********************************************************************/
// https://github.com/Bodmer/TFT_eSPI  Hardware-specific library
#include <TFT_eSPI.h>  
#include <rom/gpio.h>
// https://github.com/buxtronix/arduino/blob/master/libraries/Rotary/examples/interrupt/interrupt.ino
//#include <Rotary.h>  

//************************* DEFINES ************************************
#define DISPLAYWIDTH  320
#define DISPLAYHEIGHT 240
#define MSGSWITCH1    22    // The message NO pushbutton switches
#define MSGSWITCH2    17
#define MSGSWITCH3    16
#define TFT_MISO      19    // From ESP32 TFT User_Setup.h
#define TFT_MOSI      23
#define TFT_SCLK      18
#define TFT_CS        15    // Chip select control pin
#define TFT_DC         2    // Data Command control pin
#define TFT_RST        4    // Reset pin ( could connect to RST pin )
#define BAUD          9600

//************************* PROTOTYPES ************************************
void ReadMessageSwitch1();
void MyDelay( unsigned long millisWait );
void SendMessage( int messageSwitch );

//************************* VARIABLES ************************************
char contestExchanges[5][31] = { "                              ",
	"ABCDEFGHIJKLMNOPQRST", };   
// DO NOT CHANGE. 30 SPACES TO CREATE 1-BASED ARRAY AND USED FOR ERASING MESSAGES
// EXCHANGE MESSAGE FOR CONTEST OR COMMON INFO // GENERAL CQ. CHANGE AS NEEDED
TFT_eSPI tft = TFT_eSPI();

/*F********************************************************************
*
**********************************************************************/
void 
setup() 
{
	Serial.begin( BAUD );
	pinMode( MSGSWITCH1, INPUT_PULLUP );                // MESSAGE SWITCHES
	attachInterrupt( digitalPinToInterrupt( MSGSWITCH1 ), ReadMessageSwitch1
		, CHANGE );   // MESSAGE TO SEND
	tft.setTextColor( TFT_WHITE, TFT_BLACK );
}
/*F********************************************************************
*
**********************************************************************/
void 
loop() 
{ }
/*F********************************************************************
*
**********************************************************************/
void 
ReadMessageSwitch1()
{
	SendMessage( 1 );
}
/*F********************************************************************
*
**********************************************************************/
void 
MyDelay( unsigned long millisWait )
{
	unsigned long now = millis();
	while( millis() - now < millisWait )
	;     // Twiddle thumbs...
}
/*F********************************************************************
*
**********************************************************************/
void 
SendMessage( int messageSwitch )
{
	char *msg = &contestExchanges[1][0];
	int letterCount = 0;
	int rowCount = 0;
	tft.fillRect( 0, 0, DISPLAYWIDTH, DISPLAYWIDTH,0 );      // Erase screen
	tft.setCursor( 0, 20 );
	Serial.print( "In SendLetters(), msg = " );
	Serial.println( msg );
	//  MyDelay( 500L );
	while ( *msg != '\0' )
		tft.print( *msg++ );
}