From d276efc53f84012add207a25ce6b9c672311c687 Mon Sep 17 00:00:00 2001 From: jancoow Date: Thu, 23 Oct 2014 17:49:16 +0200 Subject: [PATCH] Added a background loader, periods will now be loaded in the background. Left blue button wil now pauze / resume the period switcher --- Grootheid.java | 9 +- LangsteHittegolfPeriode.java | 5 +- Weerstation.java | 547 +++++++++++++++++++++++------------ WeerstationConnector.java | 1 + 4 files changed, 374 insertions(+), 188 deletions(-) diff --git a/Grootheid.java b/Grootheid.java index 2e3951f..007d81f 100644 --- a/Grootheid.java +++ b/Grootheid.java @@ -1,3 +1,4 @@ +package weerstation1; import java.util.ArrayList; @@ -123,7 +124,7 @@ public class Grootheid } - public void display(){ + public void display(String periodname){ GUIboard.clearLeft(); GUIboard.clearRight(); GUIboard.clearTop(); @@ -138,13 +139,13 @@ public class Grootheid } if(!(statics_name == "")){ - GUIboard.writePageToMatrix(getName(), statics_name + getStatics(), ""); + GUIboard.writePageToMatrix(getName(), statics_name + getStatics(), periodname); }else if(!(custom == "")){ - GUIboard.writePageToMatrix(getName(), custom, ""); + GUIboard.writePageToMatrix(getName(), custom, periodname); } if(!(period == null)){ - GUIboard.writePageToMatrix(getName(), period.toString(), ""); + GUIboard.writePageToMatrix(getName(), period.toString(), periodname); } } diff --git a/LangsteHittegolfPeriode.java b/LangsteHittegolfPeriode.java index e8ccb4c..71f5c60 100644 --- a/LangsteHittegolfPeriode.java +++ b/LangsteHittegolfPeriode.java @@ -13,5 +13,8 @@ public class LangsteHittegolfPeriode extends Grootheid{ setPeriod(StatisticsCalculator.langsteHittegolfPeriode(list)); } - + public void displayGraph() + { + } + } diff --git a/Weerstation.java b/Weerstation.java index 4701d34..17ed771 100644 --- a/Weerstation.java +++ b/Weerstation.java @@ -1,4 +1,4 @@ - +package weerstation1; import java.util.ArrayList; import java.util.Calendar; import java.util.Iterator; @@ -11,36 +11,160 @@ import java.util.TimerTask; * * @author Projectgroep B5 */ -public class Weerstation { +public class Weerstation{ WeerstationConnector weerstation1; Calendar now, calPeriod; Measurement meting1; ArrayList meting2; + ArrayList periods; + ArrayList day, week, month, month3, month6, year, year2; + ArrayList> periodsScreens; + Timer starter; Timer animator; + int currentScreen; - boolean wait; - boolean graph; - boolean currentGraph; - boolean startup; - boolean startupState; - boolean load; + int periodeNr; + + boolean startup, startupState, load; + + boolean button1, button2, button3, graphIsDisplayed; /** * Constructor voor weerstation */ public Weerstation(){ - now = Calendar.getInstance(); - calPeriod = Calendar.getInstance(); - final ArrayList periods = new ArrayList(); - GUIboard.init(); startupState = true; starter = new Timer(); startStartupAnimatie(); + Timer timer = new Timer(); + createPeriods(); + backgroundLoader(); + + currentScreen = 0; + periodeNr = 0; + graphIsDisplayed = false; + + + //De thread die op de achtergrond alles laad + + + while(periodsScreens.size()<=0) + { + try + { + Thread.sleep(1); + } + catch(InterruptedException e) + { + e.printStackTrace(); + } + } + + stopStartupAnimatie(); + while(startup) + { + try + { + Thread.sleep(1); + } + catch(InterruptedException e) + { + e.printStackTrace(); + } + } + GUIboard.clearTop(); + GUIboard.clearLeft(); + GUIboard.clearRight(); + + + //Screen switcher + timer.scheduleAtFixedRate(new TimerTask() { + public void run() { + if(button2){ + currentScreen++; + if (currentScreen >= periodsScreens.get(periodeNr).size()){ + currentScreen = 0; + if(button1){ + periodeNr++; + } + } + }else if(button1){ + periodeNr++; + } + if(periodeNr > periodsScreens.size()){ + periodeNr = 0; + } + Grootheid obj = periodsScreens.get(periodeNr).get(currentScreen); + + if(button3){ + if(!graphIsDisplayed){ + obj.displayGraph(); + graphIsDisplayed = true; + } + }else{ + obj.display(periods.get(periodeNr).getName()); + graphIsDisplayed = false; + } + + + } + }, 0, 5*1000); + + //Update recent measurement every 60 seconds + timer.scheduleAtFixedRate(new TimerTask() { + public void run() { + meting1 = weerstation1.getMostRecentMeasurement(); + for (ArrayList l: periodsScreens) { + for (Grootheid obj : l) { + obj.updateRecent(meting1); + } + } + } + }, 60*1000, 60*1000); + + //Button checker + timer.scheduleAtFixedRate(new TimerTask() { + public void run() { + if(IO.readShort(0x0090) == 1){ //Blauw 1 aan + button1 = true; + }else{ + button1 = false; + } + if(IO.readShort(0x00100) == 1){ //Blauw 2 aan + button2 = true; + }else{ + button2 = false; + } + + Grootheid obj = periodsScreens.get(periodeNr).get(currentScreen); + + if(IO.readShort(0x0080) == 1){ //Rood aan + button3 = true; + if(!graphIsDisplayed){ + obj.displayGraph(); + graphIsDisplayed = true; + } + }else{ + if(graphIsDisplayed){ + obj.display(periods.get(periodeNr).getName()); + graphIsDisplayed = false; + } + button3 = false; + } + } + }, 0, 100); + } + + public void createPeriods(){ + now = Calendar.getInstance(); + calPeriod = Calendar.getInstance(); + periods = new ArrayList(); + calPeriod.add(Calendar.DATE, -1); periods.add(new Periode(now, calPeriod, "Dag")); calPeriod = Calendar.getInstance(); @@ -69,180 +193,235 @@ public class Weerstation { periods.add(new Periode(now, calPeriod, "Jaar 2")); calPeriod = Calendar.getInstance(); - //Day = 0 - //Week = 1 - //Month = 2 - //3 Months = 3 - //6 Months = 4 - //Year = 5 - //2 years = 6 - - //Kies hier welke periode je wil laden, hij veranderd in een keer alles: - final int periodeNr = 2; - weerstation1 = new WeerstationConnector(); - meting1 = weerstation1.getMostRecentMeasurement(); - meting2 = weerstation1.getAllMeasurementsBetween(periods.get(periodeNr).getBeginPeriode(), periods.get(periodeNr).getEindePeriode()); - currentGraph = false; - startupState = false; - currentScreen = 0; - wait = true; - graph = false; - Timer timer = new Timer(); - - - //All the different screen classes - final List lstScreens = new ArrayList(); - - lstScreens.add(new OutsideTemp(meting1, meting2)); //Buitentemperatuur - lstScreens.add(new OutsideHum(meting1, meting2)); //Luchtv. Buiten - lstScreens.add(new InsideTemp(meting1, meting2)); //Binnentemperatuur - lstScreens.add(new InsideHum(meting1, meting2)); //Luchtv. Binnen - lstScreens.add(new AvgWindSpeed(meting1, meting2)); //Gem. Windsnelheid - lstScreens.add(new WindDirection(meting1, meting2)); //Windrichting - lstScreens.add(new WindChill(meting1, meting2)); //Gevoelstemperatuur - lstScreens.add(new Barometer(meting1, meting2)); //Luchtdruk - lstScreens.add(new Voorspellingen(meting1)); //Weervoorspelling - lstScreens.add(new RainRate(meting1, meting2)); //Regenval - lstScreens.add(new CloudHeight(meting1, meting2)); //Wolkhoogte - lstScreens.add(new UVLevel(meting1, meting2)); //UV Level - lstScreens.add(new HeatIndex(meting1, meting2)); //Dauwpunt - lstScreens.add(new Zonsterkte(meting1, meting2)); //Zonkracht - lstScreens.add(new DewPoint(meting1, meting2)); //Dauwpunt - lstScreens.add(new Sun(meting1)); //Sunrise en Sunset - - lstScreens.add(new LangsteHittegolfPeriode(meting1, meting2)); - lstScreens.add(new LangsteZomerPeriode(meting1, meting2)); //Langste Zomerse Periode - // lstScreens.add(new LangsteTempStijgingPeriode(meting1, meting2)); //Langste temperatuurstijging - lstScreens.add(new LangsteRegenPeriode(meting1, meting2)); //Langste Regen Periode - lstScreens.add(new MaximaleRegenPeriode(meting1, meting2)); //Totale regenval in een periode - lstScreens.add(new GraadDagen(meting1, meting2)); //Aantal graaddagen in een periode - - - stopStartupAnimatie(); - while(startup) - { - try - { - Thread.sleep(1); - } - catch(InterruptedException e) - { - e.printStackTrace(); - } - } - GUIboard.clearTop(); - GUIboard.clearLeft(); - GUIboard.clearRight(); - - - //Screen switcher - timer.scheduleAtFixedRate(new TimerTask() { - public void run() { - if(!wait){ - currentScreen++; - } - if(currentScreen == lstScreens.size()){ - currentScreen = 0; - } - - Grootheid obj = lstScreens.get(currentScreen); - if(graph && (graph != currentGraph)) - { - obj.displayGraph(); - currentGraph = true; - } - else if(!graph) - { - obj.display(); - } - } - }, 0, 5*1000); - - //Update recent measurement every 60 seconds - timer.scheduleAtFixedRate(new TimerTask() { - public void run() { - meting1 = weerstation1.getMostRecentMeasurement(); - for(Grootheid obj : lstScreens){ - obj.updateRecent(meting1); - } - } - }, 60*1000, 60*1000); - - - //Update 24hours every 60 seconds - timer.scheduleAtFixedRate(new TimerTask() { - public void run() { - - animator = new Timer(); - startLoadAnimatie(); - - meting2 = weerstation1.getAllMeasurementsBetween(periods.get(periodeNr).getBeginPeriode(), periods.get(periodeNr).getEindePeriode()); - for(Grootheid obj : lstScreens){ - obj.updatePeriod(meting2); - } - - stopLoadAnimatie(); - - while(load) - { - try - { - Thread.sleep(1); - } - catch(InterruptedException e) - { - e.printStackTrace(); - } - } - } - },10*60*1000, 10*60*1000); - - - //Button checker - timer.scheduleAtFixedRate(new TimerTask() { - public void run() { - if(IO.readShort(0x100) == 1){ - if(IO.readShort(0x80) == 1){ - wait = true; - if(!graph) - { - Grootheid obj = lstScreens.get(currentScreen); - obj.displayGraph(); - } - graph = true; - }else if(IO.readShort(0x80) == 0){ - wait = false; - if(graph) - { - Grootheid obj = lstScreens.get(currentScreen); - obj.display(); - } - graph = false; - } - }else if(IO.readShort(0x100) == 0){ - if(IO.readShort(0x80) == 1){ - if(!graph) - { - Grootheid obj = lstScreens.get(currentScreen); - obj.displayGraph(); - } - graph = true; - }else if(IO.readShort(0x80) == 0){ - if(graph) - { - Grootheid obj = lstScreens.get(currentScreen); - obj.display(); - } - graph = false; - } - wait = true; - } - } - }, 0, 100); - + day = new ArrayList(); + week = new ArrayList(); + month = new ArrayList(); + month3 = new ArrayList(); + month6 = new ArrayList(); + year = new ArrayList(); + year2 = new ArrayList(); + periodsScreens = new ArrayList>(); } + public void backgroundLoader(){ + new Thread("Backgroundloader") + { + public void run() + { + Thread.currentThread().setPriority(Thread.MIN_PRIORITY); + meting1 = weerstation1.getMostRecentMeasurement(); + meting2 = weerstation1.getAllMeasurementsBetween(periods.get(0).getBeginPeriode(), periods.get(0).getEindePeriode()); + startupState = false; + //Day + day.add(new OutsideTemp(meting1, meting2)); //Buitentemperatuur + day.add(new OutsideHum(meting1, meting2)); //Luchtv. Buiten + + day.add(new AvgWindSpeed(meting1, meting2)); //Gem. Windsnelheid + day.add(new WindDirection(meting1, meting2)); //Windrichting + day.add(new WindChill(meting1, meting2)); //Gevoelstemperatuur + day.add(new RainRate(meting1, meting2)); //Regenval + + day.add(new Barometer(meting1, meting2)); //Luchtdruk + day.add(new InsideTemp(meting1, meting2)); //Binnentemperatuur + day.add(new InsideHum(meting1, meting2)); //Luchtv. Binnen + day.add(new Zonsterkte(meting1, meting2)); //Zonkracht + day.add(new Sun(meting1)); //Sunrise en Sunset + + day.add(new UVLevel(meting1, meting2)); //UV Level + day.add(new HeatIndex(meting1, meting2)); //Dauwpunt + day.add(new DewPoint(meting1, meting2)); //Dauwpunt + day.add(new CloudHeight(meting1, meting2)); //Wolkhoogte + + periodsScreens.add(day); + + + animator = new Timer(); + startLoadAnimatie(); + + meting1 = weerstation1.getMostRecentMeasurement(); + meting2 = weerstation1.getAllMeasurementsBetween(periods.get(1).getBeginPeriode(), periods.get(1).getEindePeriode()); + + //Week + week.add(new OutsideTemp(meting1, meting2)); //Buitentemperatuur + week.add(new OutsideHum(meting1, meting2)); //Luchtv. Buiten + + week.add(new AvgWindSpeed(meting1, meting2)); //Gem. Windsnelheid + week.add(new WindDirection(meting1, meting2)); //Windrichting + week.add(new WindChill(meting1, meting2)); //Gevoelstemperatuur + week.add(new RainRate(meting1, meting2)); //Regenval + + week.add(new Barometer(meting1, meting2)); //Luchtdruk + week.add(new InsideTemp(meting1, meting2)); //Binnentemperatuur + week.add(new InsideHum(meting1, meting2)); //Luchtv. Binnen + week.add(new Zonsterkte(meting1, meting2)); //Zonkracht + week.add(new Sun(meting1)); //Sunrise en Sunset + + week.add(new UVLevel(meting1, meting2)); //UV Level + week.add(new HeatIndex(meting1, meting2)); //Dauwpunt + week.add(new DewPoint(meting1, meting2)); //Dauwpunt + week.add(new CloudHeight(meting1, meting2)); //Wolkhoogte + + periodsScreens.add(week); + + meting1 = weerstation1.getMostRecentMeasurement(); + meting2 = weerstation1.getAllMeasurementsBetween(periods.get(2).getBeginPeriode(), periods.get(2).getEindePeriode()); + + //Month + month.add(new OutsideTemp(meting1, meting2)); //Buitentemperatuur + month.add(new OutsideHum(meting1, meting2)); //Luchtv. Buiten + + month.add(new AvgWindSpeed(meting1, meting2)); //Gem. Windsnelheid + month.add(new WindDirection(meting1, meting2)); //Windrichting + month.add(new WindChill(meting1, meting2)); //Gevoelstemperatuur + month.add(new RainRate(meting1, meting2)); //Regenval + + month.add(new Barometer(meting1, meting2)); //Luchtdruk + month.add(new InsideTemp(meting1, meting2)); //Binnentemperatuur + month.add(new InsideHum(meting1, meting2)); //Luchtv. Binnen + month.add(new Zonsterkte(meting1, meting2)); //Zonkracht + month.add(new Sun(meting1)); //Sunrise en Sunset + + month.add(new UVLevel(meting1, meting2)); //UV Level + month.add(new HeatIndex(meting1, meting2)); //Dauwpunt + month.add(new DewPoint(meting1, meting2)); //Dauwpunt + month.add(new CloudHeight(meting1, meting2)); //Wolkhoogte + + month.add(new MaximaleRegenPeriode(meting1, meting2)); //Totale regenval in een periode + month.add(new GraadDagen(meting1, meting2)); //Aantal graaddagen in een periode + + periodsScreens.add(month); + + meting1 = weerstation1.getMostRecentMeasurement(); + meting2 = weerstation1.getAllMeasurementsBetween(periods.get(3).getBeginPeriode(), periods.get(3).getEindePeriode()); + + //3 Months + month3.add(new OutsideTemp(meting1, meting2)); //Buitentemperatuur + month3.add(new OutsideHum(meting1, meting2)); //Luchtv. Buiten + + month3.add(new AvgWindSpeed(meting1, meting2)); //Gem. Windsnelheid + month3.add(new WindDirection(meting1, meting2)); //Windrichting + month3.add(new WindChill(meting1, meting2)); //Gevoelstemperatuur + month3.add(new RainRate(meting1, meting2)); //Regenval + + month3.add(new Barometer(meting1, meting2)); //Luchtdruk + month3.add(new InsideTemp(meting1, meting2)); //Binnentemperatuur + month3.add(new InsideHum(meting1, meting2)); //Luchtv. Binnen + month3.add(new Zonsterkte(meting1, meting2)); //Zonkracht + month3.add(new Sun(meting1)); //Sunrise en Sunset + + month3.add(new UVLevel(meting1, meting2)); //UV Level + month3.add(new HeatIndex(meting1, meting2)); //Dauwpunt + month3.add(new DewPoint(meting1, meting2)); //Dauwpunt + month3.add(new CloudHeight(meting1, meting2)); //Wolkhoogte + + month3.add(new MaximaleRegenPeriode(meting1, meting2)); //Totale regenval in een periode + month3.add(new GraadDagen(meting1, meting2)); //Aantal graaddagen in een periode + + periodsScreens.add(month3); + + meting1 = weerstation1.getMostRecentMeasurement(); + meting2 = weerstation1.getAllMeasurementsBetween(periods.get(4).getBeginPeriode(), periods.get(4).getEindePeriode()); + + //6 Months + month6.add(new OutsideTemp(meting1, meting2)); //Buitentemperatuur + month6.add(new OutsideHum(meting1, meting2)); //Luchtv. Buiten + + month6.add(new AvgWindSpeed(meting1, meting2)); //Gem. Windsnelheid + month6.add(new WindDirection(meting1, meting2)); //Windrichting + month6.add(new WindChill(meting1, meting2)); //Gevoelstemperatuur + month6.add(new RainRate(meting1, meting2)); //Regenval + + month6.add(new Barometer(meting1, meting2)); //Luchtdruk + month6.add(new InsideTemp(meting1, meting2)); //Binnentemperatuur + month6.add(new InsideHum(meting1, meting2)); //Luchtv. Binnen + month6.add(new Zonsterkte(meting1, meting2)); //Zonkracht + month6.add(new Sun(meting1)); //Sunrise en Sunset + + month6.add(new UVLevel(meting1, meting2)); //UV Level + month6.add(new HeatIndex(meting1, meting2)); //Dauwpunt + month6.add(new DewPoint(meting1, meting2)); //Dauwpunt + month6.add(new CloudHeight(meting1, meting2)); //Wolkhoogte + + month6.add(new MaximaleRegenPeriode(meting1, meting2)); //Totale regenval in een periode + month6.add(new GraadDagen(meting1, meting2)); //Aantal graaddagen in een periode + month6.add(new LangsteHittegolfPeriode(meting1, meting2)); //Langste Hittegolf Periode + month6.add(new LangsteZomerPeriode(meting1, meting2)); //Langste Zomerse Periode + month6.add(new LangsteRegenPeriode(meting1, meting2)); //Langste Regen Periode + //month6.add(new LangsteTempStijgingPeriode(meting1, meting2)); //Langste temperatuurstijging + + periodsScreens.add(month6); + + meting1 = weerstation1.getMostRecentMeasurement(); + meting2 = weerstation1.getAllMeasurementsBetween(periods.get(5).getBeginPeriode(), periods.get(5).getEindePeriode()); + + //Year + + year.add(new OutsideTemp(meting1, meting2)); //Buitentemperatuur + year.add(new OutsideHum(meting1, meting2)); //Luchtv. Buiten + + year.add(new AvgWindSpeed(meting1, meting2)); //Gem. Windsnelheid + year.add(new WindDirection(meting1, meting2)); //Windrichting + year.add(new WindChill(meting1, meting2)); //Gevoelstemperatuur + year.add(new RainRate(meting1, meting2)); //Regenval + + year.add(new Barometer(meting1, meting2)); //Luchtdruk + year.add(new InsideTemp(meting1, meting2)); //Binnentemperatuur + year.add(new InsideHum(meting1, meting2)); //Luchtv. Binnen + year.add(new Zonsterkte(meting1, meting2)); //Zonkracht + year.add(new Sun(meting1)); //Sunrise en Sunset + + year.add(new UVLevel(meting1, meting2)); //UV Level + year.add(new HeatIndex(meting1, meting2)); //Dauwpunt + year.add(new DewPoint(meting1, meting2)); //Dauwpunt + year.add(new CloudHeight(meting1, meting2)); //Wolkhoogte + + year.add(new MaximaleRegenPeriode(meting1, meting2)); //Totale regenval in een periode + year.add(new GraadDagen(meting1, meting2)); //Aantal graaddagen in een periode + year.add(new LangsteHittegolfPeriode(meting1, meting2)); //Langste Hittegolf Periode + year.add(new LangsteZomerPeriode(meting1, meting2)); //Langste Zomerse Periode + year.add(new LangsteRegenPeriode(meting1, meting2)); //Langste Regen Periode + //year.add(new LangsteTempStijgingPeriode(meting1, meting2)); //Langste temperatuurstijging + + periodsScreens.add(year); + + meting1 = weerstation1.getMostRecentMeasurement(); + meting2 = weerstation1.getAllMeasurementsBetween(periods.get(6).getBeginPeriode(), periods.get(6).getEindePeriode()); + + //2 Years + + year2.add(new OutsideTemp(meting1, meting2)); //Buitentemperatuur + year2.add(new OutsideHum(meting1, meting2)); //Luchtv. Buiten + + year2.add(new AvgWindSpeed(meting1, meting2)); //Gem. Windsnelheid + year2.add(new WindDirection(meting1, meting2)); //Windrichting + year2.add(new WindChill(meting1, meting2)); //Gevoelstemperatuur + year2.add(new RainRate(meting1, meting2)); //Regenval + + year2.add(new Barometer(meting1, meting2)); //Luchtdruk + year2.add(new InsideTemp(meting1, meting2)); //Binnentemperatuur + year2.add(new InsideHum(meting1, meting2)); //Luchtv. Binnen + year2.add(new Zonsterkte(meting1, meting2)); //Zonkracht + year2.add(new Sun(meting1)); //Sunrise en Sunset + + year2.add(new UVLevel(meting1, meting2)); //UV Level + year2.add(new HeatIndex(meting1, meting2)); //Dauwpunt + year2.add(new DewPoint(meting1, meting2)); //Dauwpunt + year2.add(new CloudHeight(meting1, meting2)); //Wolkhoogte + + year2.add(new MaximaleRegenPeriode(meting1, meting2)); //Totale regenval in een periode + year2.add(new GraadDagen(meting1, meting2)); //Aantal graaddagen in een periode + year2.add(new LangsteHittegolfPeriode(meting1, meting2)); //Langste Hittegolf Periode + year2.add(new LangsteZomerPeriode(meting1, meting2)); //Langste Zomerse Periode + year2.add(new LangsteRegenPeriode(meting1, meting2)); //Langste Regen Periode + //year2.add(new LangsteTempStijgingPeriode(meting1, meting2)); //Langste temperatuurstijging + + periodsScreens.add(year2); + + stopLoadAnimatie(); + } + }.start(); + } /** * Start de animatie die speelt tijdens het opstarten en laden van het weerstation * @@ -348,3 +527,5 @@ public class Weerstation { animator.cancel(); } } + + diff --git a/WeerstationConnector.java b/WeerstationConnector.java index c2bb0a9..03332d7 100644 --- a/WeerstationConnector.java +++ b/WeerstationConnector.java @@ -1,3 +1,4 @@ +package weerstation1; import java.sql.Connection;