Files
Arduino/TFT_MENU/TFT_MENU.ino
Jérôme Delacotte 7b30d6e298 first commit
2025-03-06 11:15:32 +01:00

1340 lines
33 KiB
C++
Executable File
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//***THIS IS THE NEW VERSION THAT WORKS WITH THE NEW LIBRARIES!!!***
// TFTLCD.h and TouchScreen.h are from adafruit.com where you can also purchase a really nice 2.8" TFT with touchscreen :)
// 2012 Jeremy Saglimbeni - thecustomgeek.com
#include <Adafruit_GFX_AS.h> // Core graphics library
#include <Adafruit_ILI9341_8bit_AS.h>// Hardware-specific library
#include <TouchScreen.h>
//#include <EEPROM.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
#define TS_MINX 150
#define TS_MINY 120
#define TS_MAXX 920
#define TS_MAXY 940
// 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
// 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);
// Color definitions - in 5:6:5
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
#define TEST 0x1BF5
#define JJCOLOR 0x1CB6
#define JJORNG 0xFD03
Adafruit_ILI9341_8bit_AS tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
int i = 0;
int page = 0;
int blv;
int sleep = 0;
int pulsev = 0;
int redflag = 0;
int greenflag = 0;
int redled = 2;
int greenled = A4;
int backlight = 3;
int battfill;
unsigned long sleeptime;
unsigned long battcheck = 10000; // the amount of time between voltage check and battery icon refresh
unsigned long prevbatt;
int battv;
int battold;
int battpercent;
int barv;
int prevpage;
int sleepnever;
int esleep;
int backlightbox;
int antpos = 278;
unsigned long awakeend;
unsigned long currenttime;
unsigned long ssitime;
char voltage[10];
char battpercenttxt [10];
long readVcc() {
long result;
// Read 1.1V reference against AVcc
ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
delay(2); // Wait for Vref to settle
ADCSRA |= _BV(ADSC); // Convert
while (bit_is_set(ADCSRA,ADSC));
result = ADCL;
result |= ADCH<<8;
result = 1126400L / result; // Back-calculate AVcc in mV
return result;
}
void setup(void) {
pinMode(3, OUTPUT);
pinMode(redled, OUTPUT);
pinMode(greenled, OUTPUT);
//esleep = EEPROM.read(1);
//blv = EEPROM.read(2);
esleep = 3; // uncomment this and run once if you have not used the EEPROM before on your Arduino! Comment and reload after that.
blv = 255; // uncomment this and run once if you have not used the EEPROM before on your Arduino! Comment and reload after that.c
if (esleep == 1) {
sleeptime = 10000;
}
if (esleep == 2) {
sleeptime = 20000;
}
if (esleep == 3) {
sleeptime = 30000;
}
if (esleep == 4) {
sleeptime = 60000;
}
if (esleep == 5) {
sleeptime = 120000;
}
if (esleep == 6) {
sleeptime = 300000;
}
if (esleep == 7) {
sleeptime = 600000;
}
if (esleep == 8) {
sleeptime = 1200000;
}
if (esleep == 9) {
sleeptime = 1800000;
}
if (esleep == 10) {
sleeptime = 3600000;
}
if (esleep == 11) {
sleeptime = 14400000;
}
if (esleep == 12) {
sleepnever = 1;
}
awakeend = sleeptime + 1000; // set the current sleep time based on what the saved settings in EEPROM were
pinMode(backlight, OUTPUT);
Serial.begin(9600);
Serial.println("JOS");
Serial.println("Jeremy Saglimbeni - 2011");
tft.reset();
// uint16_t identifier = tft.readRegister(0x0);
// if (identifier == 0x9325) {
// Serial.println("Found ILI9325");
// } else if (identifier == 0x9328) {
// Serial.println("Found ILI9328");
// } else if (identifier == 0x7575) {
// Serial.println("Found HX8347G");
// } else {
// Serial.print("Unknown driver chip ");
// Serial.println(identifier, HEX);
// while (1);
// }
//tft.begin(identifier);
tft.reset();
delay(10);
tft.begin(0x9341);
uint16_t identifier = tft.readID();
tft.fillScreen(BLACK);
tft.setRotation(1);
tft.fillRect(71, 70, 50, 100, JJCOLOR);
tft.fillRect(134, 70, 50, 100, JJCOLOR);
tft.fillRect(197, 70, 50, 100, JJCOLOR);
tft.drawRect(46, 45, 228, 150, WHITE);
for(i = 0 ; i <= blv; i+=1) {
analogWrite(backlight, i);
delay(2);
}
delay(250);
tft.setCursor(85, 100);
tft.setTextSize(5);
tft.setTextColor(WHITE);
tft.print("J");
delay(250);
tft.setCursor(147, 100);
tft.print("O");
delay(250);
tft.setCursor(210, 100);
tft.print("S");
delay(500);
tft.setCursor(84, 210);
tft.setTextSize(1);
tft.print("Jeremy Saglimbeni - 2012");
tft.setCursor(108, 230);
tft.print("thecustomgeek.com");
delay(500);
cube();
tft.fillScreen(BLACK);
tft.fillRect(0, 0, 320, 10, JJCOLOR); // status bar
drawhomeicon(); // draw the home icon
tft.setCursor(1, 1);
tft.print("Your status bar message here. JOS 1.5 Beta");
tft.drawRect(297, 1, 20, 8, WHITE); //battery body
tft.fillRect(317, 3, 2, 4, WHITE); // battery tip
tft.fillRect(298, 2, 18, 6, BLACK); // clear the center of the battery
drawbatt();
ant(); // draw the bas "antenna" line without the "signal waves"
signal(); // draw the "signal waves" around the "antenna"
homescr(); // draw the homescreen
tft.drawRect(0, 200, 245, 40, WHITE); // message box
pinMode(13, OUTPUT);
}
#define MINPRESSURE 10
#define MAXPRESSURE 1000
void loop() {
digitalWrite(13, HIGH);
TSPoint p = ts.getPoint();
digitalWrite(13, LOW);
// if you're sharing pins, you'll need to fix the directions of the touchscreen pins!
//pinMode(XP, OUTPUT);
pinMode(XM, OUTPUT);
pinMode(YP, OUTPUT);
//pinMode(YM, OUTPUT);
currenttime = millis();
unsigned long currentawake = millis();
if((currentawake > awakeend) && (sleepnever == 0)) {
if (sleep == 0) {
for(i = blv ; i >= 0; i-=1) {
analogWrite(backlight, i);
delay(4);
}
sleep = 1;
}
}
// we have some minimum pressure we consider 'valid'
// pressure of 0 means no pressing!
if (p.z > MINPRESSURE && p.z < MAXPRESSURE) {
Serial.print("X = ");
Serial.print(p.x);
Serial.print("\tY = ");
Serial.print(p.y);
Serial.print("\tPressure = ");
Serial.println(p.z);
awakeend = currenttime + sleeptime; //set the sleep time when screen is pressed
if (sleep == 1) { // if asleep, then fade the backlight up
for(i = 0 ; i <= blv; i+=1) {
analogWrite(backlight, i);
delay(1);
}
sleep = 0; // change the sleep mode to "awake"
return;
}
// turn from 0->1023 to tft.width
p.x = map(p.x, TS_MINX, TS_MAXX, 240, 0);
p.y = map(p.y, TS_MINY, TS_MAXY, 320, 0);
Serial.print("p.y:"); // this code will help you get the y and x numbers for the touchscreen
Serial.print(p.y);
Serial.print(" p.x:");
Serial.println(p.x);
// area 1
if (p.y > 0 && p.y < 146 && p.x > 178 && p.x < 226) { // if this area is pressed
if (page == 5) { // and if page 5 is drawn on the screen
m5b1action(); // do whatever this button is
tft.setTextColor(RED);
tft.setTextSize(2);
tft.setCursor(12, 213);
tft.print("Menu 5 B1"); // display the command in the "message box"
yled(550); // flash the LED yellow for a bit - change the 550 value to change LED time on
clearmessage(); // after the LED goes out, clear the message
}
if (page == 4) {
m4b1action();
tft.setCursor(12, 213);
tft.print("Menu 4 B1");
yled(550);
clearmessage();
}
if (page == 3) {
m3b1action();
tft.setCursor(12, 213);
tft.print("Menu 3 B1");
yled(550);
clearmessage();
}
if (page == 2) {
m2b1action();
tft.setCursor(12, 213);
tft.print("Menu 2 B1");
yled(550);
clearmessage();
}
if (page == 1) {
m1b1action();
tft.setCursor(12, 213);
tft.print("Menu 1 B1");
yled(550);
clearmessage();
}
if (page == 0) { // if you are on the "home" page (0)
page = 1; // then you just went to the first page
redraw(); // redraw the screen with the page value 1, giving you the page 1 menu
}
}
// area 2
if (p.y > 168 && p.y < 320 && p.x > 180 && p.x < 226) {
if (page == 5) {
m5b2action();
tft.setCursor(12, 213);
tft.print("Menu 5 B2");
yled(550);
clearmessage();
}
if (page == 4) {
m4b2action();
tft.setCursor(12, 213);
tft.print("Menu 4 B2");
yled(550);
clearmessage();
}
if (page == 3) {
m3b2action();
tft.setCursor(12, 213);
tft.print("Menu 3 B2");
yled(550);
clearmessage();
}
if (page == 2) {
m2b2action();
tft.setCursor(12, 213);
tft.print("Menu 2 B2");
yled(550);
clearmessage();
}
if (page == 1) {
m1b2action();
tft.setCursor(12, 213);
tft.print("Menu 1 B2");
yled(550);
clearmessage();
}
if (page == 0) {
page = 2;
redraw();
}
}
// area 3
if (p.y > 0 && p.y < 146 && p.x > 120 && p.x < 168) {
if (page == 5) {
m5b3action();
tft.setCursor(12, 213);
tft.print("Menu 5 B3");
yled(550);
delay(1000);
clearmessage();
}
if (page == 4) {
m4b3action();
tft.setCursor(12, 213);
tft.print("Menu 4 B3");
yled(550);
clearmessage();
}
if (page == 3) {
m3b3action();
tft.setCursor(12, 213);
tft.print("Menu 3 B3");
yled(550);
clearmessage();
}
if (page == 2) {
m2b3action();
tft.setCursor(12, 213);
tft.print("Menu 2 B3");
yled(550);
clearmessage();
}
if (page == 1) {
Serial.println("Menu 1 B3");
m1b3action();
tft.setCursor(12, 213);
tft.print("Menu 1 B3");
yled(550);
clearmessage();
page = 3;
redraw();
}
if (page == 0) {
page = 3;
redraw();
}
}
// area 4
if (p.y > 167 && p.y < 320 && p.x > 120 && p.x < 168) {
if (page == 5) {
m5b4action();
tft.setCursor(12, 213);
tft.print("Menu 5 B4");
yled(550);
clearmessage();
}
if (page == 4) {
m4b4action();
tft.setCursor(12, 213);
tft.print("Menu 4 B4");
yled(550);
clearmessage();
}
if (page == 3) {
m3b4action();
tft.setCursor(12, 213);
tft.print("Menu 3 B4");
yled(550);
clearmessage();
}
if (page == 2) {
m2b4action();
tft.setCursor(12, 213);
tft.print("Menu 2 B4");
yled(550);
clearmessage();
}
if (page == 1) {
m1b4action();
tft.setCursor(12, 213);
tft.print("Menu 1 B4");
yled(550);
clearmessage();
}
if (page == 0) {
page = 4;
redraw();
}
}
// area 5
if (p.y > 0 && p.y < 146 && p.x > 54 && p.x < 104) {
if (page == 5) {
m5b5action();
tft.setCursor(12, 213);
tft.print("Menu 5 B5");
yled(550);
clearmessage();
}
if (page == 4) {
m4b5action();
tft.setCursor(12, 213);
tft.print("Menu 4 B5");
yled(550);
clearmessage();
}
if (page == 3) {
m3b5action();
tft.setCursor(12, 213);
tft.print("Menu 3 B5");
yled(550);
clearmessage();
}
if (page == 2) {
m2b5action();
tft.setCursor(12, 213);
tft.print("Menu 2 B5");
yled(550);
clearmessage();
}
if (page == 1) {
m1b5action();
tft.setCursor(12, 213);
tft.print("Menu 1 B5");
yled(550);
clearmessage();
}
if (page == 0) {
page = 5;
redraw();
}
}
// area 6
if (p.y > 168 && p.y < 320 && p.x > 54 && p.x < 104) {
if (page == 5) {
m5b6action();
tft.setCursor(12, 213);
tft.print("Menu 5 B6");
yled(550);
clearmessage();
}
if (page == 4) {
m4b6action();
tft.setCursor(12, 213);
tft.print("Menu 4 B6");
yled(550);
clearmessage();
}
if (page == 3) {
m3b6action();
tft.setCursor(12, 213);
tft.print("Menu 3 B6");
yled(550);
clearmessage();
}
if (page == 2) {
m2b6action();
tft.setCursor(12, 213);
tft.print("Menu 2 B6");
yled(550);
clearmessage();
}
if (page == 1) {
m1b6action();
tft.setCursor(12, 213);
tft.print("Menu 1 B6");
yled(550);
clearmessage();
}
if (page == 0) {
page = 6;
redraw();
}
}
// home
if (p.y > 280 && p.y < 340 && p.x > 0 && p.x < 48) { // if the home icon is pressed
if (page == 6) { // if you are leaving the settings page
clearmessage(); // clear the battery voltage out of the message box
tft.setTextSize(2);
tft.setTextColor(YELLOW);
tft.setCursor(12, 213);
tft.print("Settings Saved"); // display settings saved in message box
/*
EEPROM.write(1, esleep); // write the sleep value to EEPROM, so it will not lose settings without power
EEPROM.write(2, blv); // write the backlight value to EEPROM, so it will not lose settings without power
*/
clearsettings(); // erase all the drawings on the settings page
}
if (page == 0) { // if you are already on the home page
drawhomeiconred(); // draw the home icon red
delay(250); // wait a bit
drawhomeicon(); // draw the home icon back to white
return; // if you were on the home page, stop.
}
else { // if you are not on the settings, home, or keyboard page
page = prevpage; // a value to keep track of what WAS on the screen to redraw/erase only what needs to be
page = 0; // make the current page home
redraw(); // redraw the page
}
}
// message area
if (p.y > 0 && p.y < 246 && p.x > 4 && p.x < 44) {
clearmessage(); // erase the message
}
// backlight buttons
if (p.y > 0 && p.y < 56 && p.x > 176 && p.x < 226) {
if (page == 6) {
blightdown();
}
}
if (p.y > 260 && p.y < 320 && p.x > 180 && p.x < 230) {
if (page == 6) {
blightup();
}
}
// sleep buttons
if (p.y > 0 && p.y < 56 && p.x > 116 && p.x < 166) {
if (page == 6) {
sleepdec();
}
}
if (p.y > 260 && p.y < 320 && p.x > 116 && p.x < 166) {
if (page == 6) {
sleepinc();
}
}
/*
// optional buttons
if (p.y > 3 && p.y < 66 && p.x > 72 && p.x < 126) {
if (page == 6) {
option3down();
}
}
if (p.y > 269 && p.y < 324 && p.x > 72 && p.x < 126) {
if (page == 6) {
option3up();
}
}
*/
}
if(currenttime - prevbatt > battcheck) {
drawbatt();
prevbatt = currenttime;
}
}
void yled(int xled) { // "flashes" the "yellow" LED
for(i = xled ; i >= 0; i-=1) {
digitalWrite(greenled, LOW);
digitalWrite(redled, HIGH);
delay(1);
digitalWrite(greenled, HIGH);
digitalWrite(redled, LOW);
delay(1);
}
digitalWrite(greenled, LOW);
if (greenflag == 1) {
digitalWrite(redled, LOW);
digitalWrite(greenled, HIGH);
}
if (redflag == 1) {
digitalWrite(greenled, LOW);
digitalWrite(redled, HIGH);
}
}
void redraw() { // redraw the page
if ((prevpage != 6) || (page !=7)) {
clearcenter();
}
if (page == 0) {
homescr();
}
if (page == 1) {
menu1();
}
if (page == 2) {
menu2();
}
if (page == 3) {
menu3();
}
if (page == 4) {
menu4();
}
if (page == 5) {
menu5();
}
if (page == 6) {
settingsscr();
}
}
void clearcenter() { // the reason for so many small "boxes" is that it's faster than filling the whole thing
tft.drawRect(0, 20, 150, 50, BLACK);
tft.drawRect(170, 20, 150, 50, BLACK);
tft.drawRect(0, 80, 150, 50, BLACK);
tft.drawRect(170, 80, 150, 50, BLACK);
tft.drawRect(0, 140, 150, 50, BLACK);
tft.drawRect(170, 140, 150, 50, BLACK);
tft.fillRect(22, 37, 106, 16, BLACK);
tft.fillRect(192, 37, 106, 16, BLACK);
tft.fillRect(22, 97, 106, 16, BLACK);
tft.fillRect(192, 97, 106, 16, BLACK);
tft.fillRect(22, 157, 106, 16, BLACK);
tft.fillRect(192, 157, 106, 16, BLACK);
}
void clearsettings() { // this is used to erase the extra drawings when exiting the settings page
tft.fillRect(0, 20, 320, 110, BLACK);
delay(500);
clearmessage();
}
void homescr() {
tft.setTextColor(WHITE);
tft.setTextSize(2);
boxes();
tft.setCursor(41, 37);
tft.print("Menu 1");
tft.setCursor(210, 37);
tft.print("Menu 2");
tft.setCursor(41, 97);
tft.print("Menu 3");
tft.setCursor(210, 97);
tft.print("Menu 4");
tft.setCursor(41, 157);
tft.print("Menu 5");
tft.setCursor(200, 157);
tft.print("Settings");
}
void menu1() {
tft.setTextColor(WHITE);
tft.setTextSize(2);
boxes();
tft.setCursor(22, 37);
tft.print("Menu 1 B1");
tft.setCursor(192, 37);
tft.print("Menu 1 B2");
tft.setCursor(22, 97);
tft.print("Menu 1 B3");
tft.setCursor(192, 97);
tft.print("Menu 1 B4");
tft.setCursor(22, 157);
tft.print("Menu 1 B5");
tft.setCursor(192, 157);
tft.print("Menu 1 B6");
}
void menu2() {
tft.setTextColor(WHITE);
tft.setTextSize(2);
boxes();
tft.setCursor(22, 37);
tft.print("Menu 2 B1");
tft.setCursor(192, 37);
tft.print("Menu 2 B2");
tft.setCursor(22, 97);
tft.print("Menu 2 B3");
tft.setCursor(192, 97);
tft.print("Menu 2 B4");
tft.setCursor(22, 157);
tft.print("Menu 2 B5");
tft.setCursor(192, 157);
tft.print("Menu 2 B6");
}
void menu3() {
tft.setTextColor(WHITE);
tft.setTextSize(2);
boxes();
tft.setCursor(22, 37);
tft.print("Menu 3 B1");
tft.setCursor(192, 37);
tft.print("Menu 3 B2");
tft.setCursor(22, 97);
tft.print("Menu 3 B3");
tft.setCursor(192, 97);
tft.print("Menu 3 B4");
tft.setCursor(22, 157);
tft.print("Menu 3 B5");
tft.setCursor(192, 157);
tft.print("Menu 3 B6");
}
void menu4() {
tft.setTextColor(WHITE);
tft.setTextSize(2);
boxes();
tft.setCursor(22, 37);
tft.print("Menu 4 B1");
tft.setCursor(192, 37);
tft.print("Menu 4 B2");
tft.setCursor(22, 97);
tft.print("Menu 4 B3");
tft.setCursor(192, 97);
tft.print("Menu 4 B4");
tft.setCursor(22, 157);
tft.print("Menu 4 B5");
tft.setCursor(192, 157);
tft.print("Menu 4 B6");
}
void menu5() {
tft.setTextColor(WHITE);
tft.setTextSize(2);
boxes();
tft.setCursor(22, 37);
tft.print("Menu 5 B1");
tft.setCursor(192, 37);
tft.print("Menu 5 B2");
tft.setCursor(22, 97);
tft.print("Menu 5 B3");
tft.setCursor(192, 97);
tft.print("Menu 5 B4");
tft.setCursor(22, 157);
tft.print("Menu 5 B5");
tft.setCursor(192, 157);
tft.print("Menu 5 B6");
}
void settingsscr() {
// backlight level
tft.setTextColor(WHITE);
tft.setTextSize(3);
tft.fillRect(0, 20, 60, 50, RED);
tft.drawRect(0, 20, 60, 50, WHITE);
tft.drawRect(80, 20, 160, 50, JJCOLOR);
tft.fillRect(260, 20, 60, 50, GREEN);
tft.drawRect(260, 20, 60, 50, WHITE);
tft.setCursor(22, 33);
tft.print("-");
tft.setCursor(282, 33);
tft.print("+");
tft.setTextSize(1);
tft.setCursor(120, 31);
tft.print("Backlight Level");
tft.drawRect(110, 48, 100, 10, WHITE);
blbar();
// sleep time
tft.setTextSize(3);
tft.fillRect(0, 80, 60, 50, RED);
tft.drawRect(0, 80, 60, 50, WHITE);
tft.drawRect(80, 80, 160, 50, JJCOLOR);
tft.fillRect(260, 80, 60, 50, GREEN);
tft.drawRect(260, 80, 60, 50, WHITE);
tft.setCursor(22, 93);
tft.print("-");
tft.setCursor(282, 93);
tft.print("+");
tft.setTextSize(1);
tft.setCursor(130, 91);
tft.print("Sleep Time");
showsleep();
//?? uncomment this if you want a third adjustable option
/*
tft.fillRect(0, 140, 60, 50, RED);
tft.drawRect(0, 140, 60, 50, WHITE);
tft.drawRect(80, 140, 160, 50, JJCOLOR);
tft.fillRect(260, 140, 60, 50, GREEN);
tft.drawRect(260, 140, 60, 50, WHITE);
tft.print(22, 153, "-", WHITE, 3);
tft.print(130, 151, "Thing #3", WHITE);
tft.print(282, 153, "+", WHITE, 3);
tft.drawRect(110, 168, 100, 10, WHITE);
*/
battv = readVcc(); // read the voltage
itoa (battv, voltage, 10);
tft.setTextColor(YELLOW);
tft.setTextSize(2);
tft.setCursor(12, 213);
tft.print(voltage);
tft.setCursor(60, 213);
tft.print("mV");
/*
battpercent = (battv / 5000) * 100, 2;
itoa (battpercent, battpercenttxt, 10);
tft.print(102, 213, battpercenttxt, YELLOW, 2);
*/
}
void sleepinc() { // sleep increese adjustment
if (sleeptime == 14400000) {
sleepnever = 1;
esleep = 12;
sleeptime = 11111111;
showsleep();
}
if (sleeptime == 3600000) {
sleeptime = 14400000;
esleep = 11;
showsleep();
}
if (sleeptime == 1800000) {
sleeptime = 3600000;
esleep = 10;
showsleep();
}
if (sleeptime == 1200000) {
sleeptime = 1800000;
esleep = 9;
showsleep();
}
if (sleeptime == 600000) {
sleeptime = 1200000;
esleep = 8;
showsleep();
}
if (sleeptime == 300000) {
sleeptime = 600000;
esleep = 7;
showsleep();
}
if (sleeptime == 120000) {
sleeptime = 300000;
esleep = 6;
showsleep();
}
if (sleeptime == 60000) {
sleeptime = 120000;
esleep = 5;
showsleep();
}
if (sleeptime == 30000) {
sleeptime = 60000;
esleep = 4;
showsleep();
}
if (sleeptime == 20000) {
sleeptime = 30000;
esleep = 3;
showsleep();
}
if (sleeptime == 10000) {
sleeptime = 20000;
esleep = 2;
showsleep();
}
delay(350);
}
void sleepdec() { // sleep decreese adjustment
if (sleeptime == 20000) {
sleeptime = 10000;
esleep = 1;
showsleep();
}
if (sleeptime == 30000) {
sleeptime = 20000;
esleep = 2;
showsleep();
}
if (sleeptime == 60000) {
sleeptime = 30000;
esleep = 3;
showsleep();
}
if (sleeptime == 120000) {
sleeptime = 60000;
esleep = 4;
showsleep();
}
if (sleeptime == 300000) {
sleeptime = 120000;
esleep = 5;
showsleep();
}
if (sleeptime == 600000) {
sleeptime = 300000;
esleep = 6;
showsleep();
}
if (sleeptime == 1200000) {
sleeptime = 600000;
esleep = 7;
showsleep();
}
if (sleeptime == 1800000) {
sleeptime = 1200000;
esleep = 8;
showsleep();
}
if (sleeptime == 3600000) {
sleeptime = 1800000;
esleep = 9;
showsleep();
}
if (sleeptime == 14400000) {
sleeptime = 3600000;
esleep = 10;
showsleep();
}
if (sleepnever == 1) {
sleeptime = 14400000;
sleepnever = 0;
esleep = 11;
showsleep();
}
delay(350);
}
void showsleep() { // shows the sleep time on the settings page
tft.fillRect(110, 108, 80, 10, BLACK);
tft.setTextSize(1);
tft.setTextColor(WHITE);
if (sleeptime == 10000) {
tft.setCursor(130, 108);
tft.print("10 Seconds");
}
if (sleeptime == 20000) {
tft.setCursor(130, 108);
tft.print("20 Seconds");
}
if (sleeptime == 30000) {
tft.setCursor(130, 108);
tft.print("30 Seconds");
}
if (sleeptime == 60000) {
tft.setCursor(136, 108);
tft.print("1 Minute");
}
if (sleeptime == 120000) {
tft.setCursor(133, 108);
tft.print("2 Minutes");
}
if (sleeptime == 300000) {
tft.setCursor(133, 108);
tft.print("5 Minutes");
}
if (sleeptime == 600000) {
tft.setCursor(130, 108);
tft.print("10 Minutes");
}
if (sleeptime == 1200000) {
tft.setCursor(130, 108);
tft.print("20 Minutes");
}
if (sleeptime == 1800000) {
tft.setCursor(130, 108);
tft.print("30 Minutes");
}
if (sleeptime == 3600000) {
tft.setCursor(142, 108);
tft.print("1 Hour");
}
if (sleeptime == 14400000) {
tft.setCursor(139, 108);
tft.print("4 Hours");
}
if (sleepnever == 1) {
tft.setCursor(133, 108);
tft.print("Always On");
}
}
void option3down() { // adjust option 3 down in the settings screen
}
void option3up() { // adjust option 3 up in the settings screen
}
//custom defined actions - this is where you put your button functions
void m1b1action() {
signal();
}
void m1b2action() {
signalact();
}
void m1b3action() {
cube();
}
void m1b4action() {
}
void m1b5action() {
}
void m1b6action() {
}
void m2b1action() {
}
void m2b2action() {
}
void m2b3action() {
}
void m2b4action() {
}
void m2b5action() {
}
void m2b6action() {
}
void m3b1action() {
}
void m3b2action() {
}
void m3b3action() {
}
void m3b4action() {
}
void m3b5action() {
}
void m3b6action() {
}
void m4b1action() {
}
void m4b2action() {
}
void m4b3action() {
}
void m4b4action() {
}
void m4b5action() {
}
void m4b6action() {
}
void m5b1action() {
}
void m5b2action() {
}
void m5b3action() {
}
void m5b4action() {
}
void m5b5action() {
}
void m5b6action() {
}
void blightup() { // increase the backlight brightness
blv = blv + 5;
if (blv >= 255) {
blv = 255;
}
analogWrite(backlight, blv);
blbar();
}
void blightdown() { // decrease the backlight brightness
blv = blv - 5;
if (blv <= 5) {
blv = 5;
}
analogWrite(backlight, blv);
blbar();
}
void blbar() { // this function fills the yellow bar in the backlight brightness adjustment
if (blv < barv) {
tft.fillRect(111, 49, 98, 8, BLACK);
}
backlightbox = map(blv, 1, 255, 0, 98);
tft.fillRect(111, 49, backlightbox, 8, YELLOW);
barv = blv;
delay(25);
}
void ant() {
tft.fillRect((antpos + 5), 4, 1, 6, WHITE); // draws the "antenna" for the signal indicator
}
void boxes() { // redraw the button outline boxes
tft.drawRect(0, 20, 150, 50, JJCOLOR);
tft.drawRect(170, 20, 150, 50, JJCOLOR);
tft.drawRect(0, 80, 150, 50, JJCOLOR);
tft.drawRect(170, 80, 150, 50, JJCOLOR);
tft.drawRect(0, 140, 150, 50, JJCOLOR);
tft.drawRect(170, 140, 150, 50, JJCOLOR);
}
void signal() { // draws a whit 'signal indicator'
tft.drawLine((antpos + 4), 4, (antpos + 4), 5, WHITE);
tft.drawPixel((antpos + 3), 2, WHITE);
tft.drawPixel((antpos + 3), 7, WHITE);
tft.drawPixel((antpos + 2), 0, WHITE);
tft.drawLine((antpos + 2), 3, (antpos + 2), 6, WHITE);
tft.drawPixel((antpos + 2), 9, WHITE);
tft.drawPixel((antpos + 1), 1, WHITE);
tft.drawPixel((antpos + 1), 8, WHITE);
tft.drawLine(antpos, 2, antpos, 7, WHITE);
tft.drawLine((antpos + 6), 4, (antpos + 6), 5, WHITE);
tft.drawPixel((antpos + 7), 2, WHITE);
tft.drawPixel((antpos + 7), 7, WHITE);
tft.drawPixel((antpos + 8), 0, WHITE);
tft.drawLine((antpos + 8), 3, (antpos + 8), 6, WHITE);
tft.drawPixel((antpos + 8), 9, WHITE);
tft.drawPixel((antpos + 9), 1, WHITE);
tft.drawPixel((antpos + 9), 8, WHITE);
tft.drawLine((antpos + 10), 2, (antpos + 10), 7, WHITE);
}
void signalact() { // draws a red'signal indicator'
tft.drawLine((antpos + 4), 4, (antpos + 4), 5, RED);
tft.drawPixel((antpos + 3), 2, RED);
tft.drawPixel((antpos + 3), 7, RED);
tft.drawPixel((antpos + 2), 0, RED);
tft.drawLine((antpos + 2), 3, (antpos + 2), 6, RED);
tft.drawPixel((antpos + 2), 9, RED);
tft.drawPixel((antpos + 1), 1, RED);
tft.drawPixel((antpos + 1), 8, RED);
tft.drawLine(antpos, 2, antpos, 7, RED);
tft.drawLine((antpos + 6), 4, (antpos + 6), 5, RED);
tft.drawPixel((antpos + 7), 2, RED);
tft.drawPixel((antpos + 7), 7, RED);
tft.drawPixel((antpos + 8), 0, RED);
tft.drawLine((antpos + 8), 3, (antpos + 8), 6, RED);
tft.drawPixel((antpos + 8), 9, RED);
tft.drawPixel((antpos + 9), 1, RED);
tft.drawPixel((antpos + 9), 8, RED);
tft.drawLine((antpos + 10), 2, (antpos + 10), 7, RED);
}
void drawhomeicon() { // draws a white home icon
tft.drawLine(280, 219, 299, 200, WHITE);
tft.drawLine(300, 200, 304, 204, WHITE);
tft.drawLine(304, 203, 304, 200, WHITE);
tft.drawLine(305, 200, 307, 200, WHITE);
tft.drawLine(308, 200, 308, 208, WHITE);
tft.drawLine(309, 209, 319, 219, WHITE);
tft.drawLine(281, 219, 283, 219, WHITE);
tft.drawLine(316, 219, 318, 219, WHITE);
tft.drawRect(284, 219, 32, 21, WHITE);
tft.drawRect(295, 225, 10, 15, WHITE);
}
void drawhomeiconred() { // draws a red home icon
tft.drawLine(280, 219, 299, 200, RED);
tft.drawLine(300, 200, 304, 204, RED);
tft.drawLine(304, 203, 304, 200, RED);
tft.drawLine(305, 200, 307, 200, RED);
tft.drawLine(308, 200, 308, 208, RED);
tft.drawLine(309, 209, 319, 219, RED);
tft.drawLine(281, 219, 283, 219, RED);
tft.drawLine(316, 219, 318, 219, RED);
tft.drawRect(284, 219, 32, 21, RED);
tft.drawRect(295, 225, 10, 15, RED);
}
void clearmessage() {
tft.fillRect(12, 213, 226, 16, BLACK); // black out the inside of the message box
}
void drawbatt() {
battv = readVcc(); // read the voltage
if (battv < battold) { // if the voltage goes down, erase the inside of the battery
tft.fillRect(298, 2, 18, 6, BLACK);
}
battfill = map(battv, 3000, 4850, 2, 18); // map the battery voltage 3000 nis the low, 4150 is the high
if (battfill > 7) { // if the battfill value is between 8 and 18, fill with green
tft.fillRect(298, 2, battfill, 6, GREEN);
}
else { // if the battfill value is below 8, fill with red
tft.fillRect(298, 2, battfill, 6, RED);
}
battold = battv; // this helps determine if redrawing the battfill area is necessary
}
///////// CUBE ///////////////////
typedef struct
{
int x,y;
} point;
int key;
float a=0.0,b=0.0;
//float ax,ay,az;
short lx[8]={1,1,1,1,-1,-1,-1,-1};
short ly[8]={1,1,-1,-1,1,1,-1,-1};
short lz[8]={1,-1,1,-1,1,-1,1,-1};
float lxn[8],lyn[8],lzn[8];
float xd[8],yd[8];
float c=1.0;
float xt,yt,zt;
float mr[3][3];
float znm;
int face[6][4]={{4,0,1,5},{1,0,2,3},{5,1,3,7},{4,5,7,6},{0,4,6,2},{3,2,6,7}};
int facec[6]={10,20,30,20,30,10};
point points[10];
// Quick sort
int tri[12];
int zface[12];
void QuickSort(int deb, int fin)
{
int i=deb;
int j=fin;
double milieu=256*zface[tri[(deb+fin)/2]];
int temp;
while(i<=j)
{
while(256*zface[tri[i]]> milieu) i++;
while(256*zface[tri[j]]< milieu) j--;
if(i<=j)
{
temp=tri[i];
tri[i]=tri[j];
tri[j]=temp;
i++; j--;
}
}
if(i<fin) QuickSort(i,fin);
if(deb<j) QuickSort(deb,j);
// draw();
}
void cube() {
tft.fillScreen(BLACK);
Serial.println("Dans cube");
for (int i = 0; i <360;i+=5) {
delay(100);
Serial.println(i);
//TSPoint p = ts.getPoint();
//
// we have some minimum pressure we consider 'valid'
// pressure of 0 means no pressing!
//if (p.z > ts.pressureThreshhold) {
a=a-0.05;
b=b+0.05;
for(int n=0;n<8;n++) {
lxn[n]=lx[n]*cos(b)+ly[n]*sin(a)*sin(b)+lz[n]*cos(a)*sin(b);
lyn[n]=ly[n]*cos(a)-lz[n]*sin(a);
lzn[n]=-lx[n]*sin(b)+ly[n]*sin(a)*cos(b)+lz[n]*cos(a)*cos(b)+5;
xd[n]=(240/2)+(240*lxn[n]*c)/(2*lzn[n]);
yd[n]=(320/2)+(320*lyn[n]*c)/(2*lzn[n]);
}
int facev=0;
for(int m=0;m<6;m++) {
znm=(xd[face[m][2]]-xd[face[m][1]])*(yd[face[m][1]]-yd[face[m][3]])-(yd[face[m][2]]-yd[face[m][1]])*(xd[face[m][1]]-xd[face[m][3]]);
//znm=2; only zsorting
if(znm>0) {
zface[m]=lzn[face[m][0]]+lzn[face[m][1]]+lzn[face[m][2]]+lzn[face[m][3]]+lzn[face[m][4]];
tri[facev]=m;
facev++;
}
}
QuickSort(0,facev-1);
//tft.fillScreen(BLACK);
//for(int mb=0;mb<6;mb++) {
for(int mb=0;mb<facev;mb++) {
int color = WHITE;
switch (tri[mb]) {
case 0:
color = WHITE;
break;
case 1:
color = RED;
break;
case 2:
color = BLUE;
break;
case 3:
color = YELLOW;
break;
case 4:
color = GREEN;
break;
case 5:
color = CYAN;
break;
default:
break;
}
points[0].x = xd[face[tri[mb]][0]];
points[0].y = yd[face[tri[mb]][0]];
points[1].x = xd[face[tri[mb]][1]];
points[1].y = yd[face[tri[mb]][1]];
points[2].x = xd[face[tri[mb]][2]];
points[2].y = yd[face[tri[mb]][2]];
points[3].x = xd[face[tri[mb]][3]];
points[3].y = yd[face[tri[mb]][3]];
// FACE 1
tft.fillTriangle(
points[0].x, points[0].y,
points[1].x, points[1].y,
points[2].x, points[2].y,
color);
tft.fillTriangle(
points[0].x, points[0].y,
points[2].x, points[2].y,
points[3].x, points[3].y,
color);
//delay(500);
//tft.fillTriangle(points[1].x,points[1].y,points[2].x,points[2].y,points[3].x,points[3].y,WHITE);
// tft.fillTriangle(xd[3],yd[3],xd[4],yd[4],xd[1],yd[1], WHITE);
//FillPoly(points,4,facec[mb]);
}
}
}