From 7ddda721aa19f69082f4d855f24efa4020a7cda2 Mon Sep 17 00:00:00 2001 From: Kenneth van Ewijk Date: Thu, 9 Oct 2014 10:13:04 +0200 Subject: [PATCH] Added checks to writeTo*Digits() --- GUIboard.java | 168 +++++++++++++++++++++++++++++++------------------- 1 file changed, 105 insertions(+), 63 deletions(-) diff --git a/GUIboard.java b/GUIboard.java index 4de8fbf..11d4ad3 100644 --- a/GUIboard.java +++ b/GUIboard.java @@ -3,68 +3,110 @@ import java.util.ArrayList; public class GUIboard { - + - public static void writeUpperDigits(double number){ - clearTop(); - writeDigits(number, 0x10, 0x18); - } - - public static void writeLeftDigits(double number){ - clearLeft(); - writeDigits(number, 0x20, 0x24); - } - - public static void writeRightDigits(double number){ - clearRight(); - writeDigits(number, 0x30, 0x34); - } - - private static void writeDigits(double number, int firstSegment, int lastSegment){ - number = Math.round(number * 100.0) / 100.0; - //Segments - int segA = 0x01; - int segB = 0x02; - int segC = 0x04; - int segD = 0x08; - int segE = 0x10; - int segF = 0x20; - int segG = 0x40; - int segDP = 0x80; - - //Digits - int[] digits = { - segA | segB | segC | segD | segE | segF, //0 - segB | segC, //1 - segA | segB | segG | segE | segD, //2 - segA | segB | segC | segG | segD, //3 - segB | segC | segF | segG | segC, //4 - segA | segF | segG | segC | segD, //5 - segA | segF | segG | segC | segD | segE, //6 - segA | segB | segC, //7 - segDP - 1, //8 - segA | segF | segG | segC | segD | segB, //9 - }; - - int digit = firstSegment; - String numberString = String.valueOf(number);; - char numberSplit[] = numberString.toCharArray(); - - for(int i = numberSplit.length-1; i >= 0; i--){ - if(numberSplit[i] == '.'){ - IO.writeShort(digit, digits[(Character.getNumericValue(numberSplit[i - 1]))]|0x180); //display a . with the next number - i--; - }else if(numberSplit[i] == '-'){ - IO.writeShort(digit, 0x140); //will display a - - }else{ - IO.writeShort(digit, Character.getNumericValue(numberSplit[i])); - } - digit += 2; //Next digits screen - if(digit > lastSegment){ //If there are more then max digits needed, it will stop. - break; - } - } - } + public static void writeUpperDigits(double number){ + clearTop(); + + int checkNumber = String.valueOf(Math.round(number)).length(); + + if(checkNumber <= 5){ + checkNumber = 5 - checkNumber > 0 ? 5 - checkNumber : 0; + number = number * Math.pow(10, checkNumber); + number = Math.round(number); + number = number / Math.pow(10, checkNumber); + } + else + { + number = 0; + } + + writeDigits(number, 0x10, 0x18); + } + + public static void writeLeftDigits(double number){ + clearLeft(); + + int checkNumber = String.valueOf(Math.round(number)).length(); + + if(checkNumber <= 3){ + checkNumber = 3 - checkNumber > 0 ? 3 - checkNumber : 0; + number = number * Math.pow(10, checkNumber); + number = Math.round(number); + number = number / Math.pow(10, checkNumber); + } + else + { + number = 0; + } + + writeDigits(number, 0x20, 0x24); + } + + public static void writeRightDigits(double number){ + clearRight(); + + int checkNumber = String.valueOf(Math.round(number)).length(); + + if(checkNumber <= 3){ + checkNumber = 3 - checkNumber > 0 ? 3 - checkNumber : 0; + number = number * Math.pow(10, checkNumber); + number = Math.round(number); + number = number / Math.pow(10, checkNumber); + } + else + { + number = 0; + } + + writeDigits(number, 0x30, 0x34); + } + + private static void writeDigits(double number, int firstSegment, int lastSegment){ + number = Math.round(number * 100.0) / 100.0; + //Segments + int segA = 0x01; + int segB = 0x02; + int segC = 0x04; + int segD = 0x08; + int segE = 0x10; + int segF = 0x20; + int segG = 0x40; + int segDP = 0x80; + + //Digits + int[] digits = { + segA | segB | segC | segD | segE | segF, //0 + segB | segC, //1 + segA | segB | segG | segE | segD, //2 + segA | segB | segC | segG | segD, //3 + segB | segC | segF | segG | segC, //4 + segA | segF | segG | segC | segD, //5 + segA | segF | segG | segC | segD | segE, //6 + segA | segB | segC, //7 + segDP - 1, //8 + segA | segF | segG | segC | segD | segB, //9 + }; + + int digit = firstSegment; + String numberString = String.valueOf(number);; + char numberSplit[] = numberString.toCharArray(); + + for(int i = numberSplit.length-1; i >= 0; i--){ + if(numberSplit[i] == '.'){ + IO.writeShort(digit, digits[(Character.getNumericValue(numberSplit[i - 1]))]|0x180); //display a . with the next number + i--; + }else if(numberSplit[i] == '-'){ + IO.writeShort(digit, 0x140); //will display a - + }else{ + IO.writeShort(digit, Character.getNumericValue(numberSplit[i])); + } + digit += 2; //Next digits screen + if(digit > lastSegment){ //If there are more then max digits needed, it will stop. + break; + } + } + } public static boolean writePageToMatrix(String regel1, String regel2, String regel3) @@ -75,10 +117,10 @@ public class GUIboard { return false; } - String nav = "< > S"; //creates the navigation and will center it out to the right + String nav = "< > S"; //creates the navigation and will center it out to the right for(int i=0; i < (12-regel3.length()); i++){ - nav = " " + nav; + nav = " " + nav; } char[] regel1CharArray = regel1.toCharArray(); char[] regel2CharArray = regel2.toCharArray();