diff --git a/ardublockly/ardublockly_blockly.js b/ardublockly/ardublockly_blockly.js
index 1d0ba2a984..958d171863 100644
--- a/ardublockly/ardublockly_blockly.js
+++ b/ardublockly/ardublockly_blockly.js
@@ -214,7 +214,7 @@ Ardublockly.changeBlocklyArduinoBoard = function(newBoard) {
Ardublockly.updateToolboxLanguage = function() {
var categories = ['catLogic', 'catLoops', 'catMath', 'catText',
'catVariables', 'catFunctions', 'catInputOutput',
- 'catTime', 'catAudio', 'catMotors', 'catComms'];
+ 'catTime', 'catAudio', 'catMotors', 'catComms', 'catDisplay'];
var categoryNodes = Ardublockly.xmlTree.getElementsByTagName('category');
for (var i = 0, cat; cat = categoryNodes[i]; i++) {
var catId = cat.getAttribute('id');
diff --git a/ardublockly/ardublockly_toolbox.js b/ardublockly/ardublockly_toolbox.js
index 28c3c6283f..2e53a2f663 100644
--- a/ardublockly/ardublockly_toolbox.js
+++ b/ardublockly/ardublockly_toolbox.js
@@ -123,6 +123,7 @@ Ardublockly.TOOLBOX_XML =
' ' +
' ' +
' ' +
+' ' +
' ' +
' ' +
' ' +
@@ -231,4 +232,51 @@ Ardublockly.TOOLBOX_XML =
' ' +
' ' +
' ' +
+' ' +
+' ' +
+' ' +
+' 12' +
+' 11' +
+' 5' +
+' 4' +
+' 3' +
+' 2' +
+' ' +
+' ' +
+' 16' +
+' ' +
+' ' +
+' ' +
+' ' +
+' 2' +
+' ' +
+' ' +
+' ' +
+' ' +
+' ' +
+' ' +
+' ' +
+' ' +
+' ' +
+' ' +
+' ' +
+' ' +
+' ' +
+' ' +
+' ' +
+' ' +
+' ' +
+' ' +
+' ' +
+' ' +
+' 0' +
+' ' +
+' ' +
+' ' +
+' ' +
+' 0' +
+' ' +
+' ' +
+' ' +
+' ' +
'';
diff --git a/ardublockly/index.html b/ardublockly/index.html
index 75fa9a3538..c417d00067 100644
--- a/ardublockly/index.html
+++ b/ardublockly/index.html
@@ -27,6 +27,7 @@
+
@@ -39,6 +40,7 @@
+
diff --git a/ardublockly/msg/en.js b/ardublockly/msg/en.js
index 94481312e8..9bb29171db 100644
--- a/ardublockly/msg/en.js
+++ b/ardublockly/msg/en.js
@@ -102,4 +102,5 @@ Ardublockly.LOCALISED_TEXT = {
catAudio: "Audio",
catMotors: "Motors",
catComms: "Comms",
+ catDisplay: "Display",
};
diff --git a/blockly/blocks/arduino/io.js b/blockly/blocks/arduino/io.js
index bf59259067..77d320aced 100644
--- a/blockly/blocks/arduino/io.js
+++ b/blockly/blocks/arduino/io.js
@@ -260,3 +260,20 @@ Blockly.Blocks['io_pulsetimeout'] = {
return Blockly.Types.NUMBER;
}
};
+
+Blockly.Blocks['io_input_pullup'] = {
+ init: function() {
+ this.appendDummyInput()
+ .appendField(Blockly.Msg.ARD_SET_PIN)
+ .appendField(new Blockly.FieldDropdown(
+ Blockly.Arduino.Boards.selected.digitalPins), 'PIN')
+ .appendField(Blockly.Msg.ARD_MODE_TO)
+ .appendField(new Blockly.FieldDropdown([[Blockly.Msg.ARD_PULLUP,"INPUT_PULLUP"],[Blockly.Msg.ARD_INPUT,"INPUT"], [Blockly.Msg.ARD_OUTPUT,"OUTPUT"]]), "STATE");
+ this.setColour(Blockly.Blocks.io.HUE);
+ this.setTooltip(Blockly.Msg.ARD_PULLUP_TIP);
+ this.setHelpUrl('https://www.arduino.cc/en/Reference/Constants');
+ },
+ getBlockType: function() {
+ return Blockly.Types.SHORT_NUMBER;
+ }
+};
\ No newline at end of file
diff --git a/blockly/blocks/arduino/liquidcrystal.js b/blockly/blocks/arduino/liquidcrystal.js
new file mode 100644
index 0000000000..ccf657c87e
--- /dev/null
+++ b/blockly/blocks/arduino/liquidcrystal.js
@@ -0,0 +1,129 @@
+/**
+ * @license Licensed under the Apache License, Version 2.0 (the "License"):
+ * http://www.apache.org/licenses/LICENSE-2.0
+ */
+
+/**
+ * @fileoverview Blocks for Arduino Liquid Crystal library.
+ * The Arduino Liquid Crystal functions syntax can be found in the following URL:
+ * https://www.arduino.cc/en/Reference/LiquidCrystal
+ * Note that this block uses the Blockly.FieldInstance instead of
+ * Blockly.FieldDropdown which generates a unique instance per setup block
+ * in the workspace.
+ */
+
+'use strict';
+
+goog.provide('Blockly.Blocks.LiquidCrystal');
+
+goog.require('Blockly.Blocks');
+goog.require('Blockly.Types');
+
+/** Common HSV hue for all blocks in this category. */
+Blockly.Blocks.LiquidCrystal.HUE = 300;
+
+Blockly.Blocks['liquidcrystal_config'] = {
+ init: function() {
+ this.appendDummyInput()
+ .appendField(Blockly.Msg.ARD_LIQUIDCRYSTAL_CONFIG)
+ .appendField(new Blockly.FieldInstance('LCD',Blockly.Msg.ARD_LIQUIDCRYSTAL_DEFAULT_NAME,true,true,false), "liquidcrystal_name");
+ this.appendDummyInput()
+ .setAlign(Blockly.ALIGN_RIGHT)
+ .appendField("RS:")
+ .appendField(new Blockly.FieldDropdown(Blockly.Arduino.Boards.selected.digitalPins), "LCD_RS")
+ .appendField("EN:")
+ .appendField(new Blockly.FieldDropdown(Blockly.Arduino.Boards.selected.digitalPins), "LCD_EN")
+ .appendField("D4:")
+ .appendField(new Blockly.FieldDropdown(Blockly.Arduino.Boards.selected.digitalPins), "LCD_D4");
+ this.appendDummyInput()
+ .setAlign(Blockly.ALIGN_RIGHT)
+ .appendField("D5:")
+ .appendField(new Blockly.FieldDropdown(Blockly.Arduino.Boards.selected.digitalPins), "LCD_D5")
+ .appendField("D6:")
+ .appendField(new Blockly.FieldDropdown(Blockly.Arduino.Boards.selected.digitalPins), "LCD_D6")
+ .appendField("D7:")
+ .appendField(new Blockly.FieldDropdown(Blockly.Arduino.Boards.selected.digitalPins), "LCD_D7");
+ this.appendValueInput("LCD_COLUMN")
+ .setCheck("Number")
+ .setAlign(Blockly.ALIGN_RIGHT)
+ .appendField("No. of Columns:");
+ this.appendValueInput("LCD_ROW")
+ .setCheck("Number")
+ .setAlign(Blockly.ALIGN_RIGHT)
+ .appendField("No. of Rows:");
+ this.setColour(Blockly.Blocks.LiquidCrystal.HUE);
+ this.setTooltip(Blockly.Msg.ARD_LIQUIDCRYSTAL_DEFAULT_TIP);
+ this.setHelpUrl('https://www.arduino.cc/en/Reference/LiquidCrystal');
+ }
+};
+
+Blockly.Blocks['liquidcrystal_variable'] = {
+ init: function() {
+ this.appendDummyInput()
+ .appendField(new Blockly.FieldInstance('LCD',Blockly.Msg.ARD_LIQUIDCRYSTAL_DEFAULT_NAME,false,true,false), "liquidcrystal_name");
+ this.setOutput(true, null);
+ this.setColour(Blockly.Blocks.LiquidCrystal.HUE);
+ this.setTooltip('');
+ this.setHelpUrl('https://www.arduino.cc/en/Reference/LiquidCrystal');
+ }
+};
+
+Blockly.Blocks['liquidcrystal_clear'] = {
+ init: function() {
+ this.appendValueInput("LCD_NAME")
+ .setCheck("String")
+ .appendField(Blockly.Msg.ARD_LIQUIDCRYSTAL_CLEAR_DISPLAY);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setColour(Blockly.Blocks.LiquidCrystal.HUE);
+ this.setTooltip(Blockly.Msg.ARD_LIQUIDCRYSTAL_CLEAR_DISPLAY_TIP);
+ this.setHelpUrl('https://www.arduino.cc/en/Reference/LiquidCrystal');
+ }
+};
+
+Blockly.Blocks['liquidcrystal_print'] = {
+ /**
+ * Block for creating a write to serial com function.
+ * @this Blockly.Block
+ */
+ init: function() {
+ this.setHelpUrl('http://www.arduino.cc/en/Serial/Print');
+ this.setColour(Blockly.Blocks.LiquidCrystal.HUE);
+ this.appendDummyInput()
+ .appendField(Blockly.Msg.ARD_SERIAL_PRINT);
+ this.appendValueInput('CONTENT')
+ .setCheck(Blockly.Types.TEXT.checkList);
+ this.appendValueInput('LCD_NAME')
+ .appendField(Blockly.Msg.ARD_LIQUIDCRYSTAL_PRINT_ON_DISPLAY);
+ this.appendDummyInput()
+ .appendField(new Blockly.FieldCheckbox('TRUE'), 'NEW_LINE')
+ .appendField(Blockly.Msg.ARD_SERIAL_PRINT_NEWLINE);
+ this.setInputsInline(true);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setTooltip(Blockly.Msg.ARD_LIQUIDCRYSTAL_PRINT_TIP);
+ this.setHelpUrl('https://www.arduino.cc/en/Reference/LiquidCrystal');
+ }
+};
+
+Blockly.Blocks['liquidcrystal_set_cursor'] = {
+ init: function() {
+ this.appendValueInput("LCD_NAME")
+ .setCheck("String")
+ .appendField(Blockly.Msg.ARD_LIQUIDCRYSTAL_SET_CURSOR);
+ this.appendValueInput("LCD_COLUMN")
+ .setCheck("Number")
+ .setAlign(Blockly.ALIGN_RIGHT)
+ .appendField("Column:");
+ this.appendValueInput("LCD_ROW")
+ .setCheck("Number")
+ .setAlign(Blockly.ALIGN_RIGHT)
+ .appendField("Rows:");
+ this.setInputsInline(false);
+ this.setPreviousStatement(true, null);
+ this.setNextStatement(true, null);
+ this.setColour(Blockly.Blocks.LiquidCrystal.HUE);
+ this.setTooltip(Blockly.Msg.ARD_LIQUIDCRYSTAL_SET_CURSOR_TIP);
+ this.setHelpUrl('https://www.arduino.cc/en/Reference/LiquidCrystal');
+ }
+};
\ No newline at end of file
diff --git a/blockly/generators/arduino.js b/blockly/generators/arduino.js
index f68be2e382..4e74e01285 100644
--- a/blockly/generators/arduino.js
+++ b/blockly/generators/arduino.js
@@ -73,7 +73,8 @@ Blockly.Arduino.PinTypes = {
STEPPER: 'STEPPER',
SERIAL: 'SERIAL',
I2C: 'I2C/TWI',
- SPI: 'SPI'
+ SPI: 'SPI',
+ LCD: 'LCD'
};
/**
diff --git a/blockly/generators/arduino/io.js b/blockly/generators/arduino/io.js
index 0c3bce5ff6..baabbafc9d 100644
--- a/blockly/generators/arduino/io.js
+++ b/blockly/generators/arduino/io.js
@@ -13,6 +13,32 @@ goog.provide('Blockly.Arduino.IO');
goog.require('Blockly.Arduino');
+Blockly.Arduino['io_input_pullup'] = function(block) {
+ var pin = block.getFieldValue('PIN');
+ var stateOutput = block.getFieldValue('STATE');
+
+ if(stateOutput =='OUTPUT')
+ {
+ Blockly.Arduino.reservePin(
+ block, pin, Blockly.Arduino.PinTypes.OUTPUT, 'Digital Write');
+ }
+
+ else if(stateOutput =='INPUT')
+ {
+ Blockly.Arduino.reservePin(
+ block, pin, Blockly.Arduino.PinTypes.INPUT, 'Digital Read');
+ }
+ else if(stateOutput == 'INPUT_PULLUP')
+ {
+ Blockly.Arduino.reservePin(
+ block, pin, Blockly.Arduino.PinTypes.INPUT, 'Digital Read');
+ }
+
+ var pinSetupCode = 'pinMode(' + pin + ','+stateOutput+');';
+ Blockly.Arduino.addSetup('io_' + pin, pinSetupCode, false);
+
+ return '';
+};
/**
* Function for 'set pin' (X) to a state (Y).
diff --git a/blockly/generators/arduino/liquidcrystal.js b/blockly/generators/arduino/liquidcrystal.js
new file mode 100644
index 0000000000..7cde165e24
--- /dev/null
+++ b/blockly/generators/arduino/liquidcrystal.js
@@ -0,0 +1,85 @@
+'use strict';
+
+goog.provide('Blockly.Arduino.LiquidCrystal');
+
+goog.require('Blockly.Arduino');
+
+Blockly.Arduino['liquidcrystal_config'] = function(block) {
+
+ var pinType = Blockly.Arduino.PinTypes.LCD;
+
+ var rs = block.getFieldValue('LCD_RS');
+ var en = block.getFieldValue('LCD_EN');
+ var d4 = block.getFieldValue('LCD_D4');
+ var d5 = block.getFieldValue('LCD_D5');
+ var d6 = block.getFieldValue('LCD_D6');
+ var d7 = block.getFieldValue('LCD_D7');
+
+ var lcdName = block.getFieldValue("liquidcrystal_name");
+
+ var lcdRows = Blockly.Arduino.valueToCode(block, 'LCD_ROW',
+ Blockly.Arduino.ORDER_ATOMIC) || '2';
+ var lcdColumns = Blockly.Arduino.valueToCode(block, 'LCD_COLUMN',
+ Blockly.Arduino.ORDER_ATOMIC) || '16';
+
+ Blockly.Arduino.reservePin(block, rs, pinType, 'LCD');
+ Blockly.Arduino.reservePin(block, en, pinType, 'LCD');
+ Blockly.Arduino.reservePin(block, d4, pinType, 'LCD');
+ Blockly.Arduino.reservePin(block, d5, pinType, 'LCD');
+ Blockly.Arduino.reservePin(block, d6, pinType, 'LCD');
+ Blockly.Arduino.reservePin(block, d7, pinType, 'LCD');
+
+ Blockly.Arduino.addInclude('lcd', '#include ');
+
+ var globalCode = 'LiquidCrystal ' + lcdName + '(' + rs + ', ' + en + ', ' + d4 + ', ' + d5 + ', ' + d6 + ', ' + d7 + ');';
+ Blockly.Arduino.addDeclaration(lcdName, globalCode);
+
+ var setupCode = lcdName + '.begin(' + lcdColumns + ',' + lcdRows + ');';
+ Blockly.Arduino.addSetup(lcdName, setupCode, true);
+
+ return '';
+}
+
+Blockly.Arduino['liquidcrystal_variable'] = function(block) {
+ var code = block.getFieldValue("liquidcrystal_name");
+ return [code, Blockly.Arduino.ORDER_ATOMIC];
+}
+
+Blockly.Arduino['liquidcrystal_clear'] = function(block) {
+ var lcdName = Blockly.Arduino.valueToCode(
+ block, 'LCD_NAME', Blockly.Arduino.ORDER_ATOMIC) || Blockly.Msg.ARD_LIQUIDCRYSTAL_DEFAULT_NAME;
+ var code = lcdName+'.clear();\n';
+ return code;
+}
+
+Blockly.Arduino['liquidcrystal_print'] = function(block) {
+ var lcdName = Blockly.Arduino.valueToCode(
+ block, 'LCD_NAME', Blockly.Arduino.ORDER_ATOMIC) || Blockly.Msg.ARD_LIQUIDCRYSTAL_DEFAULT_NAME;
+ var content = Blockly.Arduino.valueToCode(
+ block, 'CONTENT', Blockly.Arduino.ORDER_ATOMIC) || '0';
+ var checkbox_name = (block.getFieldValue('NEW_LINE') == 'TRUE');
+
+ if (checkbox_name) {
+ var code = lcdName + '.println(' + content + ');\n';
+ } else {
+ var code = lcdName + '.print(' + content + ');\n';
+ }
+ return code;
+};
+
+Blockly.Arduino['liquidcrystal_set_cursor'] = function(block) {
+
+ var pinType = Blockly.Arduino.PinTypes.LCD;
+
+ var lcdName = Blockly.Arduino.valueToCode(
+ block, 'LCD_NAME', Blockly.Arduino.ORDER_ATOMIC) || Blockly.Msg.ARD_LIQUIDCRYSTAL_DEFAULT_NAME;
+
+ var lcdRows = Blockly.Arduino.valueToCode(block, 'LCD_ROW',
+ Blockly.Arduino.ORDER_ATOMIC) || '0';
+ var lcdColumns = Blockly.Arduino.valueToCode(block, 'LCD_COLUMN',
+ Blockly.Arduino.ORDER_ATOMIC) || '0';
+
+ var code = lcdName + '.setCursor(' + lcdColumns + ',' + lcdRows + ');\n';
+
+ return code;
+}
\ No newline at end of file
diff --git a/blockly/msg/js/en.js b/blockly/msg/js/en.js
index 86b68a37f4..015670d7f7 100644
--- a/blockly/msg/js/en.js
+++ b/blockly/msg/js/en.js
@@ -510,3 +510,18 @@ Blockly.Msg.NEW_INSTANCE = "New instance...";
Blockly.Msg.NEW_INSTANCE_TITLE = "New instance name:";
Blockly.Msg.RENAME_INSTANCE = "Rename instance...";
Blockly.Msg.RENAME_INSTANCE_TITLE = "Rename all '%1' instances to:";
+Blockly.Msg.ARD_LIQUIDCRYSTAL_CONFIG = 'Setup LCD';
+Blockly.Msg.ARD_LIQUIDCRYSTAL_DEFAULT_NAME = 'LCD';
+Blockly.Msg.ARD_LIQUIDCRYSTAL_DEFAULT_TIP = 'Configures the LCD pinout and other settings.';
+Blockly.Msg.ARD_PULLUP_TIP = 'Sets pin # into Pull Up mode';
+Blockly.Msg.ARD_PULLUP = 'INPUT_PULLUP';
+Blockly.Msg.ARD_LIQUIDCRYSTAL_PRINT_TIP = 'Prints data to display.';
+Blockly.Msg.ARD_LIQUIDCRYSTAL_PRINT_ON_DISPLAY = 'on display: ';
+Blockly.Msg.ARD_LIQUIDCRYSTAL_CLEAR_DISPLAY = 'Clear display: ';
+Blockly.Msg.ARD_LIQUIDCRYSTAL_CLEAR_DISPLAY_TIP = 'Clears the display';
+Blockly.Msg.ARD_LIQUIDCRYSTAL_SET_CURSOR = 'Set cursor on display: ';
+Blockly.Msg.ARD_LIQUIDCRYSTAL_SET_CURSOR_TIP = 'Sets the position of the cursor';
+Blockly.Msg.ARD_SET_PIN = 'Set pin#';
+Blockly.Msg.ARD_MODE_TO = 'mode to';
+Blockly.Msg.ARD_INPUT = 'INPUT';
+Blockly.Msg.ARD_OUTPUT = 'OUTPUT';
\ No newline at end of file
diff --git a/blockly/msg/messages_ardublockly.js b/blockly/msg/messages_ardublockly.js
index dc799c043f..2618b4d495 100644
--- a/blockly/msg/messages_ardublockly.js
+++ b/blockly/msg/messages_ardublockly.js
@@ -176,3 +176,19 @@ Blockly.Msg.RENAME_INSTANCE = 'Rename instance...';
Blockly.Msg.NEW_INSTANCE_TITLE = 'New instance name:';
/// Instances - Confirmation message that a number of instances will be renamed to a new name
Blockly.Msg.RENAME_INSTANCE_TITLE = 'Rename all "%1" instances to:';
+
+Blockly.Msg.ARD_LIQUIDCRYSTAL_CONFIG = 'Setup LCD';
+Blockly.Msg.ARD_LIQUIDCRYSTAL_DEFAULT_NAME = 'LCD';
+Blockly.Msg.ARD_LIQUIDCRYSTAL_DEFAULT_TIP = 'Configures the LCD pinout and other settings.';
+Blockly.Msg.ARD_PULLUP_TIP = 'Sets pin # into Pull Up mode';
+Blockly.Msg.ARD_PULLUP = 'INPUT_PULLUP';
+Blockly.Msg.ARD_LIQUIDCRYSTAL_PRINT_TIP = 'Prints data to display.';
+Blockly.Msg.ARD_LIQUIDCRYSTAL_PRINT_ON_DISPLAY = 'on display: ';
+Blockly.Msg.ARD_LIQUIDCRYSTAL_CLEAR_DISPLAY = 'Clear display: ';
+Blockly.Msg.ARD_LIQUIDCRYSTAL_CLEAR_DISPLAY_TIP = 'Clears the display';
+Blockly.Msg.ARD_LIQUIDCRYSTAL_SET_CURSOR = 'Set cursor on display: ';
+Blockly.Msg.ARD_LIQUIDCRYSTAL_SET_CURSOR_TIP = 'Sets the position of the cursor';
+Blockly.Msg.ARD_SET_PIN = 'Set pin#';
+Blockly.Msg.ARD_MODE_TO = 'mode to';
+Blockly.Msg.ARD_INPUT = 'INPUT';
+Blockly.Msg.ARD_OUTPUT = 'OUTPUT';
\ No newline at end of file
diff --git a/package/ardublocklydocs/ardublockly.wiki b/package/ardublocklydocs/ardublockly.wiki
index b563677958..30d13b91cc 160000
--- a/package/ardublocklydocs/ardublockly.wiki
+++ b/package/ardublocklydocs/ardublockly.wiki
@@ -1 +1 @@
-Subproject commit b56367795804920124eb58cb5d967d62aa2b50f4
+Subproject commit 30d13b91cc4703962de14eb63d0b5de287365032