Example Code for Arduino-Rotate
Last revision 2026/01/18
This article provides example code for rotating display direction using an Arduino with a capacitive touchscreen, including hardware setup, software preparation, wiring diagrams, and sample code. Learn how to use the DFRobot_GDL library and implement touch gestures for seamless UI integration. Perfect for DIY enthusiasts looking to master Arduino display rotation!
Hardware Preparation
- DFRduino UNO R3 (or similar) x 1
- 3.5”480x320 TFT LCD with Capacitive Touchscreen x1
- Wires
Software Preparation
- Arduino IDE
- DFRobot_GDL Library Files
- About how to install the library?
- DFRobot_GDL API Functions, click to find more details
Wiring Diagram
Other Preparation Work
- All the demos of this product are all stored in the DFRobot_GDL->example->basic file
- Before burning the demo, please open the corresponding materialized function (DFRobot_ST7789_240x320_HW_SPI)
Sample Code
/*!
* @file rotate.ino
* @brief Two fingers rotate left or right to change the display direction
* @n The demo supports Mega2560, FireBeetle-ESP32, FireBeetle-ESP8266, FireBeetle-M0
* @copyright Copyright (c) 2010 DFRobot Co. Ltd (http://www.dfrobot.com)
* @licence The MIT License (MIT)
* @author [fengli] ([email protected])
* @version V1.0
* @date 2019-12-6
* @get from https://www.dfrobot.com
* @url https://github.com/DFRobot/DFRobot_GDL/src/DFRpbot_UI
*/
#include "DFRobot_UI.h"
#include "Arduino.h"
#include "DFRobot_GDL.h"
#include "DFRobot_Touch.h"
#include "GrayscaleBitmap1.h"
/*M0*/
#if defined ARDUINO_SAM_ZERO
#define TFT_DC 7
#define TFT_CS 5
#define TFT_RST 6
/*ESP32 and ESP8266*/
#elif defined(ESP32) || defined(ESP8266)
#define TFT_DC D2
#define TFT_CS D6
#define TFT_RST D3
/* AVR series motherboard */
#else
#define TFT_DC 2
#define TFT_CS 3
#define TFT_RST 4
#endif
/**
@brief Constructor When the touch uses the gt series chip, you can call this constructor
*/
DFRobot_Touch_GT911 touch;
/**
@brief Constructor When the screen uses hardware SPI communication, the driver IC is st7789, and the screen resolution is 240x320, this constructor can be called
@param dc Command/data line pin for SPI communication
@param cs Chip select pin for SPI communication
@param rst Reset pin of the screen
*/
DFRobot_ILI9488_320x480_HW_SPI screen(/*dc=*/TFT_DC,/*cs=*/TFT_CS,/*rst=*/TFT_RST);
/* M0 mainboard DMA transfer */
//DFRobot_ILI9488_320x480_DMA_SPI screen(/*dc=*/TFT_DC,/*cs=*/TFT_CS,/*rst=*/TFT_RST);
/**
@brief Constructor
@param gdl Screen object
@param touch Touch object
*/
DFRobot_UI ui(&screen, &touch);
int8_t rotate =0;
void setup()
{
Serial.begin(9600);
//UI initialization
ui.begin();
//Draw picture
screen.drawRGBBitmap(/*x=*/(screen.width()-100)/2,/*y=*/(screen.height()-100)/2,/*bitmap gImage_Bitmap=*/(const unsigned uint16_t*)gImage_GrayscaleBitmap,/*w=*/100,/*h=*/100);
}
void loop()
{
//getGestures():Recognize gestures
DFRobot_UI:: eGesture_t gesture = ui.getGestures();
switch (gesture) {
//Clockwise rotation
case ui.DWROTATE : {
rotate++;
if(rotate>3) rotate=0;
//Set screen display orientation
screen.setRotation(rotate);
screen.drawRGBBitmap(/*x=*/(screen.width()-100)/2,/*y=*/(screen.height()-100)/2,/*bitmap gImage_Bitmap=*/(const unsigned uint16_t*)gImage_GrayscaleBitmap,/*w=*/100,/*h=*/100);
} break;
//Anticlockwise rotation
case ui.DCWROTATE : {
if(rotate<0) {rotate=3;}
else{
rotate--;
}
screen.setRotation(rotate);
screen.drawRGBBitmap(/*x=*/(screen.width()-100)/2,/*y=*/(screen.height()-100)/2,/*bitmap gImage_Bitmap=*/(const unsigned uint16_t*)gImage_GrayscaleBitmap,/*w=*/100,/*h=*/100);
} break;
case ui.NONE: {
return;
}
}
}
Was this article helpful?
