Weerstation.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. import java.util.ArrayList;
  2. import java.util.Calendar;
  3. import java.util.Iterator;
  4. import java.util.List;
  5. import java.util.Timer;
  6. import java.util.TimerTask;
  7. public class Weerstation {
  8. WeerstationConnector weerstation1;
  9. Calendar now, calPeriod;
  10. Measurement meting1;
  11. ArrayList<Measurement> meting2;
  12. Timer starter;
  13. Timer animator;
  14. int currentScreen;
  15. boolean wait;
  16. boolean graph;
  17. boolean currentGraph;
  18. boolean startup;
  19. boolean startupState;
  20. boolean load;
  21. public Weerstation(){
  22. now = Calendar.getInstance();
  23. calPeriod = Calendar.getInstance();
  24. final ArrayList<Periode> periods = new ArrayList<Periode>();
  25. GUIboard.init();
  26. startupState = true;
  27. starter = new Timer();
  28. startStartupAnimatie();
  29. calPeriod.add(Calendar.DATE, -1);
  30. periods.add(new Periode(now, calPeriod, "Dag"));
  31. calPeriod = Calendar.getInstance();
  32. calPeriod.add(Calendar.DATE, -7);
  33. periods.add(new Periode(now, calPeriod, "Week"));
  34. calPeriod = Calendar.getInstance();
  35. calPeriod.add(Calendar.MONTH, -1);
  36. periods.add(new Periode(now, calPeriod, "Maand"));
  37. calPeriod = Calendar.getInstance();
  38. calPeriod.add(Calendar.MONTH, -3);
  39. periods.add(new Periode(now, calPeriod, "Maand 3"));
  40. calPeriod = Calendar.getInstance();
  41. calPeriod.add(Calendar.MONTH, -6);
  42. periods.add(new Periode(now, calPeriod, "Maand 6"));
  43. calPeriod = Calendar.getInstance();
  44. calPeriod.add(Calendar.YEAR, -1);
  45. periods.add(new Periode(now, calPeriod, "Jaar"));
  46. calPeriod = Calendar.getInstance();
  47. calPeriod.add(Calendar.YEAR, -2);
  48. periods.add(new Periode(now, calPeriod, "Jaar 2"));
  49. calPeriod = Calendar.getInstance();
  50. System.out.println("Day: " + periods.get(0));
  51. System.out.println("Week: " + periods.get(1));
  52. System.out.println("Month: " + periods.get(2));
  53. System.out.println("3 Months: " + periods.get(3));
  54. System.out.println("6 Months: " + periods.get(4));
  55. System.out.println("Year: " + periods.get(5));
  56. System.out.println("2 Years: " + periods.get(6));
  57. //Kies hier welke periode je wil laden, hij veranderd in een keer alles:
  58. final int periodeNr = 5;
  59. weerstation1 = new WeerstationConnector();
  60. meting1 = weerstation1.getMostRecentMeasurement();
  61. meting2 = weerstation1.getAllMeasurementsBetween(periods.get(periodeNr).getBeginPeriode(), periods.get(periodeNr).getEindePeriode());
  62. currentGraph = false;
  63. startupState = false;
  64. currentScreen = 0;
  65. wait = true;
  66. graph = false;
  67. Timer timer = new Timer();
  68. checkData();
  69. //All the different screen classes
  70. final List<Grootheid> lstScreens = new ArrayList<Grootheid>();
  71. lstScreens.add(new OutsideTemp(meting1, meting2)); //Buitentemperatuur
  72. lstScreens.add(new OutsideHum(meting1, meting2)); //Luchtv. Buiten
  73. lstScreens.add(new InsideTemp(meting1, meting2)); //Binnentemperatuur
  74. lstScreens.add(new InsideHum(meting1, meting2)); //Luchtv. Binnen
  75. lstScreens.add(new AvgWindSpeed(meting1, meting2)); //Gem. Windsnelheid
  76. lstScreens.add(new WindDirection(meting1, meting2)); //Windrichting
  77. lstScreens.add(new WindChill(meting1, meting2)); //Gevoelstemperatuur
  78. lstScreens.add(new Barometer(meting1, meting2)); //Luchtdruk
  79. lstScreens.add(new Voorspellingen(meting1)); //Weervoorspelling
  80. lstScreens.add(new RainRate(meting1, meting2)); //Regenval
  81. lstScreens.add(new CloudHeight(meting1, meting2)); //Wolkhoogte
  82. lstScreens.add(new UVLevel(meting1, meting2)); //UV Level
  83. lstScreens.add(new HeatIndex(meting1, meting2)); //Dauwpunt
  84. lstScreens.add(new Zonsterkte(meting1, meting2)); //Zonkracht
  85. lstScreens.add(new DewPoint(meting1, meting2)); //Dauwpunt
  86. lstScreens.add(new Sun(meting1)); //Sunrise en Sunset
  87. lstScreens.add(new LangsteHittegolfPeriode(meting1, meting2));
  88. lstScreens.add(new LangsteZomerPeriode(meting1, meting2)); //Langste Zomerse Periode
  89. // lstScreens.add(new LangsteTempStijgingPeriode(meting1, meting2)); //Langste temperatuurstijging
  90. lstScreens.add(new LangsteRegenPeriode(meting1, meting2)); //Langste Regen Periode
  91. lstScreens.add(new MaximaleRegenPeriode(meting1, meting2)); //Totale regenval in een periode
  92. lstScreens.add(new GraadDagen(meting1, meting2)); //Aantal graaddagen in een periode
  93. stopStartupAnimatie();
  94. while(startup)
  95. {
  96. try
  97. {
  98. Thread.sleep(1);
  99. }
  100. catch(InterruptedException e)
  101. {
  102. e.printStackTrace();
  103. }
  104. }
  105. GUIboard.clearTop();
  106. GUIboard.clearLeft();
  107. GUIboard.clearRight();
  108. //Screen switcher
  109. timer.scheduleAtFixedRate(new TimerTask() {
  110. public void run() {
  111. if(!wait){
  112. currentScreen++;
  113. }
  114. if(currentScreen == lstScreens.size()){
  115. currentScreen = 0;
  116. }
  117. Grootheid obj = lstScreens.get(currentScreen);
  118. if(graph && (graph != currentGraph))
  119. {
  120. obj.displayGraph();
  121. currentGraph = true;
  122. }
  123. else if(!graph)
  124. {
  125. obj.display();
  126. }
  127. }
  128. }, 0, 5*1000);
  129. //Update recent measurement every 60 seconds
  130. timer.scheduleAtFixedRate(new TimerTask() {
  131. public void run() {
  132. meting1 = weerstation1.getMostRecentMeasurement();
  133. for(Grootheid obj : lstScreens){
  134. obj.updateRecent(meting1);
  135. }
  136. }
  137. }, 60*1000, 60*1000);
  138. //Update 24hours every 60 seconds
  139. timer.scheduleAtFixedRate(new TimerTask() {
  140. public void run() {
  141. animator = new Timer();
  142. startLoadAnimatie();
  143. meting2 = weerstation1.getAllMeasurementsBetween(periods.get(periodeNr).getBeginPeriode(), periods.get(periodeNr).getEindePeriode());
  144. for(Grootheid obj : lstScreens){
  145. obj.updatePeriod(meting2);
  146. }
  147. stopLoadAnimatie();
  148. while(load)
  149. {
  150. try
  151. {
  152. Thread.sleep(1);
  153. }
  154. catch(InterruptedException e)
  155. {
  156. e.printStackTrace();
  157. }
  158. }
  159. }
  160. },10*60*1000, 10*60*1000);
  161. //Button checker
  162. timer.scheduleAtFixedRate(new TimerTask() {
  163. public void run() {
  164. if(IO.readShort(0x100) == 1){
  165. if(IO.readShort(0x80) == 1){
  166. wait = true;
  167. if(!graph)
  168. {
  169. Grootheid obj = lstScreens.get(currentScreen);
  170. obj.displayGraph();
  171. }
  172. graph = true;
  173. }else if(IO.readShort(0x80) == 0){
  174. wait = false;
  175. if(graph)
  176. {
  177. Grootheid obj = lstScreens.get(currentScreen);
  178. obj.display();
  179. }
  180. graph = false;
  181. }
  182. }else if(IO.readShort(0x100) == 0){
  183. if(IO.readShort(0x80) == 1){
  184. if(!graph)
  185. {
  186. Grootheid obj = lstScreens.get(currentScreen);
  187. obj.displayGraph();
  188. }
  189. graph = true;
  190. }else if(IO.readShort(0x80) == 0){
  191. if(graph)
  192. {
  193. Grootheid obj = lstScreens.get(currentScreen);
  194. obj.display();
  195. }
  196. graph = false;
  197. }
  198. wait = true;
  199. }
  200. }
  201. }, 0, 100);
  202. }
  203. public void startStartupAnimatie()
  204. {
  205. starter.scheduleAtFixedRate(new TimerTask() {
  206. public void run() {
  207. startup = true;
  208. GUIboard.clearBottom();
  209. GUIboard.clearTop();
  210. GUIboard.clearLeft();
  211. GUIboard.clearRight();
  212. char[] charray;
  213. if(startupState)
  214. {
  215. charray = " Weerstation Breda\n Connecting".toCharArray();
  216. }
  217. else
  218. {
  219. charray = " Weerstation Breda\n Calculating".toCharArray();
  220. }
  221. for(char ch : charray)
  222. {
  223. IO.writeShort(0x40, ch);
  224. }
  225. int p = 1;
  226. for(int i=0; i<256;i++)
  227. {
  228. if(i<128)
  229. {
  230. IO.writeShort(0x42, 1 << 12 | i << 5 | 26);
  231. }
  232. else
  233. {
  234. IO.writeShort(0x42, 0 << 12 | i-128 << 5 | 26);
  235. }
  236. if(i%42==0)
  237. {
  238. p = p << 1;
  239. if(p>32)
  240. {
  241. p=1;
  242. }
  243. for(int q=0x10; q<0x40; q+=0x02)
  244. {
  245. IO.writeShort(q, 0x100 | p);
  246. }
  247. }
  248. IO.delay(4);
  249. }
  250. startup = false;
  251. }
  252. }, 0, (128 + 1)*8);
  253. }
  254. public void stopStartupAnimatie()
  255. {
  256. starter.cancel();
  257. }
  258. public void startLoadAnimatie()
  259. {
  260. animator.scheduleAtFixedRate(new TimerTask() {
  261. public void run() {
  262. load = true;
  263. for(int i=0; i<128;i++)
  264. {
  265. IO.writeShort(0x42, 0 << 12 | i << 5 | 31);
  266. IO.delay(4);
  267. }
  268. for(int i=0; i<128;i++)
  269. {
  270. IO.writeShort(0x42, 1 << 12 | i << 5 | 31);
  271. IO.delay(4);
  272. }
  273. load = false;
  274. }
  275. }, 0, (128 + 1)*8);
  276. }
  277. public void stopLoadAnimatie()
  278. {
  279. animator.cancel();
  280. }
  281. public void checkData(){
  282. Iterator<Measurement> it = meting2.iterator();
  283. while( it.hasNext() )
  284. {
  285. Measurement m = it.next();
  286. if(m.getRawOutsideTemp() >= Short.MAX_VALUE)
  287. {
  288. it.remove();
  289. }
  290. }
  291. }
  292. }