Added a background loader, periods will now be loaded in the background. Left blue button wil now pauze / resume the period switcher

This commit is contained in:
jancoow
2014-10-23 17:49:16 +02:00
parent 85b6a9d448
commit d276efc53f
4 changed files with 374 additions and 188 deletions
+5 -4
View File
@@ -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);
}
}
+4 -1
View File
@@ -13,5 +13,8 @@ public class LangsteHittegolfPeriode extends Grootheid{
setPeriod(StatisticsCalculator.langsteHittegolfPeriode(list));
}
public void displayGraph()
{
}
}
+364 -183
View File
@@ -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<Measurement> meting2;
ArrayList<Periode> periods;
ArrayList<Grootheid> day, week, month, month3, month6, year, year2;
ArrayList<ArrayList<Grootheid>> 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<Periode> periods = new ArrayList<Periode>();
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<Grootheid> 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<Periode>();
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<Grootheid> lstScreens = new ArrayList<Grootheid>();
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<Grootheid>();
week = new ArrayList<Grootheid>();
month = new ArrayList<Grootheid>();
month3 = new ArrayList<Grootheid>();
month6 = new ArrayList<Grootheid>();
year = new ArrayList<Grootheid>();
year2 = new ArrayList<Grootheid>();
periodsScreens = new ArrayList<ArrayList<Grootheid>>();
}
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();
}
}
+1
View File
@@ -1,3 +1,4 @@
package weerstation1;
import java.sql.Connection;