Arduino DUE  What are they? + Features and Utility ▷ 2020

One of the most powerful boards that Arduino offers is the DUE version. Thanks to its microcontroller, its memory and the number of pins available, it is one of the most sought after when complex projects are needed.

For this reason We have prepared this article so you can know what this type of plate is for and what are the main characteristics offered to users.

In addition, we will explain what you should take into account When working with an Arduino DUE, how does the development environment differ for the programming of the board. Check out.

What is Arduino DUE and what are these free development boards for?

Arduino DUE It is a board that has an Atmel SAM3X8E microcontroller, offering extra performance for large projects. This criterion is also supported by a more digital pins input and output and analog pins. Works with a voltage of 3.3V and has 4 ports for hardware, of which 2 are for cables MicroUSB which are used to connect the board with the computer. Arduino DUE operating systems can be used Windows, Linux and MacOS.

Characteristics of the Arduino DUE What are its most interesting features?

Characteristics of the Arduino DUE What are its most interesting features?

The main features that Arduino DUE has are:

  • Its dimensions are 101.52 × 53.3mm and has a weight of 36 grams.
  • Owns an MCU Atmel SAM3X8E ARM Cortex-M3 32-bit core that works at 84 Mhz.
  • Has a passive memory 96 KB SRAM, but it does not have EEPROM type memory like the rest of the Arduino boards. While the flash memory is 512 KB.
  • The voltage with which it works is 3 V, having a maximum entry limit of 16V.
  • It has 54 digital pins, where 12 are for 12 are for pulse modulation.
  • The pins of analog input is 12 and the output, 2.
  • Has 2 MicroUSB ports, a JTAG, a SPI, two TWI reset and delete pushbuttons.

What to keep in mind when working with an Arduino DUE board?

The first thing to keep in mind is that this board works with a current of 3.3V, so it maintains a great difference with most of the 5V Arduinos. Therefore, you must be careful not to burn the MCU, memories and other components due to an over voltage.

Another issue that you should take into account, although a little less, is its size and weight. By last, you should consider all the digital and analog pins you have available (By this we mean the need your project has for occupy everyone, since if less is required you could opt for another less expensive 5V plate).

Is the development environment (Arduino IDE) different for Arduino DUE boards?

Is the development environment (Arduino IDE) different for Arduino DUE boards?

He Arduino DUE environment is no different than the rest of the boards you just have to keep in mind that the SDI has configured for Arduino UNO board, so you must change the type of Arduino in the program.

For this you will have to follow these steps:

  • Once you have open SDI go to Tools.
  • Then select Plates.
  • Choose the option DUE.

Usefulness of the board In which projects can the Arduino DUE be used?

You can use the Arduino DUE board in a lot of projects.

For example, you can create:

  • A pedal to distort the sound of an electric guitar. https://create.arduino.cc/projecthub/electrosmash-team/arduino-due-programmable-guitar-pedal-edfe8b?ref=search&ref_id=due&offset=2
  • Device to do electrocardiograms. https://create.arduino.cc/projecthub/javiergonzalezb/heart-rate-estimation-using-arduino-due-a2271a?ref=search&ref_id=due&offset=10
  • Generator of waveforms. https://create.arduino.cc/projecthub/search?q=due&type=Project

Further, If you want to know a project in detail you can create a game of Zeroes and Crosses. For this device you will need a DUE board, a 2.8 inch TFT LCD controller or led screen with touch and cables necessary for installation.

As for the assembly, you will have to do it according to the following drawing:

Usefulness of the board In which projects can the Arduino DUE be used?

When you finish you will have to enter the Arduino IDE and write these codes:

#include  <SPI.h>

#include <Adafruit_GFX.h>

#include <Adafruit_ILI9341.h>

#include <URTouch.h>

#include <avr / pgmspace.h>

#define TFT_RST 8

#define TFT_DC 9

#define TFT_CS 10

#define TOUCH_ORIENTATION LANDSCAPE

Adafruit_ILI9341 tft  =  Adafruit_ILI9341 ( TFT_CS ,  TFT_DC ,  TFT_RST );

Botones Adafruit_GFX_Button [ 9 ];

URTouch myTouch ( 30 ,  28 ,  26 ,  24 ,  22 );

movimientos int cortos sin firmar = 1 ;

ganador int corto sin firmar = 0 ;

unsigned short  int  x , y ;

cursor int corto sin firmar ;

unsigned short  int  firstMoves [] = { 0 , 2 , 6 , 8 };

tablero int corto sin firmar [] = { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 };

jugador bool ;

bool b = 1 ;

char start [ 10 ]  =  { "Gamestart" };

char you [ 4 ]  =  { "USTED" };

char cpu [ 4 ]  =  { "CPU" };

char again [ 7 ]  =  { "¿Otra vez?" };

const unsigned  char  círculo [] PROGMEM = {

0 b0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 ,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x7 , 0xF8 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0,0x0,0x7f,0xff,0x80,0x0,0x0,0x0,0x0,0x0,0x3,0xff,0xff,0xf0,0x0,0x0,0x0,

0x0 , 0x0 , 0xf , 0xff , 0xff , 0xFC , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x1f , 0xff , 0xff , 0xfe , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x7f , 0xF0 , 0x3 , 0xff , 0x80 , 0x0 , 0x0 , 0x0 ,0x0,0xff,0x80,0x0,0x7f,0xc0,0x0,0x0,0x0,0x1,0xfe,0x0,0x0,0x1f,0xe0,0x0,0x0,

0x0 , 0x3 , 0xF8 , 0x0 , 0x0 , 0x7 , 0xF0 , 0x0 , 0x0 , 0x0 , 0x7 , 0xF0 , 0x0 , 0x0 , 0x3 , 0xF8 , 0x0 , 0x0 , 0x0 , 0xf , 0xE0 , 0x0 , 0x0 , 0x1 , 0xFC , 0x0 , 0x0 , 0x0 ,0xf,0xc0,0x0,0x0,0x0,0xfc,0x0,0x0,0x0,0x1f,0x80,0x0,0x0,0x0,0x7e,0x0,0x0,

0x0 , 0x3f , 0x0 , 0x0 , 0x0 , 0x0 , 0x3f , 0x0 , 0x0 , 0x0 , 0x3E , 0x0 , 0x0 , 0x0 , 0x0 , 0x1f , 0x0 , 0x0 , 0x0 , 0x7E , 0x0 , 0x0 , 0x0 , 0x0 , 0x1f , 0x80 , 0x0 , 0x0 ,0x7c,0x0,0x0,0x0,0x0,0xf,0x80,0x0,0x0,0x7c,0x0,0x0,0x0,0x0,0xf,0x80,0x0,

0x0 , 0xF8 , 0x0 , 0x0 , 0x0 , 0x0 , 0x7 , 0xC0 , 0x0 , 0x0 , 0xF8 , 0x0 , 0x0 , 0x0 , 0x0 , 0x7 , 0xC0 , 0x0 , 0x0 , 0xF8 , 0x0 , 0x0 , 0x0 , 0x0 , 0x7 , 0xc0 , 0x0 , 0x0 ,0xf0,0x0,0x0,0x0,0x0,0x3,0xc0,0x0,0x1,0xf0,0x0,0x0,0x0,0x0,0x3,0xe0,0x0,

0x1 , 0xF0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x3 , 0xE0 , 0x0 , 0x1 , 0xF0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x3 , 0xE0 , 0x0 , 0x1 , 0xF0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x3 , 0xe0 , 0x0 , 0x1 ,0xf0,0x0,0x0,0x0,0x0,0x3,0xe0,0x0,0x1,0xf0,0x0,0x0,0x0,0x0,0x3,0xe0,0x0,

0x1 , 0xF0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x3 , 0xE0 , 0x0 , 0x1 , 0xF0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x3 , 0xE0 , 0x0 , 0x0 , 0xF0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x3 , 0xc0 , 0x0 , 0x0 ,0xf8,0x0,0x0,0x0,0x0,0x7,0xc0,0x0,0x0,0xf8,0x0,0x0,0x0,0x0,0x7,0xc0,0x0,

0x0 , 0xF8 , 0x0 , 0x0 , 0x0 , 0x0 , 0x7 , 0xC0 , 0x0 , 0x0 , 0x7c , 0x0 , 0x0 , 0x0 , 0x0 , 0xf , 0x80 , 0x0 , 0x0 , 0x7c , 0x0 , 0x0 , 0x0 , 0x0 , 0xf , 0x80 , 0x0 , 0x0 ,0x7e,0x0,0x0,0x0,0x0,0x1f,0x80,0x0,0x0,0x3e,0x0,0x0,0x0,0x0,0x1f,0x0,0x0,

0x0 , 0x3f , 0x0 , 0x0 , 0x0 , 0x0 , 0x3f , 0x0 , 0x0 , 0x0 , 0x1f , 0x80 , 0x0 , 0x0 , 0x0 , 0x7E , 0x0 , 0x0 , 0x0 , 0xf , 0xC0 , 0x0 , 0x0 , 0x0 , 0xFC , 0x0 , 0x0 , 0x0 ,0xf,0xe0,0x0,0x0,0x1,0xfc,0x0,0x0,0x0,0x7,0xf0,0x0,0x0,0x3,0xf8,0x0,0x0,

0x0 , 0x3 , 0xF8 , 0x0 , 0x0 , 0x7 , 0xF0 , 0x0 , 0x0 , 0x0 , 0x1 , 0xfe , 0x0 , 0x0 , 0x1f , 0xE0 , 0x0 , 0x0 , 0x0 , 0x0 , 0xff , 0x80 , 0x0 , 0x7f , 0xC0 , 0x0 , 0x0 , 0x0 ,0x0,0x7f,0xf0,0x3,0xff,0x80,0x0,0x0,0x0,0x0,0x1f,0xff,0xff,0xfe,0x0,0x0,0x0,

0x0 , 0x0 , 0xf , 0xff , 0xff , 0xFC , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x3 , 0xff , 0xff , 0xF0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x7f , 0xff , 0x80 , 0x0 , 0x0 , 0x0 , 0x0 ,0x0,0x0,0x7,0xf8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0, 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0

};

const unsigned  char  x_bitmap [] PROGMEM = {

0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0xff,0xff,0xc0,0x1,0xff,0xff,0xe0,0x0,

0x1 , 0xff , 0xff , 0xE0 , 0x1 , 0xff , 0xff , 0xC0 , 0x0 , 0x1 , 0xff , 0xff , 0xF0 , 0x3 , 0xff , 0xff , 0xC0 , 0x0 , 0x0 , 0xff , 0xff , 0xF0 , 0x7 , 0xff , 0xff , 0x80 , 0x0 , 0x0 ,0xff,0xff,0xf8,0x7,0xff,0xff,0x80,0x0,0x0,0x7f,0xff,0xf8,0xf,0xff,0xff,0x0,0x0,

0x0 , 0x3f , 0xff , 0xfc , 0xf , 0xff , 0xfe , 0x0 , 0x0 , 0x0 , 0x3f , 0xff , 0xfe , 0x1f , 0xff , 0xfe , 0x0 , 0x0 , 0x0 , 0x1f , 0xff , 0xfc , 0x1f , 0xff , 0xfc , 0x1f 0x0 , 0x0 , 0x0 ,0x1f,0xff,0xff,0x3f,0xff,0xfc,0x0,0x0,0x0,0xf,0xff,0xff,0x7f,0xff,0xf8,0x0,0x0,

0x0 , 0xf , 0xff , 0xff , 0xff , 0xff , 0xF8 , 0x0 , 0x0 , 0x0 , 0x7 , 0xff , 0xff , 0xff , 0xff , 0xF0 , 0x0 , 0x0 , 0x0 , 0x3 , 0xff , 0xff , 0xff , 0xff , 0xE0 , 0x0 , 0x0 , 0x0 ,0x3,0xff,0xff,0xff,0xff,0xe0,0x0,0x0,0x0,0x1,0xff,0xff,0xff,0xff,0xc0,0x0,0x0,

0x0 , 0x1 , 0xff , 0xff , 0xff , 0xff , 0xC0 , 0x0 , 0x0 , 0x0 , 0x0 , 0xff , 0xff , 0xff , 0xff , 0x80 , 0x0 , 0x0 , 0x0 , 0x0 , 0xff , 0xff , 0xff , 0xff , 0x80 , 0x0 , 0x0 , 0x0 ,0x0,0x7f,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x3f,0xff,0xff,0xfe,0x0,0x0,0x0,

0x0 , 0x0 , 0x3f , 0xff , 0xff , 0xfe , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x1f , 0xff , 0xff , 0xFC , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x1f , 0xff , 0xff , 0xFC , 0x0 , 0x0 , 0x0 , 0x0 ,0x0,0x1f,0xff,0xff,0xfc,0x0,0x0,0x0,0x0,0x0,0x3f,0xff,0xff,0xfe,0x0,0x0,0x0,

0x0 , 0x0 , 0x3f , 0xff , 0xff , 0xfe , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x7f , 0xff , 0xff , 0xff , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0xff , 0xff , 0xff , 0xff , 0x80 , 0x0 , 0x0 , 0x0 ,0x0,0xff,0xff,0xff,0xff,0x80,0x0,0x0,0x0,0x1,0xff,0xff,0xff,0xff,0xc0,0x0,0x0,

0x0 , 0x1 , 0xff , 0xff , 0xff , 0xff , 0xC0 , 0x0 , 0x0 , 0x0 , 0x3 , 0xff , 0xff , 0xff , 0xff , 0xE0 , 0x0 , 0x0 , 0x0 , 0x3 , 0xff , 0xff , 0xff , 0xff , 0xE0 , 0x0 , 0x0 , 0x0 ,0x7,0xff,0xff,0xff,0xff,0xf0,0x0,0x0,0x0,0xf,0xff,0xff,0xff,0xff,0xf8,0x0,0x0,

0x0 , 0xf , 0xff , 0xff , 0xff , 0xff , 0xf8 , 0x0 , 0x0 , 0x0 , 0x1f , 0xff , 0xff , 0x7f , 0xff , 0xfc , 0x0 , 0x0 , 0x0 , 0x1f , 0xff , 0xfc , 0x3f , 0xff , 0xfc , 0x3 0x0 , 0x0 , 0x0 ,0x3f,0xff,0xfc,0x3f,0xff,0xfe,0x0,0x0,0x0,0x3f,0xff,0xfc,0x1f,0xff,0xfe,0x0,0x0,

0x0 , 0x7f , 0xff , 0xF8 , 0x1f , 0xff , 0xff , 0x0 , 0x0 , 0x0 , 0xff , 0xff , 0xF8 , 0xf , 0xff , 0xff , 0x80 , 0x0 , 0x0 , 0xff , 0xff , 0xF0 , 0x7 , 0xff , 0xff , 0x80 , 0x0 , 0x1 ,0xff,0xff,0xe0,0x7,0xff,0xff,0xc0,0x0,0x1,0xff,0xff,0xe0,0x3,0xff,0xff,0xc0,0x0,

0x3 , 0xff , 0xff , 0xC0 , 0x3 , 0xff , 0xff , 0xE0 , 0x0 , 0x3 , 0xff , 0xff , 0xC0 , 0x1 , 0xff , 0xff , 0xE0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 ,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0, 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0

};

configuración vacía () {

myTouch . InitTouch ();

myTouch . setPrecision ( PREC_HI );

tft . comenzar ();

tft . setRotation ( 3 );

tft . fillScreen ( ILI9341_BLACK );

// Dibujar marco blanco

tft . drawRect ( 0 , 0 , 320 , 240 , ILI9341_WHITE );

// Imprimir texto "Arduino"

tft . setCursor ( 80 , 30 );

tft . setTextColor ( ILI9341_GREEN );

tft . setTextSize ( 4 );

tft . imprimir ( "Arduino" );

// Imprimir texto "Tic Tac Toe"

tft . setCursor ( 30 , 100 );

tft . setTextColor ( ILI9341_WHITE );

tft . setTextSize ( 4 );

tft . imprimir ( "Tic Tac Toe" );

// Crear botón rojo

// crear botones

botones [ 0 ]. initButton ( & tft , 160 , 200 , 200 , 40 , ILI9341_WHITE ,  ILI9341_RED ,  ILI9341_WHITE ,

inicio , 2 );

botones [ 0 ]. drawButton ();

hacer {

esperar un toque ( & x , & y );

si ( botones [ 0 ]. contiene ( x , y ))

b = 0 ;

} mientras ( b > 0 );

}

bucle vacío ()

{

for ( unsigned short  int  i = 0 ; i < 9 ; i ++ )

{

tablero [ i ] = 0 ;

}

tft . fillScreen ( ILI9341_BLACK );

// Dibujar marco blanco

tft . drawRect ( 0 , 0 , 320 , 240 , ILI9341_WHITE );

// Imprimir texto "Tic Tac Toe"

tft . setCursor ( 30 , 30 );

tft . setTextColor ( ILI9341_WHITE );

tft . setTextSize ( 4 );

tft . imprimir ( "Tic Tac Toe" );

// Imprime "YouTube!" texto

tft . setCursor ( 30 , 100 );

tft . setTextColor ( ILI9341_GREEN );

tft . setTextSize ( 4 );

tft . print ( "Quién comienza" );

// Crear botón rojo

// crear botones

botones [ 0 ]. initButton ( & tft , 100 , 200 , 80 , 40 , ILI9341_WHITE ,  ILI9341_RED ,  ILI9341_WHITE ,

usted , 2 );

botones [ 0 ]. drawButton ();

// crear botones // x, y, w, h, contorno, relleno, texto

botones [ 1 ]. initButton ( & tft , 200 , 200 , 80 , 40 , ILI9341_WHITE ,  ILI9341_RED ,  ILI9341_WHITE ,

cpu , 2 );

botones [ 1 ]. drawButton ();

b = 1 ;

hacer {

esperar un toque ( & x , & y );

si ( botones [ 0 ]. contiene ( x , y ))

{

b = 0 ;

jugador =  1 ;

tft . fillScreen ( ILI9341_BLACK );

// Dibujar marco blanco

tft . drawRect ( 0 , 0 , 320 , 240 , ILI9341_WHITE );

tft . setCursor ( 30 , 30 );

tft . setTextColor ( ILI9341_WHITE );

tft . setTextSize ( 2 );

tft . print ( "Ok, empiezas" );

retraso ( 2000 );

}

si ( botones [ 1 ]. contiene ( x , y ))

{

b = 0 ;

jugador =  0 ;

tft . fillScreen ( ILI9341_BLACK );

// Dibujar marco blanco

tft . drawRect ( 0 , 0 , 320 , 240 , ILI9341_WHITE );

tft . setCursor ( 30 , 30 );

tft . setTextColor ( ILI9341_WHITE );

tft . setTextSize ( 2 );

tft . print ( "Ok, comienza la CPU" );

retraso ( 2000 );

}

} mientras ( b > 0 );

b = 1 ;

movimientos =  1 ;

ganador =  0 ;

cursor =  10 ;

tft . fillScreen ( ILI9341_BLACK );

// Dibujar marco

tft . drawRect ( 0 , 0 , 320 , 240 , ILI9341_WHITE );

// Dibuja una línea vertical

tft . fillRect ( 80 , 15 , 5 , 205 , ILI9341_WHITE );

tft . fillRect ( 150 , 15 , 5 , 205 , ILI9341_WHITE );

// Dibuja una línea horizontal

fillRect(15,80,205,5,ILI9341_WHITE);

fillRect(15,150,205,5,ILI9341_WHITE);

drawRect(230,10,80,220,ILI9341_WHITE);

{

do

{

if(moves%2==1 && player==false || moves%2==0 && player==true)

{

cursor+=10;

setCursor(240,cursor);

setTextSize(1);

println("I draw");

arduinoMove();

checkWinner();

}else

{

cursor+=10;

setCursor(240,cursor);

setTextSize(1);

println("Your move");

playerMove();

checkWinner();

}

delay(1000);

moves++;

}while (winner==0 && moves<10);

waitonetouch(&x,&y);

fillScreen(ILI9341_BLACK);

//Draw frame

drawRect(0,0,320,240,ILI9341_WHITE);

//Print "Game Over" Text

setCursor(50,30);

setTextColor(ILI9341_WHITE);

setTextSize(4);

print("GAME OVER");

if(winner == 0)

{

//Print "DRAW!" text

setCursor(110,100);

setTextColor(ILI9341_YELLOW);

setTextSize(4);

print("DRAW");

}

if(winner == 1)

{

//Print "HUMAN WINS!" text

setCursor(40,100);

setTextColor(ILI9341_BLUE);

setTextSize(4);

print("HUMAN WINS");

}

if(winner == 2)

{

//Print "CPU WINS!" text

setCursor(60,100);

setTextColor(ILI9341_RED);

setTextSize(4);

print("CPU WINS");

}

buttons[0].initButton(&tft, 160,200,200,40,ILI9341_WHITE, ILI9341_RED, ILI9341_WHITE,

again, 2);

buttons[0].drawButton();

do{

waitonetouch(&x,&y);

if (buttons[0].contains(x,y))

b=0;

}while(b>0);

}

}

void playerMove()

{

waitonetouch(&x,&y);

if((x>15 && x<85) && (y>15 && y<85))

{

if(board[0]==0)

{

board[0]=1;

drawX(15,15);

}

else error();

}

else if((x>85 && x<155)&& (y>15 && y<85)) //1

{

if(board[1]==0)

{

board[1]=1;

drawX(85,15);

}

else error();

}

if((x>155 && x<225)&& (y>15 && y<85)) //2

{

if(board[2]==0)

{

board[2]=1;

drawX(155,15);

}

else error();

}

if((x>15 && x<85)&& (y>85 && y<155)) //3

{

if(board[3]==0)

{

board[3]=1;

drawX(15,85);

}

else error();

}

si (( x > 85 &&  x < 155 ) &&  ( y > 85  &&  y < 155 ))  // 4

{

si ( tablero [ 4 ] == 0 )

{

tablero [ 4 ] = 1 ;

dibujarX ( 85 , 85 );

}

else error ();

}

if (( x > 155 &&  x < 225 ) &&  ( y > 85  &&  y < 155 ))  // 5

{

if ( tablero [ 5 ] == 0 )

{

tablero [ 5 ] = 1 ;

dibujarX ( 155 , 85 );

}

else error ();

}

si (( x > 15 &&  x < 85 ) &&  ( y > 155  &&  y < 225 ))  // 6

{

si ( tablero [ 6 ] == 0 )

{

tablero [ 6 ] = 1 ;

dibujarX ( 15 , 155 );

}

else error ();

}

if((x>85 && x<155)&& (y>155 && y<225)) //7

{

if(board[7]==0)

{

board[7]=1;

drawX(85,155);

}

else error();

}

if((x>155 && x<225)&& (y>155 && y<225)) //8

{

if(board[8]==0)

{

board[8]=1;

drawX(155,155);

}

else error();

}

}

void error(){

cursor+=10;

setCursor(240,cursor);

setTextSize(1);

println("Error");

delay(1000);

cursor+=10;

setCursor(240,cursor);

println("Try again.");

playerMove();

}

{

if(board[1]==x && board[2]==x && board[0]==y){

if(y==0){

return 0;

}

else return 1;

}

if(board[3]==x && board[6]==x && board[0]==y){

if(y==0){

return 0;

}

else return 6;

}

if(board[0]==y && board[4]==x && board[8]==x){

if(y==0){

return 0;

}

else return 8;

}

if(board[0]==x && board[1]==y && board[2]==x){

if(y==0){

return 1;

}

else return 0;

}

if(board[4]==x && board[7]==x && board[1]==y){

if(y==0){

return 1;

}

de lo contrario, devuelve  7 ;

}

if ( tablero [ 0 ] == x &&  tablero [ 1 ] == x  &&  tablero [ 2 ] == y ) {

si ( y == 0 ) {

volver 2 ;

}

de lo contrario, devuelve  0 ;

}

if ( tablero [ 5 ] == x &&  tablero [ 8 ] == x  &&  tablero [ 2 ] == y ) {

si ( y == 0 ) {

volver 2 ;

}

si no, devuelve  8 ;

}

if ( tablero [ 4 ] == x &&  tablero [ 6 ] == x  &&  tablero [ 2 ] == y ) {

si ( y == 0 ) {

volver 2 ;

}

de lo contrario, devuelve  6 ;

}

if ( tablero [ 4 ] == x &&  tablero [ 5 ] == x  &&  tablero [ 3 ] == y ) {

si ( y == 0 ) {

volver 3 ;

}

si no, devuelve  5 ;

}

if(board[0]==x && board[6]==x && board[3]==y){

if(y==0){

return 3;

}

else return 6;

}

if(board[3]==x && board[4]==y && board[5]==x){

if(y==0){

return 4;

}

else return 3;

}

if(board[1]==x && board[7]==x && board[4]==y){

if(y==0){

return 4;

}

else return 1;

}

if(board[0]==x && board[8]==x && board[4]==y){

if(y==0){

return 4;

}

else return 0;

}

if(board[2]==x && board[6]==x && board[4]==y){

if(y==0){

return 4;

}

else return 2;

}

if(board[3]==x && board[4]==x && board[5]==y){

if(y==0){

return 5;

}

else return 3;

}

if(board[2]==x && board[8]==x && board[5]==y){

if(y==0){

return 5;

}

else return 2;

}

if(board[7]==x && board[8]==x && board[6]==y){

if(y==0){

return 6;

}

else return 8;

}

if(board[0]==x && board[3]==x && board[6]==y){

if(y==0){

return 6;

}

else return 0;

}

if(board[4]==x && board[2]==x && board[6]==y){

if(y==0){

return 6;

}

else return 2;

}

if(board[1]==x && board[4]==x && board[7]==y){

if(y==0){

return 7;

}

else return 1;

}

if(board[6]==x && board[8]==x && board[7]==y){

if(y==0){

return 7;

}

else return 6;

}

if(board[6]==x && board[7]==x && board[8]==y){

if(y==0){

return 8;

}

else return 6;

}

if(board[5]==x && board[2]==x && board[8]==y){

if(y==0){

return 8;

}

else return 2;

}

if(board[4]==x && board[0]==x && board[8]==y){

if(y==0){

return 8;

}

else return 0;

}

else

return 100;

}

void arduinoMove()

{

if(moves<2)

{

do{

unsigned short int randomMove =random(4);

unsigned short int c=firstMoves[randomMove];

if(board[c]==0){

board[c]=2;

drawCpuMove(firstMoves[randomMove]);

return;

}

}while(moves<2);

}

if(moves<3)

{

if(board[4]==0)

{

board[4]=2;

drawCpuMove(4);

return;

}

}

unsigned short int twoPlayer = checkOpponent(2,0);

if(twoPlayer < 9)

{

board[twoPlayer]=2;

drawCpuMove(twoPlayer);

return;

}

unsigned short int nextMove = checkOpponent(1,0);

if(nextMove < 9)

{

board[nextMove]=2;

drawCpuMove(nextMove);

return;

}

unsigned short int next = checkOpponent(0,2);

if(next < 9)

{

board[next]=2;

drawCpuMove(next);

return;

}

do

{

unsigned short int randomMove =random(9);

if (board[randomMove]==0)

{

board[randomMove]=2;

drawCpuMove(randomMove);

return;

}

}while(nextMove == 100);

}

{

drawBitmap(x,y,circle,65,65,ILI9341_RED);

}

{

drawBitmap(x,y,x_bitmap,65,65,ILI9341_BLUE);

}

{

switch(move)

{

case 0: drawCircle(15,15); break;

case 1: drawCircle(85,15); break;

case 2: drawCircle(155,15); break;

case 3: drawCircle(15,85); break;

case 4: drawCircle(85,85); break;

case 5: drawCircle(155,85); break;

case 6: drawCircle(15,155); break;

case 7: drawCircle(85,155);break;

case 8: drawCircle(155,155);break;

}

}

void checkWinner()

{

// noughts win?

if (board[0]>0 && board[1]==board[0] && board[2]==board[0]) {

winner=board[0];

fillRect(15, 45, 205, 5, ILI9341_WHITE);

}

if (board[3]>0 && board[4]==board[3] && board[5]==board[3]) {

winner=board[3];

fillRect(15, 115, 205, 5, ILI9341_WHITE);

}

if ( tablero [ 6 ] > 0  &&  tablero [ 7 ] == tablero [ 6 ]  &&  tablero [ 8 ] == tablero [ 6 ])  {

ganador = tablero [ 6 ];

tft . fillRect ( 15 , 185 ,  205 ,  5 ,  ILI9341_WHITE );

}

if ( tablero [ 0 ] > 0  &&  tablero [ 3 ] == tablero [ 0 ]  &&  tablero [ 6 ] == tablero [ 0 ])  {

ganador = tablero [ 0 ];

tft . fillRect ( 45 , 15 ,  5 ,  205 ,  ILI9341_WHITE );

}

if ( tablero [ 1 ] > 0  &&  tablero [ 4 ] == tablero [ 1 ]  &&  tablero [ 7 ] == tablero [ 1 ])  {

ganador = tablero [ 1 ];

tft . fillRect ( 115 , 15 ,  5 ,  205 ,  ILI9341_WHITE );

}

if (board[2]>0 && board[5]==board[2] && board[8]==board[2]) {

winner=board[2];

fillRect(185, 15, 5, 205, ILI9341_WHITE);

}

if (board[0]>0 && board[4]==board[0] && board[8]==board[0]) {

winner=board[0];

for(unsigned short int xx=0;xx<6;xx++){

drawLine(20+xx, 20, 210+xx, 210, ILI9341_WHITE);

}

}

if (board[2]>0 && board[4]==board[2] && board[6]==board[2]) {

winner=board[2];

for(unsigned short int xx=0;xx<6;xx++){

drawLine(210+xx, 20, 20+xx, 210, ILI9341_WHITE);

}

}

}

void waitonetouch(unsigned short int *x,unsigned short int *y){

do

{

delay(10);

if ( myTouch . dataAvailable ()  ==  true )

{

myTouch . leer ();

x =  myTouch . getX ();

y =  myTouch . getY ();

volver ;

}

} while ( myTouch . dataAvailable () == false );

}

If you have any questions, leave them in the comments, we will answer you as soon as possible, and it will surely be of great help to more members of the community. Thank you! 😉

You may be interested:

Rate this post

Leave a Comment