diff --git a/src/main/java/com/ardublock/translator/block/communication/PlotMessageBlock.java b/src/main/java/com/ardublock/translator/block/communication/PlotMessageBlock.java new file mode 100644 index 0000000000000000000000000000000000000000..6c00fa3219ab168a201dc439f7bf6a5b5b7182c7 --- /dev/null +++ b/src/main/java/com/ardublock/translator/block/communication/PlotMessageBlock.java @@ -0,0 +1,52 @@ +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.LocalVariableNumberBlock; +import com.ardublock.translator.block.numbers.LocalVariableStringBlock; +import com.ardublock.translator.block.numbers.StringBlock; +import com.ardublock.translator.block.numbers.VariableNumberBlock; +import com.ardublock.translator.block.numbers.VariableStringBlock; + +public class PlotMessageBlock extends TranslatorBlock +{ + private static ResourceBundle uiMessageBundle = ResourceBundle.getBundle("com/ardublock/block/ardublock"); + + public PlotMessageBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label) + { + super(blockId, translator, codePrefix, codeSuffix, label); + } + + @Override + public String toCode() throws SocketNullException, SubroutineNotDeclaredException + { + String VarMarker = "><"; //split marker for SerialPrintBlock + String ret = ""; + + TranslatorBlock tB_label = this.getTranslatorBlockAtSocket(0); + TranslatorBlock tB_value = this.getRequiredTranslatorBlockAtSocket(1); + + if (!(tB_label instanceof StringBlock)) { + throw new BlockException(blockId, uiMessageBundle.getString("ardublock.error_msg.string_only_slot")); + } + + if(tB_label != null){ + StringBuilder tb_label_buffer = new StringBuilder(tB_label.toCode().replaceAll("\\s*_.new\\b\\s*", "")); + tb_label_buffer.replace(tb_label_buffer.lastIndexOf("\""), tb_label_buffer.lastIndexOf("\"") + 1, ":\"" ); + ret = tb_label_buffer.toString()+ VarMarker; + } + if(tB_value != null){ + ret += tB_value.toCode().replaceAll("\\s*_.new\\b\\s*", ""); + } + + return ret; + } +} + + diff --git a/src/main/java/com/ardublock/translator/block/communication/SerialPlotBlock.java b/src/main/java/com/ardublock/translator/block/communication/SerialPlotBlock.java new file mode 100644 index 0000000000000000000000000000000000000000..f5e82789130208c9b80bce798e86c7d029b9ce06 --- /dev/null +++ b/src/main/java/com/ardublock/translator/block/communication/SerialPlotBlock.java @@ -0,0 +1,62 @@ +package com.ardublock.translator.block.communication; + +import com.ardublock.translator.Translator; +import com.ardublock.translator.block.TranslatorBlock; +import com.ardublock.translator.block.exception.SocketNullException; +import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; + + +public class SerialPlotBlock extends TranslatorBlock +{ + public SerialPlotBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label) + { + super(blockId, translator, codePrefix, codeSuffix, label); + } + + @Override + public String toCode() throws SocketNullException, SubroutineNotDeclaredException + { + String VarMarker = "><"; //split marker used in GlueBlock + String ret = ""; + + if(!translator.containsSetupCommand("Serial.begin")){ + translator.addSetupCommand("Serial.begin(9600);"); + } + + TranslatorBlock translatorBlock = this.getRequiredTranslatorBlockAtSocket(0); + TranslatorBlock tb_upperLimit = null; + TranslatorBlock tb_lowerLimit = null; + + try { + tb_upperLimit = this.getTranslatorBlockAtSocket(1); + tb_lowerLimit = this.getTranslatorBlockAtSocket(2); + } catch (Exception e) {} + + while (translatorBlock != null) + { + String[] buffer = translatorBlock.toCode().split(VarMarker); + translatorBlock = translatorBlock.nextTranslatorBlock(); + + if(translatorBlock == null && (tb_upperLimit == null || tb_lowerLimit == null)) { + ret += "Serial.print(" + buffer[0] + ");\n"; + ret += "Serial.println(" + buffer[1] + ");\n"; + } + else { + ret += "Serial.print(" + buffer[0] + ");\n"; + ret += "Serial.print(" + buffer[1] + ");\n"; + ret += "Serial.print(\" \");"; + } + } + + if(tb_upperLimit != null && tb_lowerLimit != null) { + ret += "Serial.print(\"Limit:\");\n"; + ret += "Serial.print(" + tb_upperLimit.toCode() + ");\n"; + ret += "Serial.print(\" \");"; + ret += "Serial.print(\"Limit:\");\n"; + ret += "Serial.println(" + tb_lowerLimit.toCode() + ");\n"; + } + + return ret; + } + +} diff --git a/src/main/resources/com/ardublock/block/ardublock.properties b/src/main/resources/com/ardublock/block/ardublock.properties index a85ace3da39a6520829038419bf10f23ae527c63..9be84cb93c4ac1b5c0e6cd79ec4df7f8a03f3273 100644 --- a/src/main/resources/com/ardublock/block/ardublock.properties +++ b/src/main/resources/com/ardublock/block/ardublock.properties @@ -119,6 +119,7 @@ ardublock.error_msg.array_size_slot='Array size' slot must take a standard integ 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 ardublock.error_msg.var_slot= The slot must take an variable-block ardublock.error_msg.string_slot=String slot must take a String variable or a String variable name.\nHint: Look at the 'variable' socket on the highlighted block +ardublock.error_msg.string_only_slot=String slot must take a String block\nHint: Look at the sockets on the highlighted block ardublock.error_msg.Digital_pin_slot=Pin# must be a valid digital pin number found on an Arduino Board ardublock.error_msg.Analog_pin_slot=Pin# must be a valid analog input pin number found on an Arduino Board ardublock.error_msg.local_var_slot=Variable slot must take a standard 'local X variable name'.\nHint: Look at the 'variable' socket on the highlighted block @@ -788,6 +789,7 @@ bg.communicationDivider1=| serial | bg.communicationDivider2=| software serial | bg.communicationDivider3=| serial connectors | bg.communicationDivider4=| helper | +bg.communicationDivider5=| plotter | bg.glue_poly=connect bg.glue_msg=connect @@ -809,6 +811,8 @@ bg.glue_digital=glue bg.glue_number=glue bg.glue_char=glue bg.glue_string=glue +bg.plot_digital=plot +bg.plot_number=plot bg.read_serial_monitor=readSerialData bg.tele_set_frame=set Frame @@ -837,6 +841,9 @@ 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.plotter.description=plot data on SerialPlotter +bg.plot_digital.description=plot boolean value on serial plotter +bg.plot_number.description=plot number value on serial plotter bg.read_serial_monitor.description=read data from SerialMonitor till "CR" bg.tele_set_frame.description=write data to telegram-frame @@ -852,6 +859,13 @@ bc.ln=new line bc.rx_pin_number=Rx Pin bc.tx_pin_number=Tx Pin bc.baudrate=baud + +bc.plot_legend=legend +bc.plot_value=value +bc.plot_messages=plots +bc.plot_upperBorder=upper border +bc.plot_lowerBorder=lower border + bc.read_array=array bc.sendAddress=sender address diff --git a/src/main/resources/com/ardublock/block/ardublock.xml b/src/main/resources/com/ardublock/block/ardublock.xml index 9fef675ee4f55d561d0810e8bede481e3fb473ea..dc779b1526f13d38048e72d611db39a0ed3b8957 100644 --- a/src/main/resources/com/ardublock/block/ardublock.xml +++ b/src/main/resources/com/ardublock/block/ardublock.xml @@ -2383,6 +2383,8 @@ <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="communicationDivider5" kind="command" is-starter="yes" is-terminator="yes" initlabel="bg.communicationDivider5" 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" /> @@ -2537,6 +2539,38 @@ <BlockConnector label="" connector-kind="socket" connector-type="string" position-type="bottom" /> </BlockConnectors> </BlockGenus> + + <BlockGenus name="plotter" kind="command" initlabel="bg.plotter" color="165 42 42"> + <description> + <text> + Plotter Main Block + </text> + </description> + <BlockConnectors> + <BlockConnector label="bc.plot_messages" connector-kind="socket" connector-type="cmd" /> + <BlockConnector label="bc.plot_upperBorder" connector-kind="socket" connector-type="number" /> + <BlockConnector label="bc.plot_lowerBorder" connector-kind="socket" connector-type="number" /> + </BlockConnectors> + </BlockGenus> + <BlockGenus name="plot_digital" kind="command" color="165 42 42" initlabel="bg.plot_digital"> + <description> + <text>plot boolean</text> + </description> + <BlockConnectors> + <BlockConnector label="bc.plot_legend" connector-kind="socket" connector-type="string" position-type="bottom" /> + <BlockConnector label="bc.plot_value" connector-type="boolean" connector-kind="socket" position-type="bottom" /> + </BlockConnectors> + </BlockGenus> + <BlockGenus name="plot_number" kind="command" color="165 42 42" initlabel="bg.plot_number"> + <description> + <text>plot number</text> + </description> + <BlockConnectors> + <BlockConnector label="bc.plot_legend" connector-kind="socket" connector-type="string" position-type="bottom" /> + <BlockConnector label="bc.plot_value" connector-type="number" connector-kind="socket" 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> @@ -3616,29 +3650,13 @@ <BlockGenusMember>glue_char</BlockGenusMember> <BlockGenusMember>glue_string</BlockGenusMember> + <BlockGenusMember>communicationDivider5</BlockGenusMember> + <BlockGenusMember>plotter</BlockGenusMember> + <BlockGenusMember>plot_number</BlockGenusMember> + <BlockGenusMember>communicationDivider4</BlockGenusMember> <BlockGenusMember>read_serial_monitor</BlockGenusMember> - <!-- - <BlockGenusMember>communicationDivider4</BlockGenusMember> - <BlockGenusMember>psn_broker</BlockGenusMember> - <BlockGenusMember>psn_client</BlockGenusMember> - <BlockGenusMember>psn_handle_network</BlockGenusMember> - <BlockGenusMember>psn_publish</BlockGenusMember> - <BlockGenusMember>psn_publish_analog</BlockGenusMember> - <BlockGenusMember>psn_publish_digital</BlockGenusMember> - <BlockGenusMember>psn_publish_onchange</BlockGenusMember> - <BlockGenusMember>psn_publish_onchange_bool</BlockGenusMember> - <BlockGenusMember>psn_data_to_send</BlockGenusMember> - <BlockGenusMember>psn_subscribe</BlockGenusMember> - <BlockGenusMember>psn_unsubscribe</BlockGenusMember> - <BlockGenusMember>psn_callback</BlockGenusMember>--> - - <!--<BlockGenusMember>tele_set_frame</BlockGenusMember> - <BlockGenusMember>tele_read_frame</BlockGenusMember> - <BlockGenusMember>tele_read_data_frame</BlockGenusMember> - - <BlockGenusMember>mqtt_set_frame</BlockGenusMember> - <BlockGenusMember>mqtt_read_frame</BlockGenusMember>--> + </BlockDrawer> <BlockDrawer button-color="165 42 42" name="bd.communication" type="page"> <BlockGenusMember>communicationDivider1</BlockGenusMember> diff --git a/src/main/resources/com/ardublock/block/ardublock_de.properties b/src/main/resources/com/ardublock/block/ardublock_de.properties index fc4914936f82e1d3fc40378d311754b88235caa6..7e5882f3d2f513897cd7009fdd437cd21d403bf0 100644 --- a/src/main/resources/com/ardublock/block/ardublock_de.properties +++ b/src/main/resources/com/ardublock/block/ardublock_de.properties @@ -122,6 +122,7 @@ ardublock.error_msg.array_size_slot=Der 'Gr 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.var_slot= Der Slot benötigt einen 'Variable'-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! +ardublock.error_msg.string_only_slot=Slot benötigt einen String block\nTipp: Schaue an dem hervorgehobenen Block! ardublock.error_msg.local_var_slot=Der 'Variable'-Sockel benötigt einen 'lokale_X_Variable'-Block.\nTIPP: Schaue an dem 'Variable' Sockel an dem hervorgehobenen Block! ardublock.error_msg.var_value_slot=Der Sockel benötigt einen 'Variable' oder 'Wert'-Block.\nTIPP: Schaue an dem hervorgehobenen Block! ardublock.error_msg.var_value_slot=Es ist nur ein Rueckgabeparameter pro Unterprogramm erlaubt! @@ -805,6 +806,9 @@ bg.glue_digital=verbinde bg.glue_number=verbinde bg.glue_char=verbinde bg.glue_string=verbinde +bg.plotter=SerialPlotter +bg.plot_digital=plotte +bg.plot_number=plotte bg.read_serial_monitor=readSerialData bg.tele_set_frame=schreibe Daten in Frame @@ -833,6 +837,9 @@ 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.plotter.description=Block zur vereinfachten Ausgabe von Werten auf dem SerialPlotter +bg.plot_digital.description=Plotte boolean-Wert auf serial plotter +bg.plot_number.description=Plotte Zahlenwert auf serial plotter 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 @@ -846,6 +853,13 @@ bc.ln=neue Zeile bc.rx_pin_number=Rx Pin bc.tx_pin_number=Tx Pin bc.baudrate=Baud + +bc.plot_legend=Legende +bc.plot_value=Wert +bc.plot_messages=Plots +bc.plot_upperBorder=obere Grenze +bc.plot_lowerBorder=untere Grenze + bc.read_array=lese-Array bc.sendAddress= Adr. Sender diff --git a/src/main/resources/com/ardublock/block/ardublock_de_DE.properties b/src/main/resources/com/ardublock/block/ardublock_de_DE.properties index 4b62e60c8db7b6d09cd9ec226407caf3b35b1de7..c99e22eb7938c0e5ee2259cbea388b2218238e24 100644 --- a/src/main/resources/com/ardublock/block/ardublock_de_DE.properties +++ b/src/main/resources/com/ardublock/block/ardublock_de_DE.properties @@ -120,6 +120,7 @@ ardublock.error_msg.array_var_slot=Der 'Variable'-Sockel ben 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! +ardublock.error_msg.string_only_slot=Slot benötigt einen String block\nTipp: Schaue an dem hervorgehobenen Block! ardublock.error_msg.var_slot= Der Slot benötigt einen 'Variable'-Block ardublock.error_msg.local_var_slot=Der 'Variable'-Sockel benötigt einen 'lokale_X_Variable'-Block.\nTIPP: Schaue an dem 'Variable' Sockel an dem hervorgehobenen Block! ardublock.error_msg.var_value_slot=Der Sockel benötigt einen 'Variable' oder 'Wert'-Block.\nTIPP: Schaue an dem hervorgehobenen Block! @@ -786,6 +787,7 @@ bg.communicationDivider1=| Seriell | bg.communicationDivider2=| Software Seriell | bg.communicationDivider3=| Verbinder | bg.communicationDivider4=| Hilfsfunktionen | +bg.communicationDivider5=| Plotter | bg.glue_poly=verbinde bg.glue_msg=verbinde @@ -807,6 +809,9 @@ bg.glue_digital=verbinde bg.glue_number=verbinde bg.glue_char=verbinde bg.glue_string=verbinde +bg.plotter=SerialPlotter +bg.plot_digital=plotte +bg.plot_number=plotte bg.read_serial_monitor=lese von SerialMonitor bg.tele_set_frame=schreibe Daten in Frame @@ -835,6 +840,9 @@ 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.plotter.description=Block zur vereinfachten Ausgabe von Werten auf dem SerialPlotter +bg.plot_digital.description=Plotte boolean-Wert auf serial plotter +bg.plot_number.description=Plotte Zahlenwert auf serial plotter 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 @@ -849,6 +857,13 @@ bc.ln=neue Zeile bc.rx_pin_number=Rx Pin bc.tx_pin_number=Tx Pin bc.baudrate=Baud + +bc.plot_legend=Legende +bc.plot_value=Wert +bc.plot_messages=Plots +bc.plot_upperBorder=obere Grenze +bc.plot_lowerBorder=untere Grenze + bc.read_array=lese-Zeichenkette bc.sendAddress= Adr. Sender 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 df96e28610bb6a0145f917703cf0058ff664a497..78aaa6b17deef1c830856a27931dcb0d9de1e8cc 100644 --- a/src/main/resources/com/ardublock/block/ardublock_en_GB.properties +++ b/src/main/resources/com/ardublock/block/ardublock_en_GB.properties @@ -119,6 +119,7 @@ ardublock.error_msg.array_size_slot='Array size' slot must take a standard integ 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 ardublock.error_msg.var_slot= The slot must take an variable-block ardublock.error_msg.string_slot=String slot must take a String variable or a String variable name.\nHint: Look at the 'variable' socket on the highlighted block +ardublock.error_msg.string_only_slot=String slot must take a String block\nHint: Look at the sockets on the highlighted block ardublock.error_msg.Digital_pin_slot=Pin# must be a valid digital pin number found on an Arduino Board ardublock.error_msg.Analog_pin_slot=Pin# must be a valid analog input pin number found on an Arduino Board ardublock.error_msg.local_var_slot=Variable slot must take a standard 'local X variable name'.\nHint: Look at the 'variable' socket on the highlighted block @@ -783,6 +784,7 @@ bg.communicationDivider1=| Seriell | bg.communicationDivider2=| Software Seriell | bg.communicationDivider3=| Verbinder | bg.communicationDivider4=| Hilfsfunktionen | +bg.communicationDivider5=| plotter | bg.glue_poly=verbinde bg.glue_msg=verbinde @@ -804,6 +806,9 @@ bg.glue_digital=verbinde bg.glue_number=verbinde bg.glue_char=verbinde bg.glue_string=verbinde +bg.plotter=SerialPlotter +bg.plot_digital=plot +bg.plot_number=plot bg.read_serial_monitor=readSerialData bg.tele_set_frame=schreibe Daten in Frame @@ -832,6 +837,10 @@ 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.plot_digital.description=plot boolean value on serial plotter +bg.plot_number.description=plot number value on serial plotter +bg.plotter.description=plot data on SerialPlotter + 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 @@ -845,6 +854,13 @@ bc.ln=neue Zeile bc.rx_pin_number=Rx Pin bc.tx_pin_number=Tx Pin bc.baudrate=Baud + +bc.plot_legend=legend +bc.plot_value=value +bc.plot_messages=plots +bc.plot_upperBorder=upper border +bc.plot_lowerBorder=lower border + bc.read_array=lese-Array bc.sendAddress= Adr. Sender diff --git a/src/main/resources/com/ardublock/block/block-mapping.properties b/src/main/resources/com/ardublock/block/block-mapping.properties index 6c0808956225a2d34a4c1ee37e02400169e0bdc0..61c1496ad178e449c56398bba7958bd96a9349f1 100644 --- a/src/main/resources/com/ardublock/block/block-mapping.properties +++ b/src/main/resources/com/ardublock/block/block-mapping.properties @@ -267,6 +267,9 @@ 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 +plotter=com.ardublock.translator.block.communication.SerialPlotBlock +plot_digital=com.ardublock.translator.block.communication.PlotMessageBlock +plot_number=com.ardublock.translator.block.communication.PlotMessageBlock read_serial_monitor=com.ardublock.translator.block.communication.ReadSerialMonitorBlock tele_set_frame=com.ardublock.translator.block.communication.TelegramSetFrameBlock