From 8273f27eed0a1fb3940c17975c2f0af8d343510b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anian=20B=C3=BChler?= <anian.buehler@reutlingen-university.de> Date: Fri, 15 Sep 2023 13:42:40 +0200 Subject: [PATCH] minor changes on servo blocks --- .../block/output/ServoDefaultAttachBlock.java | 18 ++++++++++++++--- .../block/output/ServoDefaultBlock.java | 20 ++++++++++++++++--- .../block/output/ServoDefaultDetachBlock.java | 18 ++++++++++++++--- 3 files changed, 47 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/ardublock/translator/block/output/ServoDefaultAttachBlock.java b/src/main/java/com/ardublock/translator/block/output/ServoDefaultAttachBlock.java index 50cbeed..b8ca45b 100644 --- a/src/main/java/com/ardublock/translator/block/output/ServoDefaultAttachBlock.java +++ b/src/main/java/com/ardublock/translator/block/output/ServoDefaultAttachBlock.java @@ -6,7 +6,10 @@ import com.ardublock.translator.block.TranslatorBlock; import com.ardublock.translator.block.exception.BlockException; import com.ardublock.translator.block.exception.SocketNullException; import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; +import com.ardublock.translator.block.numbers.ConstantNumberBlock; +import com.ardublock.translator.block.numbers.LocalVariableNumberBlock; import com.ardublock.translator.block.numbers.NumberBlock; +import com.ardublock.translator.block.numbers.VariableNumberBlock; public class ServoDefaultAttachBlock extends TranslatorBlock { @@ -22,13 +25,22 @@ public class ServoDefaultAttachBlock extends TranslatorBlock { String servoSpecs = ""; - if (!( tb instanceof NumberBlock ) ) + if (!( tb instanceof NumberBlock ) && !(tb instanceof VariableNumberBlock) && !(tb instanceof LocalVariableNumberBlock) && !(tb instanceof ConstantNumberBlock) ) { - throw new BlockException(this.blockId, "the Pin# of Servo must be a number"); + throw new BlockException(this.blockId, "the Pin# of Servo must contain a number"); } String pinNumber = tb.toCode().replaceAll("\\s*_.new\\b\\s*", ""); - String servoName = "servo_pin_" + pinNumber; + + int servoCounter = 1; + while(translator.containsServo("servo"+servoCounter)) { + servoCounter++; + } + + String servoName = "servo"+servoCounter; + translator.addServo("servo_"+pinNumber, servoName); + + //String servoName = "servo_pin_" + pinNumber; // tb = this.getRequiredTranslatorBlockAtSocket(1); diff --git a/src/main/java/com/ardublock/translator/block/output/ServoDefaultBlock.java b/src/main/java/com/ardublock/translator/block/output/ServoDefaultBlock.java index 09c8913..6256cf3 100644 --- a/src/main/java/com/ardublock/translator/block/output/ServoDefaultBlock.java +++ b/src/main/java/com/ardublock/translator/block/output/ServoDefaultBlock.java @@ -7,6 +7,10 @@ import com.ardublock.translator.block.TranslatorBlock; import com.ardublock.translator.block.exception.BlockException; import com.ardublock.translator.block.exception.SocketNullException; import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; +import com.ardublock.translator.block.numbers.ConstantNumberBlock; +import com.ardublock.translator.block.numbers.LocalVariableNumberBlock; +import com.ardublock.translator.block.numbers.NumberBlock; +import com.ardublock.translator.block.numbers.VariableNumberBlock; public class ServoDefaultBlock extends TranslatorBlock { @@ -21,19 +25,29 @@ public class ServoDefaultBlock extends TranslatorBlock { public String toCode() throws SocketNullException, SubroutineNotDeclaredException { TranslatorBlock tb = this.getRequiredTranslatorBlockAtSocket(0); + + if (!( tb instanceof NumberBlock ) && !(tb instanceof VariableNumberBlock) && !(tb instanceof LocalVariableNumberBlock) && !(tb instanceof ConstantNumberBlock) ) + { + throw new BlockException(this.blockId, "the Pin# of Servo must contain a number"); + } String servoSpecs = ""; String pinNumber = tb.toCode().replaceAll("\\s*_.new\\b\\s*", ""); //****** Bit long w but easy to see what's happening. Any other invalid pins? ********* - if ( ! ("2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32/" + /*if ( ! ("2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32/" + " 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53").contains(pinNumber.trim()) ) { throw new BlockException(blockId, uiMessageBundle.getString("ardublock.error_msg.Digital_pin_slot")); - } + }*/ - String servoName = "servo_pin_" + pinNumber; + + String servoName = translator.getServo("servo_"+pinNumber); + if(servoName == null) { + throw new BlockException(blockId, uiMessageBundle.getString("ardublock.error_msg.servo.none")); + } + //String servoName = "servo_pin_" + pinNumber; tb = this.getRequiredTranslatorBlockAtSocket(1); diff --git a/src/main/java/com/ardublock/translator/block/output/ServoDefaultDetachBlock.java b/src/main/java/com/ardublock/translator/block/output/ServoDefaultDetachBlock.java index c4842d0..fb29093 100644 --- a/src/main/java/com/ardublock/translator/block/output/ServoDefaultDetachBlock.java +++ b/src/main/java/com/ardublock/translator/block/output/ServoDefaultDetachBlock.java @@ -1,14 +1,21 @@ package com.ardublock.translator.block.output; +import java.util.ResourceBundle; + import com.ardublock.translator.Translator; import com.ardublock.translator.block.TranslatorBlock; import com.ardublock.translator.block.exception.BlockException; import com.ardublock.translator.block.exception.SocketNullException; import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; +import com.ardublock.translator.block.numbers.ConstantNumberBlock; +import com.ardublock.translator.block.numbers.LocalVariableNumberBlock; import com.ardublock.translator.block.numbers.NumberBlock; +import com.ardublock.translator.block.numbers.VariableNumberBlock; public class ServoDefaultDetachBlock extends TranslatorBlock { + + private static ResourceBundle uiMessageBundle = ResourceBundle.getBundle("com/ardublock/block/ardublock"); public ServoDefaultDetachBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label) { @@ -22,13 +29,18 @@ public class ServoDefaultDetachBlock extends TranslatorBlock { //String servoSpecs = ""; - if (!( tb instanceof NumberBlock ) ) + if (!( tb instanceof NumberBlock ) && !(tb instanceof VariableNumberBlock) && !(tb instanceof LocalVariableNumberBlock) && !(tb instanceof ConstantNumberBlock) ) { - throw new BlockException(this.blockId, "the Pin# of Servo must be a number"); + throw new BlockException(this.blockId, "the Pin# of Servo must contain a number"); } String pinNumber = tb.toCode().replaceAll("\\s*_.new\\b\\s*", ""); - String servoName = "servo_pin_" + pinNumber; + + String servoName = translator.getServo("servo_"+pinNumber); + if(servoName == null) { + throw new BlockException(blockId, uiMessageBundle.getString("ardublock.error_msg.servo.none")); + } + //String servoName = "servo_pin_" + pinNumber; // tb = this.getRequiredTranslatorBlockAtSocket(1); -- GitLab