Skocz do zawartości

Problem z odświeżaniem ekranu


Kuba323

Pomocna odpowiedź

Witam ostatnio zainteresowałem się arduino mam za sobą kilka projektów i teraz natknąłem się na problem z kodem, mianowicie chciałbym żeby ekran odświeżał się co 1min i wiem, że do tego najlepsza byłaby funkcja millis(), ale nie wiem jak jej użyć. Oto kod:

#include <DS3231.h>
#include <SPFD5408_Adafruit_GFX.h>
#include <SPFD5408_Adafruit_TFTLCD.h> 
#include <SPFD5408_TouchScreen.h>
#include <Wire.h>


DS3231 clock;
RTCDateTime dt;

#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RT 10


#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 Orange  0xFD20      
#define GreenYellow 0xAFE5
#define Navy     0x000F      
#define DarkGreen   0x03E0     
#define DarkCyan  0x03EF    
#define Maroon   0x7800    
#define Purple  0x780F     
#define Olive  0x7BE0      
#define LightGrey  0xC618      
#define DarkGrey  0x7BEF

#define TS_MINX 100
#define TS_MINY 100
#define TS_MAXX 1000
#define TS_MAXY 1000


Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RT); 

#define YP A2
#define XM A3 
#define YM 8  
#define XP 9

#define MINPRESSURE 200
#define MAXPRESSURE 350
void ekranstartowy();
void drawpg();
void drawtemp();
void dotyk();


TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
unsigned long currentMillis;
unsigned long previousMillis = 0;    
unsigned long interval = 5000;       
char page;


void setup() {

tft.reset();
tft.begin(0x9341);
page = 0;
Serial.begin(9600);

 Serial.println("Initialize DS3231");
 Wire.begin();
     clock.begin();
clock.setDateTime(2017, 8, 16, 19, 50, 00);


powitanie();         
}
void loop() {

 dt = clock.getDateTime();

 dotyk();


 unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval){
   previousMillis = currentMillis;

ekranstartowy();

} 
}


void dotyk () {
TSPoint p = ts.getPoint();
if (p.z > MINPRESSURE && p.z < MAXPRESSURE){
p.x = map(p.x, TS_MAXX, TS_MINX, 240, 0);
  p.y = map(p.y, TS_MAXY, TS_MINY,320, 0);
if (page == 0) {



  if(p.x>100 && p.x<155 && p.y>50 && p.y<300){ 



   pinMode(XM, OUTPUT);
   pinMode(YP, OUTPUT);



drawpg ();
 page = 1;

} 

if(p.x>150 && p.x<200 && p.y>50 && p.y<300){



   pinMode(XM, OUTPUT);
   pinMode(YP, OUTPUT);

drawtemp ();
page = 2;
 }
}
}
 if (page == 1) { 


if(p.x>50 && p.x<100 && p.y>50 && p.y<300){ 


   pinMode(XM, OUTPUT);
   pinMode(YP, OUTPUT);



ekranstartowy(); 
 page = 0; 
}
}
if (page == 2) {



if(p.x>50 && p.x<100 && p.y>50 && p.y<300) {



   pinMode(XM, OUTPUT);
   pinMode(YP, OUTPUT);



ekranstartowy(); 
page = 0;
}
}

}


void ekranstartowy (){

tft.fillScreen(DarkCyan);
tft.setTextSize(2);
tft.setTextColor(Orange);
tft.setCursor(10,10);
tft.print("Data:");
tft.println(clock.dateFormat("d-m-Y", dt)) ;
tft.drawLine(0,33, 10000, 40, Orange);
tft.setCursor(10,40);
tft.print("Godzina:");
tft.println(clock.dateFormat("H:i:s", dt));
tft.drawLine(0,65, 10000, 40,  Orange);
tft.setCursor(10,72);
tft.print("Temperatura:");
tft.setCursor(150,72);
tft.print(clock.readTemperature()); 
tft.drawLine(0,95, 10000, 40,  Orange);
tft.fillRect(10,110, 220, 80,  DarkGreen);
tft.setTextSize(3);
tft.setTextColor(Orange);
tft.setCursor(20,120);
tft.print("Pogoda na ");
tft.setCursor(20, 150);
tft.print("polu");
tft.fillRect(10,210, 220, 80, DarkGreen);
tft.setTextSize(3);
tft.setTextColor( Orange);
tft.setCursor(20,220);
tft.print("Temperatura");
tft.setCursor(20, 250);
tft.print("na piecu");

}
void drawpg () {

tft.fillScreen(DarkCyan);
tft.setTextSize(3);
tft.fillRect(10,20,220,80, DarkGreen);
tft.setTextColor(Orange);
tft.setCursor(80,50);
tft.print("<-");
tft.setTextColor (Orange);
tft.setCursor(10, 120);
tft.print("Wilgotnosc");
tft.setTextColor(Orange);
tft.setCursor(10,210);
tft.print("Temperatura");

}

void drawtemp (){

tft.fillScreen(DarkCyan);
tft.setTextColor(Orange);
tft.setTextSize(3);
tft.setCursor(10,150);
tft.print("Temperatutra");
tft.fillRect(10,20,220,80, DarkGreen);
tft.setTextColor(Orange);
tft.setCursor(80,50);
tft.print("<-");

} 
void powitanie () {
 tft.fillScreen(DarkCyan);
 tft.setTextColor(Orange);
 tft.setTextSize(4);
 tft.setCursor(50,70);
 tft.print("Witaj");
}

Męczę się nad tym odświeżaniem już 2 tyg. próbowałem z biblioteką timers itp. ale nie działa praktycznie za każdym razem po wyświetleniu danych pojawia się biały ekran dlatego bardzo proszę o pomoc.

Link do komentarza
Share on other sites

To jak tu sprawdzasz czas wygląda w porządku, problem prawdopodobnie masz jakiś inny. Pierwsze co, to proponuję sprawdzić, czy nie zbliżasz się do limitu pamięci. Po skompilowaniu programu w Arduino masz coś takiego:

Sketch uses 5904 bytes (18%) of program storage space. Maximum is 32256 bytes.
Global variables use 575 bytes (28%) of dynamic memory, leaving 1473 bytes for local variables. Maximum is 2048 bytes.

Zobacz, czy przypadkiem nie używasz za dużo pamięci. Po drugie trochę wygląda jakbyś napisał długi program bez sprawdzania poszczególnych jego części. Sprawdzałeś poszczególne funkcje do rysowania dając je na przykład jako jedyne wywołanie w loop()?

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.