Added support for graphs

Also added small bits of code to center the name on the matrix display.
This commit is contained in:
Kenneth van Ewijk
2014-10-11 20:05:47 +02:00
parent a0c37c1a23
commit eb3718cc0b
12 changed files with 311 additions and 171 deletions
+24 -12
View File
@@ -1,32 +1,44 @@
import java.util.ArrayList;
public class AvgWindspeed extends Grootheid{
public class AvgWindSpeed extends Grootheid{
public ArrayList<Double> list;
//constructor
public AvgWindspeed(Measurement measurement1, ArrayList<Measurement> measurement2){
public AvgWindSpeed(Measurement measurement1, ArrayList<Measurement> measurement2){
list = new ArrayList<Double>();
updateRecent(measurement1);
update24Hour(measurement2);
}
public void updateRecent(Measurement measurement1){
setCurrent(measurement1.getAvgWindSpeed());
}
public void update24Hour(ArrayList<Measurement> measurement2){
ArrayList<Double> list = new ArrayList<Double>();
for(Measurement ms : measurement2)
{
list.add(ms.getAvgWindSpeed());
}
createList(measurement2);
calculateMaxMinAvg(list);
}
public void display(){
super.display();
GUIboard.writePageToMatrix("Windsnelheid in m/s", "Gemiddelde: " + getAvg(), "");
GUIboard.writePageToMatrix("Gem. Windsnelheid", "Gemiddelde: " + getAvg(), "");
}
public void displayGraph()
{
GUIboard.writeGraphToMatrix(list, getMin(), getMax());
}
private void createList(ArrayList<Measurement> measurement2)
{
if(!list.isEmpty())
{
list.clear();
}
for(Measurement ms : measurement2)
{
list.add(ms.getAvgWindSpeed());
}
}
}
+20 -8
View File
@@ -1,9 +1,11 @@
import java.util.ArrayList;
public class CloudHeight extends Grootheid{
public ArrayList<Double> list;
//constructor
public CloudHeight(Measurement measurement1, ArrayList<Measurement> measurement2){
list = new ArrayList<Double>();
updateRecent(measurement1);
update24Hour(measurement2);
}
@@ -13,14 +15,7 @@ public class CloudHeight extends Grootheid{
setCurrent(measurement1.getCloudHeight());
}
public void update24Hour(ArrayList<Measurement> measurement2){
ArrayList<Double> list = new ArrayList<Double>();
for(Measurement ms : measurement2)
{
list.add(ms.getCloudHeight());
}
createList(measurement2);
calculateMaxMinAvg(list);
}
@@ -29,4 +24,21 @@ public class CloudHeight extends Grootheid{
GUIboard.writePageToMatrix("Wolkhoogte", "Gemiddelde: " + getAvg(), "");
}
public void displayGraph()
{
GUIboard.writeGraphToMatrix(list, getMin(), getMax());
}
private void createList(ArrayList<Measurement> measurement2)
{
if(!list.isEmpty())
{
list.clear();
}
for(Measurement ms : measurement2)
{
list.add(ms.getCloudHeight());
}
}
}
+29 -12
View File
@@ -125,7 +125,15 @@ public class GUIboard {
char[] regel1CharArray = regel1.toCharArray();
char[] regel2CharArray = regel2.toCharArray();
char[] regel3CharArray = (regel3 + nav).toCharArray();
double centerMargins = 20-regel1CharArray.length;
int centerLeft = (int) Math.floor(centerMargins/2.0);
for(int i=0; i<centerLeft; i++)
{
IO.writeShort(0x40, ' ');
}
for(char ch : regel1CharArray)
{
IO.writeShort(0x40, ch);
@@ -150,34 +158,43 @@ public class GUIboard {
public static void writeGraphToMatrix(ArrayList<Double> msList, double min, double max)
{
IO.init();
clearBottom();
createAxis(min,max);
int x,y;
double getal;
for(int i=0;i<1440;i++)
for(double i=0;i<msList.size();i++)
{
getal = msList.get(i);
x = ((i/1439)*127);
y = (int) ((getal - min)/(max-min))*31;
getal = msList.get((int)i);
x = (int)((i/msList.size())*127.0);
double temp = ((getal - min)/(max-min));
y = (int)(temp*31.0);
System.out.println(x + ", " + y + " <- " + getal + "/" + msList.size() + " " + i + " -> " + temp);
y = 31 - y;
IO.writeShort(0x42, 1 << 12 | x << 5 | y );
}
}
//Private functions
private static void createAxis(double min, double max)
public static void createAxis(double min, double max)
{
//temp
int x,y;
double diff = max-min;
double valpix = diff/32;
if(min<=0){
y = (int) ( (diff-max) / valpix);
System.out.println(y);
y = 32 - y;
System.out.println(y);
if(min==0)
{
y = 31;
}
else
{
y = (int) ( (diff-max) / valpix);
y = 31 - y;
System.out.println("Y: " + y);
}
for(int x2 = 0; x2 < 128; x2++)
{
IO.writeShort(0x42, 1 << 12 | x2 << 5 | y );
+4
View File
@@ -83,4 +83,8 @@ public class Grootheid
GUIboard.writeLeftDigits(getMax());
GUIboard.writeRightDigits(getMin());
}
public void displayGraph()
{
}
}
+20 -8
View File
@@ -1,9 +1,11 @@
import java.util.ArrayList;
public class InsideHum extends Grootheid{
public ArrayList<Double> list;
//constructor
public InsideHum(Measurement measurement1, ArrayList<Measurement> measurement2){
list = new ArrayList<Double>();
updateRecent(measurement1);
update24Hour(measurement2);
}
@@ -13,14 +15,7 @@ public class InsideHum extends Grootheid{
setCurrent(measurement1.getInsideHum());
}
public void update24Hour(ArrayList<Measurement> measurement2){
ArrayList<Double> list = new ArrayList<Double>();
for(Measurement ms : measurement2)
{
list.add(ms.getInsideHum());
}
createList(measurement2);
calculateMaxMinAvg(list);
}
@@ -29,4 +24,21 @@ public class InsideHum extends Grootheid{
GUIboard.writePageToMatrix("Luchtv. Binnen", "Gemiddelde: " + getAvg(), "");
}
public void displayGraph()
{
GUIboard.writeGraphToMatrix(list, getMin(), getMax());
}
private void createList(ArrayList<Measurement> measurement2)
{
if(!list.isEmpty())
{
list.clear();
}
for(Measurement ms : measurement2)
{
list.add(ms.getInsideHum());
}
}
}
+20 -8
View File
@@ -1,9 +1,11 @@
import java.util.ArrayList;
public class InsideTemp extends Grootheid{
public ArrayList<Double> list;
//constructor
public InsideTemp(Measurement measurement1, ArrayList<Measurement> measurement2){
list = new ArrayList<Double>();
updateRecent(measurement1);
update24Hour(measurement2);
}
@@ -13,14 +15,7 @@ public class InsideTemp extends Grootheid{
setCurrent(measurement1.getInsideTemp());
}
public void update24Hour(ArrayList<Measurement> measurement2){
ArrayList<Double> list = new ArrayList<Double>();
for(Measurement ms : measurement2)
{
list.add(ms.getInsideTemp());
}
createList(measurement2);
calculateMaxMinAvg(list);
}
@@ -29,4 +24,21 @@ public class InsideTemp extends Grootheid{
GUIboard.writePageToMatrix("Binnentemperatuur", "Gemiddelde: " + getAvg(), "");
}
public void displayGraph()
{
GUIboard.writeGraphToMatrix(list, getMin(), getMax());
}
private void createList(ArrayList<Measurement> measurement2)
{
if(!list.isEmpty())
{
list.clear();
}
for(Measurement ms : measurement2)
{
list.add(ms.getInsideTemp());
}
}
}
+20 -8
View File
@@ -1,9 +1,11 @@
import java.util.ArrayList;
public class OutsideHum extends Grootheid{
public ArrayList<Double> list;
//constructor
public OutsideHum(Measurement measurement1, ArrayList<Measurement> measurement2){
list = new ArrayList<Double>();
updateRecent(measurement1);
update24Hour(measurement2);
}
@@ -13,14 +15,7 @@ public class OutsideHum extends Grootheid{
setCurrent(measurement1.getOutsideHum());
}
public void update24Hour(ArrayList<Measurement> measurement2){
ArrayList<Double> list = new ArrayList<Double>();
for(Measurement ms : measurement2)
{
list.add(ms.getOutsideHum());
}
createList(measurement2);
calculateMaxMinAvg(list);
}
@@ -29,4 +24,21 @@ public class OutsideHum extends Grootheid{
GUIboard.writePageToMatrix("Luchtv. Buiten", "Gemiddelde: " + getAvg(), "");
}
public void displayGraph()
{
GUIboard.writeGraphToMatrix(list, getMin(), getMax());
}
private void createList(ArrayList<Measurement> measurement2)
{
if(!list.isEmpty())
{
list.clear();
}
for(Measurement ms : measurement2)
{
list.add(ms.getOutsideHum());
}
}
}
+20 -8
View File
@@ -1,9 +1,11 @@
import java.util.ArrayList;
public class OutsideTemp extends Grootheid{
public ArrayList<Double> list;
//constructor
public OutsideTemp(Measurement measurement1, ArrayList<Measurement> measurement2){
list = new ArrayList<Double>();
updateRecent(measurement1);
update24Hour(measurement2);
}
@@ -13,14 +15,7 @@ public class OutsideTemp extends Grootheid{
setCurrent(measurement1.getOutsideTemp());
}
public void update24Hour(ArrayList<Measurement> measurement2){
ArrayList<Double> list = new ArrayList<Double>();
for(Measurement ms : measurement2)
{
list.add(ms.getOutsideTemp());
}
createList(measurement2);
calculateMaxMinAvg(list);
}
@@ -29,4 +24,21 @@ public class OutsideTemp extends Grootheid{
GUIboard.writePageToMatrix("Buitentemperatuur", "Gemiddelde: " + getAvg(), "");
}
public void displayGraph()
{
GUIboard.writeGraphToMatrix(list, getMin(), getMax());
}
private void createList(ArrayList<Measurement> measurement2)
{
if(!list.isEmpty())
{
list.clear();
}
for(Measurement ms : measurement2)
{
list.add(ms.getOutsideTemp());
}
}
}
+20 -9
View File
@@ -1,9 +1,10 @@
import java.util.ArrayList;
public class RainRate extends Grootheid{
public ArrayList<Double> list;
//constructor
public RainRate(Measurement measurement1, ArrayList<Measurement> measurement2){
list = new ArrayList<Double>();
updateRecent(measurement1);
update24Hour(measurement2);
}
@@ -13,14 +14,7 @@ public class RainRate extends Grootheid{
setCurrent(measurement1.getRainRate());
}
public void update24Hour(ArrayList<Measurement> measurement2){
ArrayList<Double> list = new ArrayList<Double>();
for(Measurement ms : measurement2)
{
list.add(ms.getRainRate());
}
createList(measurement2);
calculateMaxMinAvg(list);
}
@@ -29,4 +23,21 @@ public class RainRate extends Grootheid{
GUIboard.writePageToMatrix("Regenval in mm/h", "Gemiddelde: " + getAvg(), "");
}
public void displayGraph()
{
GUIboard.writeGraphToMatrix(list, getMin(), getMax());
}
private void createList(ArrayList<Measurement> measurement2)
{
if(!list.isEmpty())
{
list.clear();
}
for(Measurement ms : measurement2)
{
list.add(ms.getRainRate());
}
}
}
+20 -8
View File
@@ -1,9 +1,11 @@
import java.util.ArrayList;
public class UVLevel extends Grootheid{
public ArrayList<Double> list;
//constructor
public UVLevel(Measurement measurement1, ArrayList<Measurement> measurement2){
list = new ArrayList<Double>();
updateRecent(measurement1);
update24Hour(measurement2);
}
@@ -13,14 +15,7 @@ public class UVLevel extends Grootheid{
setCurrent(measurement1.getUVLevel());
}
public void update24Hour(ArrayList<Measurement> measurement2){
ArrayList<Double> list = new ArrayList<Double>();
for(Measurement ms : measurement2)
{
list.add(ms.getUVLevel());
}
createList(measurement2);
calculateMaxMinAvg(list);
}
@@ -29,4 +24,21 @@ public class UVLevel extends Grootheid{
GUIboard.writePageToMatrix("UV Level", "Gemiddelde: " + getAvg(), "");
}
public void displayGraph()
{
GUIboard.writeGraphToMatrix(list, getMin(), getMax());
}
private void createList(ArrayList<Measurement> measurement2)
{
if(!list.isEmpty())
{
list.clear();
}
for(Measurement ms : measurement2)
{
list.add(ms.getUVLevel());
}
}
}
+93 -81
View File
@@ -6,86 +6,98 @@ import java.util.Timer;
import java.util.TimerTask;
public class Weerstation {
WeerstationConnector weerstation1;
Measurement meting1;
ArrayList<Measurement> meting2;
int currentScreen;
boolean wait;
public Weerstation(){
weerstation1 = new WeerstationConnector();
meting1 = weerstation1.getMostRecentMeasurement();
meting2 = weerstation1.getAllMeasurementsLast24h();
currentScreen = 0;
wait = true;
IO.init();
Timer timer = new Timer();
WeerstationConnector weerstation1;
Measurement meting1;
ArrayList<Measurement> meting2;
int currentScreen;
boolean wait;
boolean graph;
public Weerstation(){
weerstation1 = new WeerstationConnector();
meting1 = weerstation1.getMostRecentMeasurement();
meting2 = weerstation1.getAllMeasurementsLast24h();
currentScreen = 0;
wait = true;
graph = false;
IO.init();
Timer timer = new Timer();
//All the different screen classes
final List<Grootheid> lstScreens = new ArrayList<Grootheid>();
lstScreens.add(new AvgWindspeed(meting1, meting2));
lstScreens.add(new RainRate(meting1, meting2));
lstScreens.add(new OutsideTemp(meting1, meting2));
lstScreens.add(new InsideTemp(meting1, meting2));
lstScreens.add(new OutsideHum(meting1, meting2));
lstScreens.add(new InsideHum(meting1, meting2));
lstScreens.add(new CloudHeight(meting1, meting2));
lstScreens.add(new WindChill(meting1, meting2));
lstScreens.add(new UVLevel(meting1, meting2));
//Screen switcher
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
if(wait == false){
currentScreen++;
}
if(currentScreen == lstScreens.size()){
currentScreen = 0;
}
Grootheid obj = lstScreens.get(currentScreen);
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() {
meting2 = weerstation1.getAllMeasurementsLast24h();
for(Grootheid obj : lstScreens){
obj.update24Hour(meting2);
}
}
}, 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;
}else if(IO.readShort(0x80) == 0){
wait = false;
}
}else if(IO.readShort(0x100) == 0){
wait = true;
}
}
}, 0, 100);
}
//All the different screen classes
final List<Grootheid> lstScreens = new ArrayList<Grootheid>();
lstScreens.add(new AvgWindSpeed(meting1, meting2));
lstScreens.add(new RainRate(meting1, meting2));
lstScreens.add(new OutsideTemp(meting1, meting2));
lstScreens.add(new InsideTemp(meting1, meting2));
lstScreens.add(new OutsideHum(meting1, meting2));
lstScreens.add(new InsideHum(meting1, meting2));
lstScreens.add(new CloudHeight(meting1, meting2));
lstScreens.add(new WindChill(meting1, meting2));
lstScreens.add(new UVLevel(meting1, meting2));
//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)
{
obj.displayGraph();
}
else
{
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() {
meting2 = weerstation1.getAllMeasurementsLast24h();
for(Grootheid obj : lstScreens){
obj.update24Hour(meting2);
}
}
}, 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;
graph = true;
}else if(IO.readShort(0x80) == 0){
wait = false;
graph = false;
}
}else if(IO.readShort(0x100) == 0){
wait = true;
}
}
}, 0, 100);
}
}
+21 -9
View File
@@ -1,9 +1,11 @@
import java.util.ArrayList;
public class WindChill extends Grootheid{
public ArrayList<Double> list;
//constructor
public WindChill(Measurement measurement1, ArrayList<Measurement> measurement2){
list = new ArrayList<Double>();
updateRecent(measurement1);
update24Hour(measurement2);
}
@@ -13,20 +15,30 @@ public class WindChill extends Grootheid{
setCurrent(measurement1.getWindChill());
}
public void update24Hour(ArrayList<Measurement> measurement2){
ArrayList<Double> list = new ArrayList<Double>();
for(Measurement ms : measurement2)
{
list.add(ms.getWindChill());
}
createList(measurement2);
calculateMaxMinAvg(list);
}
public void display(){
super.display();
GUIboard.writePageToMatrix("Gevoelstemperatuur", "Gemiddelde: " + getAvg(), "");
GUIboard.writePageToMatrix("Gevoelstemp", "Gemiddelde: " + getAvg(), "");
}
public void displayGraph()
{
GUIboard.writeGraphToMatrix(list, getMin(), getMax());
}
private void createList(ArrayList<Measurement> measurement2)
{
if(!list.isEmpty())
{
list.clear();
}
for(Measurement ms : measurement2)
{
list.add(ms.getWindChill());
}
}
}