#include <Adafruit_GFX.h> // Core graphics library
#include <SPI.h> // this is needed for display
#include <Adafruit_ILI9341.h>
#include <Arduino.h> // this is needed for FT6206
#include <Adafruit_FT6206.h>
#include <Wire.h>
#include <AccelStepper.h>
// The FT6206 uses hardware I2C (SCL/SDA)
Adafruit_FT6206 ctp = Adafruit_FT6206();
// // The display also uses hardware SPI, plus #9 & #10
// #define TFT_CS 10
// #define TFT_DC 9
#define TFT_DC 6
#define TFT_CS 10
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
const int dirPin = 2;
const int stepPin = 5;
// Size of the color selection boxes and the paintbrush size
#define BOXSIZE 40
#define BUTTON_TEXT_COLOR ILI9341_BLACK
#define BUTTON_TEXT_COLOR_CLICKED ILI9341_BLACK
#define BUTTON_TEXT_SIZE 2
int oldcolor, currentcolor;
String label = "CW";
String label1 = "CCW";
AccelStepper stepper1(1, 2, 5); // (Type of driver: with 2 pins, STEP, DIR)
void setup(void) {
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
// Set maximum speed value for the stepper
stepper1.setMaxSpeed(3000);
//while (!Serial); // used for leonardo debugging
Serial.begin(115200);
Serial.println(F("Cap Touch Paint!"));
//Wire.setPins(5, 4); // redefine first I2C port to be on pins 10/8
tft.begin();
if (! ctp.begin(40)) { // pass in 'sensitivity' coefficient
Serial.println("Couldn't start FT6206 touchscreen controller");
while (1);
}
Serial.println("Capacitive touchscreen started");
tft.fillScreen(ILI9341_BLACK);
// make the color selection boxes
tft.fillRect(40, 280, BOXSIZE, BOXSIZE, ILI9341_RED);
tft.setCursor(40 + (40 - (BUTTON_TEXT_SIZE * 6 * label.length())) / 2, (280 + (40-(BUTTON_TEXT_SIZE * 8) )/2));
tft.setTextSize(BUTTON_TEXT_SIZE);
tft.setTextColor(BUTTON_TEXT_COLOR);
tft.print(label);
tft.fillRect(160, 280, BOXSIZE, BOXSIZE, ILI9341_RED);
tft.setCursor(160 + (40 - (BUTTON_TEXT_SIZE * 6 * label1.length())) / 2, (280 + (40-(BUTTON_TEXT_SIZE * 8)) / 2));
tft.setTextSize(BUTTON_TEXT_SIZE);
tft.setTextColor(BUTTON_TEXT_COLOR);
tft.print(label1);
// select the current color 'red'
tft.drawRect(40, 280, BOXSIZE, BOXSIZE, ILI9341_WHITE);
tft.drawRect(160, 280, BOXSIZE, BOXSIZE, ILI9341_WHITE);
currentcolor = ILI9341_RED;
tft.setCursor(150,10);
tft.setTextSize(BUTTON_TEXT_SIZE);
tft.setTextColor(ILI9341_WHITE);
tft.println("SPEED");
// BOXES DIMENSION
tft.drawRect(140,30,80,40,ILI9341_WHITE);
tft.drawRect(20,120,35,35,ILI9341_WHITE);
tft.fillRect(20,120,35,35,ILI9341_WHITE);
tft.setCursor(20 + (35- (BUTTON_TEXT_SIZE * 6 * 1)) / 2, (120 + (35-(BUTTON_TEXT_SIZE * 8)) / 2));
tft.setTextSize(BUTTON_TEXT_SIZE);
tft.setTextColor(ILI9341_BLACK);
tft.println("1");
tft.drawRect(70,120,35,35,ILI9341_WHITE);
tft.fillRect(70,120,35,35,ILI9341_WHITE);
tft.setCursor(70 + (35 - (BUTTON_TEXT_SIZE * 6 * 2)) / 2, (120 + (35-(BUTTON_TEXT_SIZE * 8)) / 2));
tft.setTextSize(BUTTON_TEXT_SIZE);
tft.setTextColor(ILI9341_BLACK);
tft.println("10");
tft.drawRect(120,120,35,35,ILI9341_WHITE);
tft.fillRect(120,120,35,35,ILI9341_WHITE);
tft.setCursor(120 + (35 - (BUTTON_TEXT_SIZE * 6 * 3)) / 2, (120 + (35-(BUTTON_TEXT_SIZE * 8)) / 2));
tft.setTextSize(BUTTON_TEXT_SIZE);
tft.setTextColor(ILI9341_BLACK);
tft.println("100");
tft.drawRect(175,115,50,40,ILI9341_WHITE);
tft.drawRect(20,170,BOXSIZE,BOXSIZE,ILI9341_WHITE);
tft.fillRect(20, 170, BOXSIZE,BOXSIZE, ILI9341_YELLOW);
tft.setCursor(20 + (40 - (BUTTON_TEXT_SIZE * 6 * 1)) / 2, (170 + (40-(BUTTON_TEXT_SIZE * 8)) / 2));
tft.setTextSize(BUTTON_TEXT_SIZE+1);
tft.setTextColor(ILI9341_BLACK);
tft.println("+");
tft.drawRect(20,220,BOXSIZE,BOXSIZE,ILI9341_WHITE);
tft.fillRect(20, 220, BOXSIZE,BOXSIZE, ILI9341_YELLOW);
tft.setCursor(20 + (40 - (BUTTON_TEXT_SIZE * 6 * 1)) / 2, (220 + (40-(BUTTON_TEXT_SIZE * 8)) / 2));
tft.setTextSize(BUTTON_TEXT_SIZE+1);
tft.setTextColor(ILI9341_BLACK);
tft.println("-");
tft.drawRect(80,190,BOXSIZE,BOXSIZE,ILI9341_WHITE);
tft.fillRect(80, 190, BOXSIZE,BOXSIZE, ILI9341_BLUE);
tft.setCursor(85,175);
tft.setTextSize(BUTTON_TEXT_SIZE-1);
tft.setTextColor(ILI9341_WHITE);
tft.println("RESET");
tft.drawRect(150,175,60,30,ILI9341_WHITE);
tft.fillRect(150, 175,60,30, ILI9341_YELLOW);
tft.setCursor(150 + (40 - (BUTTON_TEXT_SIZE * 6 * 1)) / 2, (175 + (40-(BUTTON_TEXT_SIZE * 8)) / 2));
tft.setTextSize(BUTTON_TEXT_SIZE-1);
tft.setTextColor(ILI9341_BLACK);
tft.println("SPD TGL");
tft.drawRect(150,215,60,30,ILI9341_WHITE);
tft.fillRect(150, 215,60,30, ILI9341_YELLOW);
tft.setCursor(150 + (40 - (BUTTON_TEXT_SIZE * 6 * 1)) / 2, (215 + (40-(BUTTON_TEXT_SIZE * 8)) / 2));
tft.setTextSize(BUTTON_TEXT_SIZE-1);
tft.setTextColor(ILI9341_BLACK);
tft.println("AGL TGL");
tft.drawRect(90,285,60,30,ILI9341_WHITE);
tft.fillRect(90, 285,60,30, ILI9341_CYAN);
tft.setCursor(90 + (40 - (BUTTON_TEXT_SIZE * 6 * 1)) / 2, (285 + (40-(BUTTON_TEXT_SIZE * 8)) / 2));
tft.setTextSize(BUTTON_TEXT_SIZE-1);
tft.setTextColor(ILI9341_BLACK);
tft.println("START");
}
void loop() {
int speed = map(analogRead(A0),0,1023,0,3000);
String vel = String(speed);
int steps = 0;
// Wait for a touch
if (! ctp.touched()) {
return;
}
// Retrieve a point
TS_Point p = ctp.getPoint();
/*
// Print out raw data from screen touch controller
Serial.print("X = "); Serial.print(p.x);
Serial.print("\tY = "); Serial.print(p.y);
Serial.print(" -> ");
*/
// flip it around to match the screen.
p.x = map(p.x, 0, 240, 240, 0);
p.y = map(p.y, 0, 320, 320, 0);
// Print out the remapped (rotated) coordinates
Serial.print("("); Serial.print(p.x);
Serial.print(", "); Serial.print(p.y);
Serial.println(")");
if (p.y < 280 + BOXSIZE && p.y > 280) {
if (p.x < 40 + BOXSIZE && p.x > 40) {
tft.fillRect(40, 280, BOXSIZE, BOXSIZE, ILI9341_GREEN);
tft.setCursor(40 + (40 - (BUTTON_TEXT_SIZE * 6 * label.length())) / 2, (280 + (40-(BUTTON_TEXT_SIZE * 8) )/2));
tft.setTextSize(BUTTON_TEXT_SIZE);
tft.setTextColor(BUTTON_TEXT_COLOR_CLICKED);
tft.print(label);
tft.fillRect(160, 280, BOXSIZE, BOXSIZE, ILI9341_RED);
tft.setCursor(160 + (40 - (BUTTON_TEXT_SIZE * 6 * label1.length())) / 2, (280 + (40-(BUTTON_TEXT_SIZE * 8)) / 2));
tft.setTextSize(BUTTON_TEXT_SIZE);
tft.setTextColor(BUTTON_TEXT_COLOR);
tft.print(label1);
stepper1.setSpeed((speed));
tft.fillRect(142,32,77,37,ILI9341_BLACK);
tft.setCursor(140 + (80 - (BUTTON_TEXT_SIZE * 6 * label1.length())) / 2, (30 + (40-(BUTTON_TEXT_SIZE * 8)) / 2));
tft.setTextSize(BUTTON_TEXT_SIZE);
tft.setTextColor(ILI9341_WHITE);
tft.print(vel);
}
}
if (p.y < 280 + BOXSIZE && p.y > 280) {
if (p.x < 160 + BOXSIZE && p.x > 160) {
tft.fillRect(40, 280, BOXSIZE, BOXSIZE, ILI9341_RED);
tft.setCursor(40 + (40 - (BUTTON_TEXT_SIZE * 6 * label.length())) / 2, (280 + (40-(BUTTON_TEXT_SIZE * 8) )/2));
tft.setTextSize(BUTTON_TEXT_SIZE);
tft.setTextColor(BUTTON_TEXT_COLOR);
tft.print(label);
tft.fillRect(160, 280, BOXSIZE, BOXSIZE, ILI9341_GREEN);
tft.setCursor(160 + (40 - (BUTTON_TEXT_SIZE * 6 * label1.length())) / 2, (280 + (40-(BUTTON_TEXT_SIZE * 8)) / 2));
tft.setTextSize(BUTTON_TEXT_SIZE);
tft.setTextColor(BUTTON_TEXT_COLOR_CLICKED);
tft.print(label1);
stepper1.setSpeed((-speed));
// Step the motor with a constant speed previously set by setSpeed();
tft.fillRect(142,32,77,37,ILI9341_BLACK);
tft.setCursor(140 + (80 - (BUTTON_TEXT_SIZE * 6 * label1.length())) / 2, (30 + (40-(BUTTON_TEXT_SIZE * 8)) / 2));
tft.setTextSize(BUTTON_TEXT_SIZE);
tft.setTextColor(ILI9341_WHITE);
tft.print(vel);
}
}
}