Ahojte. Chcel som si spraviť zapinanie dashcam cez napätie v sieti auta. Keďže dnešné auta dobijajú podľa nálady a "EKO", chcel som nalogovať zopár priebehov aby som vedel kam sa uberať. Zistil som však že doma mám na záznam na SD kartu iba modul displeja , použil som ten a k tomu teda aj nejake menu...
Kód: Vybrať všetko
#include <UTFT.h>
#include <URTouch.h>
#include <SPI.h>
#include <SD.h>
UTFT myGLCD(CTE32_R2,38,39,40,41);
URTouch myTouch( 6, 5, 4, 3, 2);
const int chipSelect = 53;
extern uint8_t BigFont[];
File subor;
String startt = "START";
String stopp = "STOP";
int x=0, hodnota;
float napetie=0;
int x_dotyk, y_dotyk;
bool cyklus=0;
bool subor_otvoreny=0;
int f1 = VGA_BLUE, f15 = VGA_BLUE, f50 = VGA_BLUE, f100 = VGA_BLUE, f200 = VGA_BLUE, f500 = VGA_BLUE, f1000 = VGA_BLUE, f01 = VGA_BLUE, f02 = VGA_BLUE, f03 = VGA_BLUE, fzmaz = VGA_RED;
int cas, volt;
int volba=2;
int pauza =0;
unsigned long currentMillis = 0;
unsigned long previousMillis = 0;
int stara = 0;
void cakaj(int pauza)
{
currentMillis = millis();
if (currentMillis - previousMillis >= pauza)
{
previousMillis = currentMillis;
SD_karta(hodnota);
graf(hodnota);
}
}
void F_napetie(int hodnota, int delta)
{
//Serial.print("delta :"); Serial.println(delta);
//Serial.print("hodnota :"); Serial.println(hodnota);
if ((hodnota > (stara + delta)) || (hodnota < (stara - delta)))
{
stara = hodnota;
SD_karta(hodnota);
graf(hodnota);
}
}
void tlacitko(String text, int volba)
{
myGLCD.setColor(0, 255, 0);
if (text == "STOP") { myGLCD.setColor(255, 0, 0); }
myGLCD.fillRoundRect (5, 200, 100, 230);
myGLCD.setColor(255, 255, 255); myGLCD.print(text, 12, 207);
if (volba > 0) {
myGLCD.setColor(VGA_BLUE); myGLCD.fillRoundRect (135, 200, 310, 230); myGLCD.setColor(VGA_WHITE);
switch (volba) {
case 1:
myGLCD.print("1 ms", 143, 207);
break;
case 2:
myGLCD.print("15 ms", 143, 207);
break;
case 3:
myGLCD.print("50 ms", 143, 207);
break;
case 4:
myGLCD.print("100 ms", 143, 207);
break;
case 5:
myGLCD.print("200 ms", 143, 207);
break;
case 6:
myGLCD.print("500 ms", 143, 207);
break;
case 7:
myGLCD.print("1000 ms", 143, 207);
break;
case 8:
myGLCD.print("0,1 V", 143, 207);
break;
case 9:
myGLCD.print("0,2 V", 143, 207);
break;
case 10:
myGLCD.print("0,3 V", 143, 207);
break;
}
}
}
void menu()
{
//prvy riadok
myGLCD.setColor(f1); myGLCD.fillRoundRect (5, 5, 65, 35); myGLCD.setColor(255, 255, 255); myGLCD.print("1ms", 10, 12);
myGLCD.setColor(f15); myGLCD.fillRoundRect (70, 5, 140, 35); myGLCD.setColor(255, 255, 255); myGLCD.print("15ms", 75, 12);
myGLCD.setColor(f50); myGLCD.fillRoundRect (145, 5, 220, 35); myGLCD.setColor(255, 255, 255); myGLCD.print("50ms", 150, 12);
myGLCD.setColor(f100); myGLCD.fillRoundRect (225, 5, 310, 35); myGLCD.setColor(255, 255, 255); myGLCD.print("100ms", 230, 12);
//druhy riadok
myGLCD.setColor(f200); myGLCD.fillRoundRect (5, 70, 93, 100); myGLCD.setColor(255, 255, 255); myGLCD.print("200ms", 10, 75);
myGLCD.setColor(f500); myGLCD.fillRoundRect (105, 70, 193, 100); myGLCD.setColor(255, 255, 255); myGLCD.print("500ms", 110, 75);
myGLCD.setColor(f1000); myGLCD.fillRoundRect (200, 70, 310, 100); myGLCD.setColor(255, 255, 255); myGLCD.print("1000ms", 205, 75);
//treti riadok
myGLCD.setColor(f01); myGLCD.fillRoundRect (5, 140, 93, 170); myGLCD.setColor(255, 255, 255); myGLCD.print("0,1 V", 10, 147);
myGLCD.setColor(f02); myGLCD.fillRoundRect (105, 140, 193, 170); myGLCD.setColor(255, 255, 255); myGLCD.print("0,2 V", 110, 147);
myGLCD.setColor(f03); myGLCD.fillRoundRect (205, 140, 310, 170); myGLCD.setColor(255, 255, 255); myGLCD.print("0,3 V", 210, 147);
//zmaz
myGLCD.setColor(fzmaz); myGLCD.fillRoundRect (135, 200, 310, 230); myGLCD.setColor(255, 0, 0); myGLCD.print("ZMAZ subor", 143, 207);
tlacitko("start", 0);
}
void menu_touch()
{
if (myTouch.dataAvailable())
{
myTouch.read(); x_dotyk = myTouch.getX(); y_dotyk = myTouch.getY(); //Serial.println(" "); Serial.println(" "); Serial.print("X_dot = "); Serial.println(x_dotyk); Serial.print("Y_dot = "); Serial.println(y_dotyk);
//prvy riadok
if ((y_dotyk >= 0) && (y_dotyk <= 40))
{
//riadok 1
if ((x_dotyk >= 0) && (x_dotyk <= 65)) {menu(); myGLCD.setColor(VGA_WHITE); myGLCD.fillRoundRect (5, 5, 65, 35); myGLCD.setColor(255, 255, 255); myGLCD.print("1ms", 10, 12); volba = 1;}
else if ((x_dotyk >= 70) && (x_dotyk <= 140)){menu(); myGLCD.setColor(VGA_WHITE); myGLCD.fillRoundRect (70, 5, 140, 35); myGLCD.setColor(255, 255, 255); myGLCD.print("15ms", 75, 12); volba = 2;}
else if ((x_dotyk >= 145) && (x_dotyk <= 220)){menu(); myGLCD.setColor(VGA_WHITE); myGLCD.fillRoundRect (145, 5, 220, 35); myGLCD.setColor(255, 255, 255); myGLCD.print("50ms", 150, 12); volba = 3;}
else if ((x_dotyk >= 225) && (x_dotyk <= 310)){menu(); myGLCD.setColor(VGA_WHITE); myGLCD.fillRoundRect (225, 5, 310, 35); myGLCD.setColor(255, 255, 255); myGLCD.print("100ms", 230, 12); volba = 4;}
}
else if ((y_dotyk >= 65) && (y_dotyk <= 105)) //druhy riadok
{
//riadok 1
if ((x_dotyk >= 0) && (x_dotyk <= 90)) {menu(); myGLCD.setColor(VGA_WHITE); myGLCD.fillRoundRect (5, 70, 93, 100); myGLCD.setColor(255, 255, 255); myGLCD.print("200ms", 10, 75); volba = 5;}
else if ((x_dotyk >= 105) && (x_dotyk <= 190)){menu(); myGLCD.setColor(VGA_WHITE); myGLCD.fillRoundRect (105, 70, 193, 100); myGLCD.setColor(255, 255, 255); myGLCD.print("500ms", 110, 75); volba = 6;}
else if ((x_dotyk >= 200) && (x_dotyk <= 310)){menu(); myGLCD.setColor(VGA_WHITE); myGLCD.fillRoundRect (200, 70, 310, 100); myGLCD.setColor(255, 255, 255); myGLCD.print("1000ms", 205, 75); volba = 7;}
}
else if ((y_dotyk >= 135) && (y_dotyk <= 170))//treti riadok
{
//riadok 1
if ((x_dotyk >= 0) && (x_dotyk <= 90)) {menu(); myGLCD.setColor(VGA_WHITE); myGLCD.fillRoundRect (5, 140, 93, 170); myGLCD.setColor(255, 255, 255); myGLCD.print("0,1 V", 10, 147); volba = 8;}
else if ((x_dotyk >= 105) && (x_dotyk <= 190)){menu(); myGLCD.setColor(VGA_WHITE); myGLCD.fillRoundRect (105, 140, 193, 170); myGLCD.setColor(255, 255, 255); myGLCD.print("0,2 V", 110, 147); volba = 9;}
else if ((x_dotyk >= 205) && (x_dotyk <= 310)){menu(); myGLCD.setColor(VGA_WHITE); myGLCD.fillRoundRect (205, 140, 310, 170); myGLCD.setColor(255, 255, 255); myGLCD.print("0,3 V", 210, 147); volba = 10;}
}
//Serial.print("3X_dot = "); Serial.println(x_dotyk); Serial.print("3Y_dot = "); Serial.println(y_dotyk);
//zmaz
if ((x_dotyk >= 135) && (y_dotyk >= 200)) {myGLCD.setColor(VGA_WHITE); myGLCD.fillRoundRect (135, 200, 310, 230); myGLCD.setColor(255, 0, 0); myGLCD.print("ZMAZ subor", 143, 207); SD.remove("datalog.txt"); delay(100);
myGLCD.setColor(VGA_RED); myGLCD.fillRoundRect (135, 200, 310, 230); myGLCD.setColor(255, 0, 0); myGLCD.print("ZMAZ subor", 143, 207);}
}
}
void graf(int an_H)
{
x++;
int y = map(an_H, 0, 1023, 240, 0);
if (y>80) myGLCD.setColor(0, 255, 0);
if (y>160) myGLCD.setColor(0, 0, 255);
if (y<80) myGLCD.setColor(255, 0, 0);
napetie = (an_H / (float) 1023) * 5;
myGLCD.drawPixel(x,y);
myGLCD.printNumF(napetie, 2, 190, 5);
if (x > 319)
{
x = 0;
myGLCD.setColor(0,0,0);
myGLCD.fillRect(0,0,319,239);
tlacitko(stopp, volba);
}
}
void SD_karta(int an_H1)
{
String retazec = "";
int sensor = an_H1;
retazec += String(sensor);
// if the file is available, write to it:
if (subor)
{
retazec += ",";
retazec += millis();
subor.println(retazec);
Serial.println(retazec);
}
else
{
Serial.println("error opening datalog.txt");
}
}
void setup()
{
myGLCD.InitLCD(); myGLCD.clrScr(); myGLCD.setFont(BigFont); myGLCD.setBackColor(0, 0, 0);
myTouch.InitTouch(); myTouch.setPrecision(PREC_MEDIUM);
Serial.begin(115200); while (!Serial);
Serial.print("Initializing SD card...");
if (!SD.begin(chipSelect))
{
Serial.println("initialization failed.");
myGLCD.print("Init. SD card FAIL", 12, 100);
while (true);
}
Serial.println("initialization done.");
tlacitko(startt, volba);
}
void loop()
{
if (cyklus)
{
if (subor_otvoreny == 0) { subor = SD.open("datalog.txt", FILE_WRITE); subor_otvoreny = 1; Serial.println("otvaram subor"); }
hodnota = analogRead(A0);
switch (volba) {
case 1:
SD_karta(hodnota);
break;
case 2:
SD_karta(hodnota);
graf(hodnota);
break;
case 3:
cakaj(50);
break;
case 4:
cakaj(100);
break;
case 5:
cakaj(200);
break;
case 6:
cakaj(500);
break;
case 7:
cakaj(1000);
break;
case 8:
F_napetie(hodnota, 20);
break;
case 9:
F_napetie(hodnota, 50);
break;
case 10:
F_napetie(hodnota, 60);
break;
}
}
if (!cyklus) { menu_touch();}
if (myTouch.dataAvailable())
{
myTouch.read(); x_dotyk = myTouch.getX(); y_dotyk = myTouch.getY();
if ((y_dotyk >= 200) && (y_dotyk <= 230))
{
if ((x_dotyk >= 0) && (x_dotyk <= 200))
{
delay(300);
myGLCD.clrScr();
if (cyklus == 1) { tlacitko(startt, volba); }
if (cyklus == 0){ tlacitko(stopp, volba); subor.close();}
cyklus =! cyklus;
if (cyklus == 0) { subor_otvoreny = 0; subor.close(); Serial.println("zatvaram subor"); myGLCD.clrScr(); menu();}
}
}
}
}