From 593ae3d89aaae1d57a9fad64324307a713a9182c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Anian=20B=C3=BChler?=
 <anian.buehler@reutlingen-university.de>
Date: Wed, 10 Nov 2021 10:53:45 +0100
Subject: [PATCH] added #defines

---
 .../translator/block/numbers/DefineBlock.java | 65 +++++++++++++++++++
 .../com/ardublock/ui/OpenblocksFrame.java     | 10 +--
 .../com/ardublock/block/ardublock.properties  | 12 +++-
 .../com/ardublock/block/ardublock.xml         | 41 ++++++++++--
 .../ardublock/block/ardublock_de.properties   | 16 +++--
 .../block/ardublock_en_GB.properties          | 17 +++--
 .../ardublock/block/block-mapping.properties  |  2 +
 7 files changed, 138 insertions(+), 25 deletions(-)
 create mode 100644 src/main/java/com/ardublock/translator/block/numbers/DefineBlock.java

diff --git a/src/main/java/com/ardublock/translator/block/numbers/DefineBlock.java b/src/main/java/com/ardublock/translator/block/numbers/DefineBlock.java
new file mode 100644
index 0000000..a8bcdaa
--- /dev/null
+++ b/src/main/java/com/ardublock/translator/block/numbers/DefineBlock.java
@@ -0,0 +1,65 @@
+package com.ardublock.translator.block.numbers;
+
+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 tec.letsgoing.ardublock.simulator.simcode.SimCode;
+import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeBool;
+import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeString;
+import tec.letsgoing.ardublock.simulator.simcode.vars.CodeBoolSet;
+
+public class DefineBlock extends TranslatorBlock
+{
+	private static ResourceBundle uiMessageBundle = ResourceBundle.getBundle("com/ardublock/block/ardublock");
+	
+	public DefineBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label) {
+		super(blockId, translator, codePrefix, codeSuffix, label);
+	}
+
+	@Override
+	public String toCode() throws SocketNullException, SubroutineNotDeclaredException
+	{
+		//Label autoText set in edu.mit.blocks.renderable.BlockLabel -> generateLabelText()
+		String suffix = "";
+		String newMarker = "_.new";
+		String regex = "\\s*"+newMarker+"\\b\\s*";
+		
+		TranslatorBlock tb_Name = this.getRequiredTranslatorBlockAtSocket(0);
+		String variableName = tb_Name.toCode();
+		TranslatorBlock tb_Value = this.getRequiredTranslatorBlockAtSocket(1);
+		String value = tb_Value.toCode().replaceAll(regex, "");
+		
+		if (!(tb_Name instanceof ConstantDigitalBlock) && !(tb_Name instanceof ConstantNumberBlock)  && !(tb_Name instanceof ConstantCharBlock) && !(tb_Name instanceof ConstantStringBlock)) {
+		    throw new BlockException(blockId, uiMessageBundle.getString("ardublock.error_msg.define_slot"));
+		}
+		
+		if (variableName.contains(newMarker)){
+			variableName = variableName.replaceAll(regex, ""); //remove the "new" Tag after declaration
+			translator.addNumberVariable(variableName, variableName);
+			translator.addDefinitionCommand("#define " + variableName + " " + value + ";");
+		}else {
+			throw new BlockException(blockId, uiMessageBundle.getString("ardublock.error_msg.number_const_write"));
+		}
+		
+		return "";
+	}
+	
+	//TODO: add Sim
+	/*
+	public SimCode toSim() throws SocketNullException {
+		TranslatorBlock translatorBlock = this.getRequiredTranslatorBlockAtSocket(0);
+		SimTypeString variableName = new SimTypeString(translatorBlock.toString());
+		if (translatorBlock instanceof VariableDigitalBlock) {
+			translator.addBooleanSim(translatorBlock.toString(), translatorBlock.toString());
+		}
+		translatorBlock = this.getRequiredTranslatorBlockAtSocket(1);
+		SimTypeBool value = new SimTypeBool(translatorBlock.toSim());
+		return new CodeBoolSet(variableName,value);
+	}*/
+
+}
diff --git a/src/main/java/com/ardublock/ui/OpenblocksFrame.java b/src/main/java/com/ardublock/ui/OpenblocksFrame.java
index 109aca9..13fc9da 100644
--- a/src/main/java/com/ardublock/ui/OpenblocksFrame.java
+++ b/src/main/java/com/ardublock/ui/OpenblocksFrame.java
@@ -1297,9 +1297,6 @@ public class OpenblocksFrame extends JFrame
 		File   libraryHeaderFile        = null;	
 		File   librarySourceFile        = null;	
 		
-		
-		System.out.println("copy libraries...");
-		
 		//get current .jar path for temp files
 		//TODO: change path to sketchbook-folder
         try {
@@ -1310,13 +1307,12 @@ public class OpenblocksFrame extends JFrame
 			e1.printStackTrace();
 		}
     	
-    	System.out.println("Path: "+arduinoLibraryPath);
-    	
     	File arduinoLibFolder = new File(arduinoLibraryPath);
     	
-    	if(!arduinoLibFolder.exists()) {
+    	/*if(!arduinoLibFolder.exists()) {
     		System.out.println("No libraries-folder - Nothing to do for me...");
-    	}else {
+    	}else {*/
+    	if(arduinoLibFolder.exists()) {
     		libraryPath = arduinoLibraryPath + File.separatorChar + libraryName;
     		File libraryFolder = new File(libraryPath);
     		if(!libraryFolder.exists()) {
diff --git a/src/main/resources/com/ardublock/block/ardublock.properties b/src/main/resources/com/ardublock/block/ardublock.properties
index cc3fb0e..aa8012a 100644
--- a/src/main/resources/com/ardublock/block/ardublock.properties
+++ b/src/main/resources/com/ardublock/block/ardublock.properties
@@ -92,6 +92,8 @@ ardublock.ui.appprefix.sim=Simulator
 #ERROR
 #****************************
 ardublock.error_msg.unset_variable=The variable is undefined. Before the variable can be read, a value must be assigned to it.
+ardublock.error_msg.define_slot=#define must take a constant-x Block.
+ardublock.error_msg.number_const_write=Defines can be set only once. Don\'t reassign values to define-constants!
 ardublock.error_msg.digital_var_slot=Digital variable slot must take a 'digital variable' name.\nHint: Look at the 'variable' socket on the highlighted block
 ardublock.error_msg.number_var_slot=Standard variable slot must take a standard 'analog variable name'.\nHint: Look at the 'variable' socket on the highlighted block
 ardublock.error_msg.number_local_var_slot=Variable slot must take a standard 'local analog variable name'.\nHint: Look at the 'variable' socket on the highlighted block
@@ -99,7 +101,6 @@ ardublock.error_msg.number_slot=This slot must take a standard 'analog variable
 ardublock.error_msg.long_number_var_slot=Large integer variable slot must take a 'Large Integer' variable name.\nHint: Look at the 'variable' socket on the highlighted block
 ardublock.error_msg.double_number_var_slot=variable slot must take a 'Decimal' variable name.\nHint: Look at the 'variable' socket on the highlighted block
 ardublock.error_msg.char_var_slot=Char variable slot must take a char variable name.\nHint: Look at the 'variable' socket on the highlighted block
-ardublock.error_msg.number_const_write=Constants can be written only once. Don\'t use the setter-block twice!
 ardublock.error_msg.array_var_slot='Array variable' slot must take an 'array variable' name.\nHint: Look at the 'variable' socket on the highlighted block
 ardublock.error_msg.array_size_slot='Array size' slot must take a standard integer constant
 ardublock.error_msg.string_var_slot=String variable slot must take a String variable name.\nHint: Look at the 'variable' socket on the highlighted block
@@ -574,9 +575,10 @@ bc.upperByte=upper Byte
 bd.number=Variables/Constants
 
 bg.numberDivider1=|       system time      |
-bg.numberDivider2=|       digital      |
-bg.numberDivider3=|       analog       |
+bg.numberDivider2=|       digital variables      |
+bg.numberDivider3=|       analog variables       |
 bg.numberDivider4=|       character/text       |
+bg.numberDivider5=|       define/constants       |
 
 bg.millis=Milliseconds
 bg.digital-high=HIGH
@@ -594,6 +596,8 @@ bg.setter_variable_number_long=set long analog variable
 bg.setter_variable_number_float=set decimal variable
 bg.setter_variable_char=set character variable
 bg.setter_variable_string=set string variable
+bg.setter_define_digital=#define
+bg.setter_define_number=#define
 bg.variable_digital=digital variable
 bg.constant_digital=digital constant
 bg.variable_number=analog variable
@@ -627,6 +631,8 @@ bg.setter_variable_number_float.description=Set 'Decimal' variable.\n +/- 3.4028
 bg.setter_variable_digital.description=Set digital variable.\nHIGH or LOW
 bg.setter_variable_string.description=set string variable
 bg.setter_variable_char.description=Set a character variable
+bg.setter_define_digital.description=Define digital (bool) constant
+bg.setter_define_number.description=Define analog (byte/int/float) constant
 bg.variable_char.description=Character variable name
 bg.local_variable_char.description=local character variable name
 bg.string.description=Edit message text
diff --git a/src/main/resources/com/ardublock/block/ardublock.xml b/src/main/resources/com/ardublock/block/ardublock.xml
index 441a061..c747108 100644
--- a/src/main/resources/com/ardublock/block/ardublock.xml
+++ b/src/main/resources/com/ardublock/block/ardublock.xml
@@ -1611,7 +1611,8 @@
 		<BlockGenus name="numberDivider1" kind="command" is-starter="yes" is-terminator="yes" initlabel="bg.numberDivider1" color="150 150 150" />
 		<BlockGenus name="numberDivider2" kind="command" is-starter="yes" is-terminator="yes" initlabel="bg.numberDivider2" color="150 150 150" />
 		<BlockGenus name="numberDivider3" kind="command" is-starter="yes" is-terminator="yes" initlabel="bg.numberDivider3" color="150 150 150" />
-		<BlockGenus name="numberDivider4" kind="command" is-starter="yes" is-terminator="yes" initlabel="bg.numberDivider3" color="150 150 150" />
+		<BlockGenus name="numberDivider4" kind="command" is-starter="yes" is-terminator="yes" initlabel="bg.numberDivider4" color="150 150 150" />
+		<BlockGenus name="numberDivider5" kind="command" is-starter="yes" is-terminator="yes" initlabel="bg.numberDivider5" color="150 150 150" />
 		
 		<BlockGenus name="millis" kind="data" color="255 153 204" initlabel="bg.millis">
 			<description>
@@ -1900,6 +1901,32 @@
 	        <BlockConnector connector-type="string-inv" connector-kind="plug" position-type="mirror" />
 	      </BlockConnectors>
 	    </BlockGenus>
+	    <BlockGenus name="setter_define_number" kind="command" color="205 0 0" initlabel="bg.setter_define_number">
+			<description>
+				<text>#define integer constant</text>
+			</description>
+			<BlockConnectors>
+				<BlockConnector connector-type="number" connector-kind="socket" label="bc.variable">
+					<DefaultArg genus-name="constant_number"  label="ANALOGE_KONSTANTE"/>
+				</BlockConnector>
+				<BlockConnector connector-type="number" connector-kind="socket" label="bc.value">
+					<DefaultArg genus-name="number" label="0" />
+				</BlockConnector>
+			</BlockConnectors>
+		</BlockGenus>
+		<BlockGenus name="setter_define_digital" kind="command" color="205 0 0" initlabel="bg.setter_define_digital">
+			<description>
+				<text>#define bool constant</text>
+			</description>
+			<BlockConnectors>
+				<BlockConnector connector-type="boolean" connector-kind="socket" label="bc.variable">
+					<DefaultArg genus-name="constant_digital" label="DIGITALE_KONSTANTE" />
+				</BlockConnector>
+				<BlockConnector connector-type="boolean" connector-kind="socket" label="bc.value">
+					<DefaultArg genus-name="true" label="true" />
+				</BlockConnector>
+			</BlockConnectors>
+		</BlockGenus>
 	    
 	    
 	    <!--TESTESTEST-->
@@ -3190,12 +3217,17 @@
 			<BlockDrawer button-color="255 0 0" name="bd.number" type="custom">
 				<BlockGenusMember>numberDivider1</BlockGenusMember>
 				<BlockGenusMember>millis</BlockGenusMember>
+				
+				<BlockGenusMember>numberDivider5</BlockGenusMember>
+				<BlockGenusMember>setter_define_digital</BlockGenusMember>
+				<BlockGenusMember>constant_digital</BlockGenusMember>
+				<BlockGenusMember>setter_define_number</BlockGenusMember>
+				<BlockGenusMember>constant_number</BlockGenusMember>	
 
 				<BlockGenusMember>numberDivider2</BlockGenusMember>
 				<BlockGenusMember>setter_variable_digital</BlockGenusMember>
 				<BlockGenusMember>variable_digital</BlockGenusMember>
-				<BlockGenusMember>local_variable_digital</BlockGenusMember>
-				<BlockGenusMember>constant_digital</BlockGenusMember>	
+				<BlockGenusMember>local_variable_digital</BlockGenusMember>					
 				<BlockGenusMember>digital-high</BlockGenusMember>
 				<BlockGenusMember>digital-low</BlockGenusMember>
 				<BlockGenusMember>true</BlockGenusMember>
@@ -3207,8 +3239,7 @@
 				<BlockGenusMember>setter_variable_number_long</BlockGenusMember>	
 				<BlockGenusMember>setter_variable_number_float</BlockGenusMember>
 				<BlockGenusMember>variable_number</BlockGenusMember>	
-				<BlockGenusMember>local_variable_number</BlockGenusMember>
-				<BlockGenusMember>constant_number</BlockGenusMember>			
+				<BlockGenusMember>local_variable_number</BlockGenusMember>		
 				<BlockGenusMember>number</BlockGenusMember>
 				
 				<BlockGenusMember>numberDivider4</BlockGenusMember>
diff --git a/src/main/resources/com/ardublock/block/ardublock_de.properties b/src/main/resources/com/ardublock/block/ardublock_de.properties
index 140642b..5094305 100644
--- a/src/main/resources/com/ardublock/block/ardublock_de.properties
+++ b/src/main/resources/com/ardublock/block/ardublock_de.properties
@@ -94,6 +94,8 @@ ardublock.ui.appprefix.sim=Simulator
 #ERROR
 #****************************
 ardublock.error_msg.unset_variable=Die Variable ist unbestimmt. Bevor die Variable lesend verwendet werden kann, muss ihr ein Wert zugewiesen werden.
+ardublock.error_msg.define_slot=#define benötigt einen define-Konstante-Block.
+ardublock.error_msg.number_const_write=Eine Define-Konstante kann nicht mit einem neuen Wert beschrieben werden. Keine neuen Werte für Define-Konstanten setzen!
 ardublock.error_msg.digital_var_slot=Der 'Variable'-Sockel benötigt einen 'digitale_Variable'-Block.\nTIPP: Schaue an dem 'Variable' Sockel an dem hervorgehobenen Block!
 ardublock.error_msg.number_local_var_slot=Der 'Variable'-Sockel benötigt einen 'lokale_analoge_Variable'-Block.\nTIPP: Schaue an dem 'Variable' Sockel an dem hervorgehobenen Block!
 ardublock.error_msg.number_var_slot= Der 'Variable'-Sockel benötigt einen 'analoge_Variable'-Block.\nTIPP: Schaue an dem 'Variable' Sockel an dem hervorgehobenen Block!
@@ -102,7 +104,6 @@ ardublock.error_msg.long_number_var_slot=Der 'Variable'-Sockel ben
 ardublock.error_msg.double_number_var_slot=Der 'Variable'-Sockel benötigt einen 'Name_der_dezimalen_analogen_Variable'-Block.\nTIPP: Schaue an dem 'Variable' Sockel an dem hervorgehobenen Block!
 ardublock.error_msg.char_var_slot=Der 'Variable'-Sockel benötigt einen 'Name_der_Zeichen_Variable'-Block.\nTIPP: Schaue an dem 'Variable' Sockel an dem hervorgehobenen Block!
 ardublock.error_msg.array_var_slot=Der 'Variable'-Sockel benötigt einen 'Name_der_Tabelle'-Block.\nTIPP: Schaue an dem 'Variable' Sockel an dem hervorgehobenen Block!
-ardublock.error_msg.number_const_write=Eine Konstante kann nicht mit einem neuen Wert beschrieben werden. Verwende den \"Setze Variable"-Block nur einmal für jede Konstante!
 ardublock.error_msg.array_size_slot=Der 'Größe' Slot muss einen analogen Wert enthalten
 ardublock.error_msg.string_var_slot=Der 'Variable'-Slot benötigt einen 'Name_der_String_Variable'-Block.\nTIPP: Schaue an dem 'Variable' Sockel an dem hervorgehobenen Block!
 ardublock.error_msg.string_slot= Der 'Wert'-Slot benötigt einen 'String_Variable'-Block oder einen 'Name_der_String_Variable'-Block.\nTIPP: Schaue an dem 'Variable' Sockel an dem hervorgehobenen Block!
@@ -571,9 +572,10 @@ bc.upperByte=oberer Wert
 bd.number=Variablen/Konstanten
 
 bg.numberDivider1=|       Zeit ab Start      |
-bg.numberDivider2=|       Digital      |
-bg.numberDivider3=|       Analog       |
+bg.numberDivider2=|       Digitale Variablen      |
+bg.numberDivider3=|       Analoge Variablen       |
 bg.numberDivider4=|       Zeichen/Text       |
+bg.numberDivider5=|       Konstanten       |
 
 bg.millis=Millis
 bg.digital-high=HIGH
@@ -591,6 +593,8 @@ bg.setter_variable_number_long=Setze lange analoge Variable
 bg.setter_variable_number_float=Setze dezimale Variable
 bg.setter_variable_char=Setze Zeichen Variable
 bg.setter_variable_string=Setze Zeichenkette
+bg.setter_define_digital=Definiere Konstante
+bg.setter_define_number=Definiere Konstante
 bg.variable_digital=digitale_Variable
 bg.constant_digital=digitale_Konstante
 bg.variable_number=analoge_Variable
@@ -612,9 +616,9 @@ bg.digital-low.description=Pin LOW
 bg.char.description=Ein ASCII-Zeichen
 bg.number.description=analoger Ganzzahlwert (int)-Wert (-32,768 bis +32,767)
 bg.variable_number.description=Name der analogen Variable (int)\nDatentyp hängt vom \"Setze-Block\" ab
-bg.constant_number.description=Name der analogen Konstante (int)\nDie Konstante kann nur einmal gesetzt werden\nDatentyp hängt vom \"Setze-Block\" ab
+bg.constant_number.description=Name der analogen Konstante (byte|int|float)\nDie Konstante kann nur einmal definiert werden.
 bg.variable_digital.description=Name der digitalen Variable (bool)
-bg.constant_digital.description=Name der digitalen Konstante (bool)\nDie Konstante kann nur einmal gesetzt werden
+bg.constant_digital.description=Name der digitalen Konstante (bool)\nDie Konstante kann nur einmal definiert werden.
 bg.variable_string.description=Name der Zeichenketten Variable  (char[]-Array)
 bg.local_variable_string.description=Name der lokalen Zeichenketten Variable (char[]-Array)
 bg.setter_variable_number.description=Setze eine analoge Variable (int).\n-32,768 bis +32,767
@@ -624,6 +628,8 @@ bg.setter_variable_number_float.description=Setze eine dezimale Variable (float)
 bg.setter_variable_digital.description=Setze eine digitale Variable (bool).\nHIGH or LOW
 bg.setter_variable_string.description=Setze eine Zeichenkette Variable (char[]-Array)
 bg.setter_variable_char.description=Setze ASCII-Zeichen Variable (char)
+bg.setter_define_digital.description=Deiniere digitale (bool) Konstante.\n(Bezeichnung wird beim Hochladen durch Wert ersetzt)
+bg.setter_define_number.description=Deiniere analoge (byte/int/float) Konstante.\n(Bezeichnung wird beim Hochladen durch Wert ersetzt)
 bg.variable_char.description=ASCII-Zeichen Variable (char)
 bg.local_variable_char.description=lokale Zeichen Variable (char)
 bg.string.description=Zeichenkette (char[]-Array)
diff --git a/src/main/resources/com/ardublock/block/ardublock_en_GB.properties b/src/main/resources/com/ardublock/block/ardublock_en_GB.properties
index c3b40f1..31d657b 100644
--- a/src/main/resources/com/ardublock/block/ardublock_en_GB.properties
+++ b/src/main/resources/com/ardublock/block/ardublock_en_GB.properties
@@ -94,6 +94,8 @@ ardublock.ui.appprefix.sim=Simulator
 #ERROR
 #****************************
 ardublock.error_msg.unset_variable=Die Variable ist unbestimmt. Bevor die Variable lesend verwendet werden kann, muss ihr ein Wert zugewiesen werden.
+ardublock.error_msg.define_slot=#define benötigt einen define-Konstante-Block.
+ardublock.error_msg.number_const_write=Eine Define-Konstante kann nicht mit einem neuen Wert beschrieben werden. Keine neuen Werte für Define-Konstanten setzen!
 ardublock.error_msg.digital_var_slot=Der 'Variable'-Sockel benötigt einen 'digitale_Variable'-Block.\nTIPP: Schaue an dem 'Variable' Sockel an dem hervorgehobenen Block!
 ardublock.error_msg.number_local_var_slot=Der 'Variable'-Sockel benötigt einen 'lokale_analoge_Variable'-Block.\nTIPP: Schaue an dem 'Variable' Sockel an dem hervorgehobenen Block!
 ardublock.error_msg.number_var_slot= Der 'Variable'-Sockel benötigt einen 'analoge_Variable'-Block.\nTIPP: Schaue an dem 'Variable' Sockel an dem hervorgehobenen Block!
@@ -102,7 +104,7 @@ ardublock.error_msg.long_number_var_slot=Der 'Variable'-Sockel ben
 ardublock.error_msg.double_number_var_slot=Der 'Variable'-Sockel benötigt einen 'Name_der_dezimalen_analogen_Variable'-Block.\nTIPP: Schaue an dem 'Variable' Sockel an dem hervorgehobenen Block!
 ardublock.error_msg.char_var_slot=Der 'Variable'-Sockel benötigt einen 'Name_der_Zeichen_Variable'-Block.\nTIPP: Schaue an dem 'Variable' Sockel an dem hervorgehobenen Block!
 ardublock.error_msg.array_var_slot=Der 'Variable'-Sockel benötigt einen 'Name_der_Tabelle'-Block.\nTIPP: Schaue an dem 'Variable' Sockel an dem hervorgehobenen Block!
-ardublock.error_msg.number_const_write=Eine Konstante kann nicht mit einem neuen Wert beschrieben werden. Verwende den \"Setze Variable"-Block nur einmal für jede Konstante!
+ardublock.error_msg.number_const_write=
 ardublock.error_msg.array_size_slot=Der 'Größe' Slot muss einen analogen Wert enthalten
 ardublock.error_msg.string_var_slot=Der 'Variable'-Slot benötigt einen 'Name_der_String_Variable'-Block.\nTIPP: Schaue an dem 'Variable' Sockel an dem hervorgehobenen Block!
 ardublock.error_msg.string_slot= Der 'Wert'-Slot benötigt einen 'String_Variable'-Block oder einen 'Name_der_String_Variable'-Block.\nTIPP: Schaue an dem 'Variable' Sockel an dem hervorgehobenen Block!
@@ -571,9 +573,10 @@ bc.upperByte=oberes byte
 bd.number=Variablen/Konstanten
 
 bg.numberDivider1=|       Zeit ab Start      |
-bg.numberDivider2=|       Digital      |
-bg.numberDivider3=|       Analog       |
+bg.numberDivider2=|       Digitale Variablen      |
+bg.numberDivider3=|       Analoge Variablen       |
 bg.numberDivider4=|       Zeichen/Text       |
+bg.numberDivider5=|       Konstanten       |
 
 bg.millis=millis
 bg.digital-high=HIGH
@@ -591,6 +594,8 @@ bg.setter_variable_number_long=Setze long Variable
 bg.setter_variable_number_float=Setze float Variable
 bg.setter_variable_char=Setze char Variable
 bg.setter_variable_string=Setze char-Array
+bg.setter_define_digital=#define
+bg.setter_define_number=#define
 bg.variable_digital=bool_Variable
 bg.constant_digital=bool_Konstante
 bg.variable_number=int_Variable
@@ -612,9 +617,9 @@ bg.digital-low.description=Pin LOW
 bg.char.description=Ein ASCII-Zeichen
 bg.number.description=analoger Ganzzahlwert (int)-Wert (-32,768 bis +32,767)
 bg.variable_number.description=Name der analogen Variable (int)\nDatentyp hängt vom \"Setze-Block\" ab
-bg.constant_number.description=Name der analogen Konstante (int)\nDie Konstante kann nur einmal gesetzt werden\nDatentyp hängt vom \"Setze-Block\" ab
+bg.constant_number.description=Name der analogen Konstante (byte/int/float)\nDie Konstante kann nur einmal definiert werden.
 bg.variable_digital.description=Name der digitalen Variable (bool)
-bg.constant_digital.description=Name der digitalen Konstante (bool)\nDie Konstante kann nur einmal gesetzt werden
+bg.constant_digital.description=Name der digitalen Konstante (bool)\nDie Konstante kann nur einmal definiert werden.
 bg.variable_string.description=Name der Zeichenketten Variable  (char-Array)
 bg.local_variable_string.description=Name der lokalen Zeichenketten Variable (char-Array)
 bg.setter_variable_number.description=Setze eine analoge Variable (int).\n-32,768 bis +32,767
@@ -624,6 +629,8 @@ bg.setter_variable_number_float.description=Setze eine dezimale Variable (float)
 bg.setter_variable_digital.description=Setze eine digitale Variable (bool).\nHIGH or LOW
 bg.setter_variable_string.description=Setze eine Zeichenkette Variable (char-Array)
 bg.setter_variable_char.description=Setze ASCII-Zeichen Variable (char)
+bg.setter_define_digital.description=Deiniere bool Konstante.\n(Bezeichnung wird beim Hochladen durch Wert ersetzt)
+bg.setter_define_number.description=Deiniere byte/int/float Konstante.\n(Bezeichnung wird beim Hochladen durch Wert ersetzt)
 bg.variable_char.description=ASCII-Zeichen Variable (char)
 bg.local_variable_char.description=lokale Zeichen Variable (char)
 bg.string.description=Zeichenkette (char-Array)
diff --git a/src/main/resources/com/ardublock/block/block-mapping.properties b/src/main/resources/com/ardublock/block/block-mapping.properties
index bdd771c..7d33c3e 100644
--- a/src/main/resources/com/ardublock/block/block-mapping.properties
+++ b/src/main/resources/com/ardublock/block/block-mapping.properties
@@ -199,6 +199,8 @@ setter_variable_number_byte=com.ardublock.translator.block.numbers.SetterVariabl
 setter_variable_number_unsigned_long=com.ardublock.translator.block.numbers.SetterVariableNumberUnsignedLongBlock
 setter_variable_number_long=com.ardublock.translator.block.numbers.SetterVariableNumberLongBlock
 setter_variable_number_float=com.ardublock.translator.block.numbers.SetterVariableNumberFloatBlock
+setter_define_digital=com.ardublock.translator.block.numbers.DefineBlock
+setter_define_number=com.ardublock.translator.block.numbers.DefineBlock
 variable_number=com.ardublock.translator.block.numbers.VariableNumberBlock
 constant_number=com.ardublock.translator.block.numbers.ConstantNumberBlock
 setter_variable_digital=com.ardublock.translator.block.numbers.SetterVariableDigitalBlock
-- 
GitLab