Skip to content

Program to create a freely paintable canvas on 3.5" TFT LCD Touchscreen Displays (using ILI9486 Driver) with the Arduino UNO R3/R4 and MCUFRIEND Library

License

Notifications You must be signed in to change notification settings

Aditya-A-garwal/Arduino-TFT-LCD-3-5-Canvas-Paint

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Freely Paintable Canvas On 3.5" TFT LCD Touchscreen With Arduino UNO R3/R4

GitHub License GitHub forks GitHub Repo stars GitHub issues GitHub closed issues GitHub pull requests GitHub closed pull requests GitHub Actions Workflow Status

Overview

This repository contains a program to create a freely paintable canvas with an Arduino UNO R3/R4 and a 3.5" touch screen display shield, as shown below -

Image of LCD Touch Shield from Top Image of LCD Touch Shield from Bottom

Most 3.5" TFT LCD Touch displays use the ILI9486 Display Driver and include a resistive touchscreen. The PCB Layout & silkscreen text may vary slightly between displays. This does not change their behaviour and functionality. This repository depends on the following libraries -

The program has been written using PlatformIO, and has been tested on the Arduino UNO R3, Arduino UNO R4 Minima & Arduino UNO R4 WiFi.

Note

A WiFi enabled version of this project can be found at https://github.com/Aditya-A-garwal/Arduino-WiFi-TFT-LCD-Canvas-App. The project allows saving/loading images from a server, dynamically connected to a WiFI network (using a touchscreen keyboard).

Building/Uploading With PlatformIO

Since this project has been written using PlatformIO by default, simply run the following commands to fetch the libraries, build the project and upload the program -

pio pkg install
pio run
pio run --target upload

Tip

A detailed tutorial on how to use this repository with video demonstration is available at https://dumblebots.com/2024/07/27/using-3-5-tft-lcd-display-ili9486-arduino-part-5-paint-app/. The tutorial includes a comprehensive explanation of the code.

Building/Uploading With Arduino IDE

Create a new sketch and copy the contents of src/main.cpp from this repository into the default .ino file. Create a new tab/file in the IDE named constants.h and copy the contents of src/constants.h from this repository into this file.

Install the Adafruit Touch Screen Library and Adafruit GFX Library from the Library Manager (under Sketch>Include Library>Manage Libraries...)

Download this repository as a ZIP file and install it by navigating to Sketch>Include Library>Add .ZIP Library, and selecting the downloaded file from the file explorer.

After this, you can Build and Upload the program as usual.

Using the Example

As soon as the program is uploaded, the display should turn black and the following widgets should be displayed -

Labelled images of display with widgets
Widgets on canvas app
  • Color Selection Grid with 9 colors to choose from (bottom-left of the screen)
  • Thickness Selection Grid with 4 sizes to choose from (bottom-right of the screen)
  • Paintable Canvas to paint in covering roughly the top two-thirds of the entire screen

To choose a color/pen-size, simply tap its icon. The icons in the thickness selection grid display the currently active color.

The colors being shown can be changed by changing the following values in src/constants.h

const uint16_t PAINT_COORS[][3] = {
    {0, 0, RED},    {35, 0, GREEN},     {70, 0, BLUE},      // colors in top-row
    {0, 35, CYAN},  {35, 35, MAGENTA},  {70, 35, YELLOW},   // colors in middle-row
    {0, 70, WHITE}, {35, 70, GRAY},     {70, 70, BLACK}     // colors in bottom-row
};

The pen-sizes being shown can be changed by changing the following values in src/constants.h

const uint16_t THICKNESS_OPTIONS[] = {3, 5, 7, 9};

Note that the above two snippets contain comments for clarity which are not present in the source file.

Troubleshooting

Some common problems and their solutions -

Problem Solution
Display stays white after uploading program Non-Standard Driver (not ILI9486)
Display not responding after touch Try changing the order of the touch pins in src/constants.h file, i.e. swap the values of XP, YP, XM and YM
Compilation issues related to SPI Update the Arduino IDE version and/or install the SPI library
Display Flickering/Arduino is reset automatically Faulty Power Supply/Cable