From 4947d3e85d727f353258a173bec8ab6e726e5cec 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 12:05:20 +0100
Subject: [PATCH] added readSerialMonitor

---
 .../communication/ReadSerialMonitorBlock.java | 56 +++++++++++++++++++
 .../com/ardublock/block/ardublock.properties  |  6 +-
 .../com/ardublock/block/ardublock.xml         | 18 +++++-
 .../ardublock/block/ardublock_de.properties   |  8 ++-
 .../block/ardublock_en_GB.properties          |  7 ++-
 .../ardublock/block/block-mapping.properties  |  5 ++
 6 files changed, 95 insertions(+), 5 deletions(-)
 create mode 100644 src/main/java/com/ardublock/translator/block/communication/ReadSerialMonitorBlock.java

diff --git a/src/main/java/com/ardublock/translator/block/communication/ReadSerialMonitorBlock.java b/src/main/java/com/ardublock/translator/block/communication/ReadSerialMonitorBlock.java
new file mode 100644
index 0000000..bd1428d
--- /dev/null
+++ b/src/main/java/com/ardublock/translator/block/communication/ReadSerialMonitorBlock.java
@@ -0,0 +1,56 @@
+package com.ardublock.translator.block.communication;
+
+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.ConstantStringBlock;
+import com.ardublock.translator.block.numbers.LocalVariableStringBlock;
+import com.ardublock.translator.block.numbers.StringBlock;
+import com.ardublock.translator.block.numbers.VariableStringBlock;
+
+import tec.letsgoing.ardublock.simulator.simcode.SimCode;
+import tec.letsgoing.ardublock.simulator.simcode.comm.CodeSerialPrint;
+import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeBool;
+import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeString;
+
+public class ReadSerialMonitorBlock extends TranslatorBlock
+{
+	private static ResourceBundle uiMessageBundle = ResourceBundle.getBundle("com/ardublock/block/ardublock");
+	
+	public ReadSerialMonitorBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label)
+	{
+		super(blockId, translator, codePrefix, codeSuffix, label);
+	}
+
+	@Override
+	public String toCode() throws SocketNullException, SubroutineNotDeclaredException
+	{	
+		String readArray = null;
+		
+		translator.addHeaderFile("didacticNet.h");
+		translator.addDefinitionCommand("SerialReader sReader;");
+		
+		
+		if(!translator.containsSetupCommand("Serial.begin")){
+			translator.addSetupCommand("Serial.begin(2400);");
+		}
+		
+		if(!translator.containsSetupCommand("sReader.begin")){
+			translator.addSetupCommand("sReader.begin(Serial);");
+		}
+		
+		TranslatorBlock tB0 = this.getRequiredTranslatorBlockAtSocket(0);
+		
+		if((tB0 instanceof VariableStringBlock) || (tB0 instanceof LocalVariableStringBlock)){
+			readArray = tB0.toCode().replaceAll("\\s*_.new\\b\\s*", "");
+		} else {
+			throw new BlockException(blockId, uiMessageBundle.getString("ardublock.error_msg.number_var_slot"));
+		}
+		
+		return "sReader.readSerialData("+readArray+", DN_ASCII_CR)";
+	}
+}
diff --git a/src/main/resources/com/ardublock/block/ardublock.properties b/src/main/resources/com/ardublock/block/ardublock.properties
index 1e631fe..bf904e9 100644
--- a/src/main/resources/com/ardublock/block/ardublock.properties
+++ b/src/main/resources/com/ardublock/block/ardublock.properties
@@ -696,6 +696,7 @@ bd.communication=Communication
 bg.communicationDivider1=|       serial      |
 bg.communicationDivider2=|       software serial      |
 bg.communicationDivider3=|       serial connectors      |
+bg.communicationDivider4=|       helper      |
 
 bg.glue_poly=connect
 bg.glue_msg=connect
@@ -717,6 +718,8 @@ bg.glue_digital=glue
 bg.glue_number=glue
 bg.glue_char=glue
 bg.glue_string=glue
+bg.read_serial_monitor=readSerialData
+
 bg.tele_set_frame=set Frame
 bg.tele_read_frame=read serial data Frame
 bg.tele_read_data_frame=read from Frame
@@ -743,6 +746,7 @@ bg.glue_digital.description=Glue boolean to string
 bg.glue_number.description=Glue number to string
 bg.glue_char.description=Glue char to string
 bg.glue_string.description=Glue string to string
+bg.read_serial_monitor.description=read data from SerialMonitor till "CR"
 
 bg.tele_set_frame.description=write data to telegram-frame
 bg.tele_read_frame.description=read serial data in telegram-frame-format
@@ -757,6 +761,7 @@ bc.ln=new line
 bc.rx_pin_number=Rx Pin
 bc.tx_pin_number=Tx Pin
 bc.baudrate=baud
+bc.read_array=array
 
 bc.sendAddress=sender address
 bc.recAddress=receiver address
@@ -777,7 +782,6 @@ bg.didacticnetworkDivider1=|       PubSub Network      |
 bg.didacticnetworkDivider2=|       PubSub publish      |
 bg.didacticnetworkDivider3=|       PubSub subscribe      |
 bg.didacticnetworkDivider4=|       PubSub callback      |
-bg.didacticnetworkDivider5=|       helper      |
 
 bg.psn_broker=psnName Broker
 bg.psn_client=psnName Client
diff --git a/src/main/resources/com/ardublock/block/ardublock.xml b/src/main/resources/com/ardublock/block/ardublock.xml
index 990b174..655c86f 100644
--- a/src/main/resources/com/ardublock/block/ardublock.xml
+++ b/src/main/resources/com/ardublock/block/ardublock.xml
@@ -2110,7 +2110,7 @@
 		<BlockGenus name="communicationDivider1" kind="command" is-starter="yes" is-terminator="yes" initlabel="bg.communicationDivider1" color="150 150 150" />
 		<BlockGenus name="communicationDivider2" kind="command" is-starter="yes" is-terminator="yes" initlabel="bg.communicationDivider2" color="150 150 150" />
 		<BlockGenus name="communicationDivider3" kind="command" is-starter="yes" is-terminator="yes" initlabel="bg.communicationDivider3" color="150 150 150" />
-
+		<BlockGenus name="communicationDivider4" kind="command" is-starter="yes" is-terminator="yes" initlabel="bg.communicationDivider4" color="150 150 150" />
 		<BlockGenus name="serial_read" kind="data" color="165 42 42" initlabel="bg.serial_read">
 			<BlockConnectors>
 				<BlockConnector connector-type="string-list" connector-kind="plug" position-type="mirror" />
@@ -2265,6 +2265,19 @@
 				<BlockConnector label="" connector-kind="socket" connector-type="string" position-type="bottom" />
 			</BlockConnectors>
 		</BlockGenus>
+		<BlockGenus name="read_serial_monitor" kind="data" color="165 42 42" initlabel="bg.read_serial_monitor">
+	      <description>
+	        <text>read_serial_monitor</text>
+	      </description>
+	      <BlockConnectors>
+	        <BlockConnector connector-type="number" connector-kind="plug" />
+	        <BlockConnector connector-type="string" connector-kind="socket" label="bc.read_array">
+	        	<DefaultArg genus-name="variable_string" label="geleseneDaten" />
+	        </BlockConnector>
+	      </BlockConnectors>
+	    </BlockGenus>
+		
+		
 		<BlockGenus name="tele_set_frame" kind="command" color="165 42 42" initlabel="bg.tele_set_frame">
 			<description>
 				<text>write Data to telegram frame</text>
@@ -2380,7 +2393,6 @@
 		<BlockGenus name="didacticnetworkDivider2" kind="command" is-starter="yes" is-terminator="yes" initlabel="bg.didacticnetworkDivider2" color="150 150 150" />
 		<BlockGenus name="didacticnetworkDivider3" kind="command" is-starter="yes" is-terminator="yes" initlabel="bg.didacticnetworkDivider3" color="150 150 150" />
 		<BlockGenus name="didacticnetworkDivider4" kind="command" is-starter="yes" is-terminator="yes" initlabel="bg.didacticnetworkDivider4" color="150 150 150" />
-		<BlockGenus name="didacticnetworkDivider5" kind="command" is-starter="yes" is-terminator="yes" initlabel="bg.didacticnetworkDivider4" color="150 150 150" />
 		
 		<BlockGenus name="psn_broker" kind="command" color="130 27 27"	initlabel="bg.psn_broker" editable-label="yes">
 			<description>
@@ -3302,6 +3314,8 @@
 				<BlockGenusMember>glue_char</BlockGenusMember>
 				<BlockGenusMember>glue_string</BlockGenusMember>
 				
+				<BlockGenusMember>communicationDivider4</BlockGenusMember>
+				<BlockGenusMember>read_serial_monitor</BlockGenusMember>
 				<!--
 				<BlockGenusMember>communicationDivider4</BlockGenusMember>
 				<BlockGenusMember>psn_broker</BlockGenusMember>
diff --git a/src/main/resources/com/ardublock/block/ardublock_de.properties b/src/main/resources/com/ardublock/block/ardublock_de.properties
index ccabe38..c0ad9c1 100644
--- a/src/main/resources/com/ardublock/block/ardublock_de.properties
+++ b/src/main/resources/com/ardublock/block/ardublock_de.properties
@@ -693,6 +693,7 @@ bd.communication=Kommunikation
 bg.communicationDivider1=|       Seriell      |
 bg.communicationDivider2=|       Software Seriell      |
 bg.communicationDivider3=|       Verbinder      |
+bg.communicationDivider4=|       Hilfsfunktionen      |
 
 bg.glue_poly=verbinde
 bg.glue_msg=verbinde
@@ -714,6 +715,8 @@ bg.glue_digital=verbinde
 bg.glue_number=verbinde
 bg.glue_char=verbinde
 bg.glue_string=verbinde
+bg.read_serial_monitor=lese von SerialMonitor
+
 bg.tele_set_frame=schreibe Daten in Frame
 bg.tele_read_frame=lese Frame seriell ein
 bg.tele_read_data_frame=lese Daten aus Frame
@@ -740,6 +743,8 @@ bg.glue_digital.description=Verbinde digitalen Wert mit Zeichenkette
 bg.glue_number.description=Verbinde analogen Wert mit Zeichenkette
 bg.glue_char.description=Verbinde Zeichen mit Zeichenkette
 bg.glue_string.description=Verbinde Zeichenkette mit Zeichenkette
+bg.read_serial_monitor.description=Lese Zeichen vom SerialMonitor bis Zeilenende "CR" und schreibe diese in Zeichenkette.
+
 bg.tele_set_frame.description=schreibe Daten in den Telegramm-Rahmen
 bg.tele_read_frame.description=lese Daten von der seriellen Schnittstelle im letsgoING-Telegramm-Format
 bg.tele_read_data_frame.description=lese Daten aus dem Telegramm-Rahmen\n HINWEIS: Senderadresse 0 erhält Daten von allen Sendern
@@ -752,6 +757,8 @@ bc.ln=neue Zeile
 bc.rx_pin_number=Rx Pin
 bc.tx_pin_number=Tx Pin
 bc.baudrate=Baud
+bc.read_array=lese-Zeichenkette
+
 bc.sendAddress= Adr. Sender
 bc.recAddress=Adr. Empfänger
 bc.dataLength=Länge Daten [0-9]
@@ -771,7 +778,6 @@ bg.didacticnetworkDivider1=|       PubSub Netzwerk      |
 bg.didacticnetworkDivider2=|       PubSub publish      |
 bg.didacticnetworkDivider3=|       PubSub subscribe      |
 bg.didacticnetworkDivider4=|       PubSub callback      |
-bg.didacticnetworkDivider5=|       Hilfsfunktionen      |
 
 bg.psn_broker=Broker psnName
 bg.psn_client=Client psnName
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 047a3f0..9be1bd1 100644
--- a/src/main/resources/com/ardublock/block/ardublock_en_GB.properties
+++ b/src/main/resources/com/ardublock/block/ardublock_en_GB.properties
@@ -694,6 +694,7 @@ bd.communication=Kommunikation
 bg.communicationDivider1=|       Seriell      |
 bg.communicationDivider2=|       Software Seriell      |
 bg.communicationDivider3=|       Verbinder      |
+bg.communicationDivider4=|       Hilfsfunktionen      |
 
 bg.glue_poly=verbinde
 bg.glue_msg=verbinde
@@ -715,6 +716,8 @@ bg.glue_digital=verbinde
 bg.glue_number=verbinde
 bg.glue_char=verbinde
 bg.glue_string=verbinde
+bg.read_serial_monitor=readSerialData
+
 bg.tele_set_frame=schreibe Daten in Frame
 bg.tele_read_frame=lese Frame seriell ein
 bg.tele_read_data_frame=lese Daten aus Frame
@@ -741,6 +744,8 @@ bg.glue_digital.description=Verbinde digitalen Wert mit Zeichenkette
 bg.glue_number.description=Verbinde analogen Wert mit Zeichenkette
 bg.glue_char.description=Verbinde Zeichen mit Zeichenkette
 bg.glue_string.description=Verbinde Zeichenkette mit Zeichenkette
+bg.read_serial_monitor.description=Lese Zeichen vom SerialMonitor bis Zeilenende "CR" und schreibe diese in char-Array
+
 bg.tele_set_frame.description=schreibe Daten in den Telegramm-Rahmen
 bg.tele_read_frame.description=lese Daten von der seriellen Schnittstelle im letsgoING-Telegramm-Format
 bg.tele_read_data_frame.description=lese Daten aus dem Telegramm-Rahmen\n HINWEIS: Senderadresse 0 erhält Daten von allen Sendern
@@ -752,6 +757,7 @@ bc.ln=neue Zeile
 bc.rx_pin_number=Rx Pin
 bc.tx_pin_number=Tx Pin
 bc.baudrate=Baud
+bc.read_array=lese-Array
 
 bc.sendAddress= Adr. Sender
 bc.recAddress=Adr. Empfänger
@@ -772,7 +778,6 @@ bg.didacticnetworkDivider1=|       PubSub Netzwerk      |
 bg.didacticnetworkDivider2=|       PubSub publish      |
 bg.didacticnetworkDivider3=|       PubSub subscribe      |
 bg.didacticnetworkDivider4=|       PubSub callback      |
-bg.didacticnetworkDivider5=|       Hilfsfunktionen      |
 
 bg.psn_broker=Broker psnName
 bg.psn_client=Client psnName
diff --git a/src/main/resources/com/ardublock/block/block-mapping.properties b/src/main/resources/com/ardublock/block/block-mapping.properties
index 320108d..700f60f 100644
--- a/src/main/resources/com/ardublock/block/block-mapping.properties
+++ b/src/main/resources/com/ardublock/block/block-mapping.properties
@@ -246,12 +246,17 @@ glue_digital=com.ardublock.translator.block.communication.GlueBlock
 glue_number=com.ardublock.translator.block.communication.GlueBlock
 glue_char=com.ardublock.translator.block.communication.GlueBlock
 glue_string=com.ardublock.translator.block.communication.GlueBlock
+read_serial_monitor=com.ardublock.translator.block.communication.ReadSerialMonitorBlock
+
 tele_set_frame=com.ardublock.translator.block.communication.TelegramSetFrameBlock
 tele_read_frame=com.ardublock.translator.block.communication.TelegramReadFrameBlock
 tele_read_data_frame=com.ardublock.translator.block.communication.TelegramReadDataFrameBlock
 mqtt_set_frame=com.ardublock.translator.block.communication.MQTTSetFrameBlock
 mqtt_read_frame=com.ardublock.translator.block.communication.MQTTReadFrameBlock
 
+
+#DIDACTIC NETWORK
+#****************************
 psn_broker=com.ardublock.translator.block.didacticnetwork.PsnBrokerBlock
 psn_client=com.ardublock.translator.block.didacticnetwork.PsnClientBlock
 psn_callback=com.ardublock.translator.block.didacticnetwork.PsnCallbackBlock
-- 
GitLab