124 lines
3.7 KiB
C++
Executable File
124 lines
3.7 KiB
C++
Executable File
//Analog Clock Sketch created by Embedded Downloads LTD
|
|
//To view the full tutorial go to www.embeddeddownloads.com
|
|
#include <Adafruit_GFX_AS.h> // Core graphics library
|
|
#include <Adafruit_ILI9341_8bit_AS.h>// Hardware-specific library
|
|
#include <TouchScreen.h>
|
|
|
|
// The control pins for the LCD can be assigned to any digital or
|
|
// analog pins...but we'll use the analog pins as this allows us to
|
|
// double up the pins with the touch screen (see the tft paint example).
|
|
#define LCD_CS A3 // Chip Select goes to Analog 3
|
|
#define LCD_CD A2 // Command/Data goes to Analog 2
|
|
#define LCD_WR A1 // LCD Write goes to Analog 1
|
|
#define LCD_RD A0 // LCD Read goes to Analog 0
|
|
|
|
#define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin
|
|
|
|
// When using the BREAKOUT BOARD only, use these 8 data lines to the LCD:
|
|
// For the Arduino Uno, Duemilanove, Diecimila, etc.:
|
|
// D0 connects to digital pin 8 (Notice these are
|
|
// D1 connects to digital pin 9 NOT in order!)
|
|
// D2 connects to digital pin 2
|
|
// D3 connects to digital pin 3
|
|
// D4 connects to digital pin 4
|
|
// D5 connects to digital pin 5
|
|
// D6 connects to digital pin 6
|
|
// D7 connects to digital pin 7
|
|
// For the Arduino Mega, use digital pins 22 through 29
|
|
// (on the 2-row header at the end of the board).
|
|
|
|
// These are the pins for the shield!
|
|
#define YP A1 // must be an analog pin, use "An" notation!
|
|
#define XM A2 // must be an analog pin, use "An" notation!
|
|
#define YM 7 // can be a digital pin
|
|
#define XP 6 // can be a digital pin
|
|
|
|
#define MINPRESSURE 10
|
|
#define MAXPRESSURE 1000
|
|
|
|
// For better pressure precision, we need to know the resistance
|
|
// between X+ and X- Use any multimeter to read it
|
|
// For the one we're using, its 300 ohms across the X plate
|
|
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
|
|
|
|
// Assign human-readable names to some common 16-bit color values:
|
|
#define BLACK 0x0000
|
|
#define BLUE 0x001F
|
|
#define RED 0xF800
|
|
#define GREEN 0x07E0
|
|
#define CYAN 0x07FF
|
|
#define MAGENTA 0xF81F
|
|
#define YELLOW 0xFFE0
|
|
#define WHITE 0xFFFF
|
|
|
|
Adafruit_ILI9341_8bit_AS tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
|
|
|
|
|
|
void setup() {
|
|
Serial.begin(9600);
|
|
tft.reset();
|
|
delay(10);
|
|
tft.begin(0x9341);
|
|
uint16_t identifier = tft.readID();
|
|
|
|
Serial.println(identifier, HEX);
|
|
tft.fillScreen(BLACK);
|
|
|
|
Serial.println("tft LCD test");
|
|
Serial.print("tft size is ");
|
|
Serial.print(tft.width());
|
|
Serial.print("x");
|
|
Serial.println(tft.height());
|
|
|
|
|
|
}
|
|
|
|
int key;
|
|
float a=0.0,b=0.0;
|
|
float c=5.0;
|
|
short lx[9]={0,1,1,1,1,-1,-1,-1,-1};
|
|
short ly[9]={0,1,1,-1,-1,1,1,-1,-1};
|
|
short lz[9]={0,1,-1,1,-1,1,-1,1,-1};
|
|
float lxn[9],lyn[9],lzn[9];
|
|
float xd[9],yd[9];
|
|
int ti=1;
|
|
float xt,yt,zt;
|
|
|
|
void loop(){
|
|
|
|
ti++;
|
|
|
|
a=a+0.05;
|
|
b=b+0.04;
|
|
|
|
for(int n=1;n<9;n++) {
|
|
xt=lx[n]*cos(a)-lz[n]*sin(a);
|
|
yt=ly[n];
|
|
zt=lx[n]*sin(a)+lz[n]*cos(a);
|
|
lxn[n]=xt;
|
|
lyn[n]=yt*cos(b)-zt*sin(b);
|
|
lzn[n]=yt*sin(b)+zt*cos(b)+c;
|
|
xd[n]=(240/2)+(240*lxn[n])/(2*lzn[n]);
|
|
yd[n]=(320/2)+(320*lyn[n])/(2*lzn[n]);
|
|
}
|
|
// tft.fillScreen(BLACK);
|
|
|
|
tft.drawLine(xd[1],yd[1],xd[2],yd[2],WHITE);
|
|
tft.drawLine(xd[2],yd[2],xd[4],yd[4],WHITE);
|
|
tft.drawLine(xd[3],yd[3],xd[4],yd[4],WHITE);
|
|
tft.drawLine(xd[3],yd[3],xd[1],yd[1],WHITE);
|
|
tft.drawLine(xd[5],yd[5],xd[6],yd[6],WHITE);
|
|
tft.drawLine(xd[6],yd[6],xd[8],yd[8],WHITE);
|
|
tft.drawLine(xd[7],yd[7],xd[8],yd[8],WHITE);
|
|
tft.drawLine(xd[7],yd[7],xd[5],yd[5],WHITE);
|
|
tft.drawLine(xd[1],yd[1],xd[5],yd[5],WHITE);
|
|
tft.drawLine(xd[2],yd[2],xd[6],yd[6],WHITE);
|
|
tft.drawLine(xd[3],yd[3],xd[7],yd[7],WHITE);
|
|
tft.drawLine(xd[4],yd[4],xd[8],yd[8],WHITE);
|
|
|
|
//printf("\r%d-%fs-%ffps",ti,w.time()/6,ti/(w.time()/6));
|
|
|
|
|
|
}
|
|
|