diff --git a/img/blocks/credits.txt b/img/blocks/credits.txt
new file mode 100644
index 0000000..3cf2b3e
--- /dev/null
+++ b/img/blocks/credits.txt
@@ -0,0 +1 @@
+Created by Leopoldo Armesto (based on the icon from Antoine Dieulesaint from the Noun Project)
\ No newline at end of file
diff --git a/img/blocks/led_strip.svg b/img/blocks/led_strip.svg
new file mode 100644
index 0000000..d0b2273
--- /dev/null
+++ b/img/blocks/led_strip.svg
@@ -0,0 +1,95 @@
+
+
+
+
diff --git a/lang/SimpleExpressions.json b/lang/SimpleExpressions.json
new file mode 100644
index 0000000..b3b2f30
--- /dev/null
+++ b/lang/SimpleExpressions.json
@@ -0,0 +1,16 @@
+{
+ "langs":
+ {
+ "en-GB":
+ {
+ "keys":
+ {
+ "LANG_CATEGORY_SOUND": "User Sound",
+ "LANG_SUBCATEGORY_BUZZER": "Buzzer",
+ "LANG_PIEZO_BUZZER": "Buzzer",
+ "LANG_PIEZO_BUZZER_PIN": "PIN",
+ "LANG_PIEZO_BUZZER_PREDEF_SOUNDS_TOOLTIP": "Plays some basic sounds based on SimpleExpressions library"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/simpleExpression_blocks.js b/simpleExpression_blocks.js
index 91a1cdd..24c1173 100644
--- a/simpleExpression_blocks.js
+++ b/simpleExpression_blocks.js
@@ -1,46 +1,93 @@
+Facilino.LANG_COLOUR_SCREEN = '#ACCE42';
+Facilino.LANG_COLOUR_SCREEN_LEDSTRIP = '#8EAC32';
+
Blockly.Blocks['show_mouth'] = {
- category: 'SimpleExpressions',
- colour: '#fbb117',
- helpUrl: Facilino.getHelpUrl('show_mouth'),
- tags: [],
- examples: [],
- init: function() {
- this.appendDummyInput()
- .appendField("showMouth");
- this.appendValueInput("Color")
- .setCheck(null)
- .appendField("Color");
- this.setColour("#fbb117");
- this.setTooltip("");
- }
+ category: Facilino.locales.getKey('LANG_CATEGORY_SCREEN'),
+ subcategory: Facilino.locales.getKey('LANG_SUBCATERGORY_WS2812'),
+ category_colour: Facilino.LANG_COLOUR_SCREEN,
+ colour: Facilino.LANG_COLOUR_SCREEN_LEDSTRIP,
+ helpUrl: Facilino.getHelpUrl('show_mouth'),
+ tags: [],
+ examples: [],
+ init: function() {
+ this.appendDummyInput('').appendField("WS2812 7-Ring").appendField(new Blockly.FieldImage('img/blocks/led_strip.svg', 40*options.zoom, 40*options.zoom));
+ this.appendValueInput('PIN').appendField(Facilino.locales.getKey('LANG_SIMPLEEXPRESSIONS_PIN')).setAlign(Blockly.ALIGN_RIGHT).setCheck(Number);
+ this.appendDummyInput('').appendField('Expression').appendField(new Blockly.FieldDropdown([['Zeros','zeros'],['Happy Small','happySmall'],['Happy Full','happyFull'],['Sad Small','sadSmall'],['Sad Full','sadFull'],['Neutral','neutral'],['Circle','circle'],['Center','center'],['Hook','hook'],['Upsidedown Hook','upsidedownhook'],['Kooh','kooh'],['Upsidedown Kooh','upsidedownkooh'],['Cross','cross'],['Rect','rect'],['Left Arrow','leftarrow'],['Right Arrow','rightarrow'],['Left Half','lefthalf'],['Right Half','righthalf']]),'EXPRESSION').setAlign(Blockly.ALIGN_RIGHT);
+ var colour = new Blockly.FieldColour('#000000');
+ colour.setColours(['#000000','#808080','#C0C0C0','#FFFFFF','#800000','#FF0000','#808000','#FFFF00','#008000','#00FF00','#008080','#00FFFF','#000080','#0000FF','#800080','#FF00FF']).setColumns(4);
+ this.appendDummyInput('').appendField('Color').appendField(colour,'COLOR').setAlign(Blockly.ALIGN_RIGHT);
+ this.setPreviousStatement(true,'code');
+ this.setNextStatement(true,'code');
+ this.setColour(Facilino.LANG_COLOUR_SCREEN_LEDSTRIP);
+ this.setTooltip("");
+}
};
-
-
+
Blockly.Arduino['show_mouth'] = function(block) {
- var input_color = Blockly.Arduino.valueToCode(block, 'Color', Blockly.Arduino.ORDER_ATOMIC);
- var code='SimpleExpressions.showMouth("'+'mouth_name'+'", ' + color + ')' ;
- code+= '\n';
- return code;
+var input_expression = this.getFieldValue('EXPRESSION');
+var input_color = this.getFieldValue('COLOR');
+var input_pin = Blockly.Arduino.valueToCode(this,'PIN',Blockly.Arduino.ORDER_ATOMIC) || '';
+Blockly.Arduino.definitions_['define_simpleexpressions_h'] = '#include ';
+Blockly.Arduino.setups_['setup_simpleexpressions_mouth'] = 'SimpleExpressions.initMouth('+input_pin+');\n';
+var color_rgb=Facilino.hexToRgb(input_color);
+var code='SimpleExpressions.writeMouth("'+input_expression+'",'+color_rgb.r +','+color_rgb.g+','+color_rgb.b+');\n' ;
+code+= '\n';
+return code;
};
-Blockly.Blocks['play_sound'] = {
- category: 'SimpleExpressions',
- colour: '#fbb117',
- helpUrl: Facilino.getHelpUrl('play_sound'),
- tags: [],
- examples: [],
- init: function() {
- this.appendDummyInput()
- .appendField("play Sound");
- this.setColour("#fbb117");
- this.setTooltip("");
- }
-};
-
-
-Blockly.Arduino['play_sound'] = function(block) {
- var input_color = Blockly.Arduino.valueToCode(block, 'Color', Blockly.Arduino.ORDER_ATOMIC);
- var code='';
- code+= '\n';
- return code;
-};
+ Blockly.Arduino.dyor_piezo_buzzer_predef_sounds = function() {
+ var dropdown_pin = Blockly.Arduino.valueToCode(this, 'PIN', Blockly.Arduino.ORDER_ATOMIC) || '';
+ var code= '';
+ Blockly.Arduino.definitions_['define_simpleexpressions_h'] = '#include ';
+ Blockly.Arduino.setups_['setup_simpleexpressions_buzzer'] = 'SimpleExpressions.initBuzzer('+dropdown_pin+');\n';
+ code='SimpleExpressions.playSound('+this.getFieldValue('OPTION')+');\n';
+ return code;
+ };
+
+ Blockly.Blocks.dyor_piezo_buzzer_predef_sounds = {
+ category: Facilino.locales.getKey('LANG_CATEGORY_SOUND'),
+ subcategory: Facilino.locales.getKey('LANG_SUBCATEGORY_BUZZER'),
+ tags: ['buzzer','sound'],
+ helpUrl: Facilino.getHelpUrl('dyor_piezo_buzzer_predef_sounds'),
+ examples: [''],
+ category_colour: Facilino.LANG_COLOUR_SOUND,
+ colour: Facilino.LANG_COLOUR_SOUND_BUZZER,
+ //dyor_piezo_buzzer initialization
+ init: function() {
+ this.setColour(Facilino.LANG_COLOUR_SOUND_BUZZER);
+ this.appendDummyInput('')
+ .appendField(Facilino.locales.getKey('LANG_PIEZO_BUZZER'))
+ .appendField(new Blockly.FieldImage('img/blocks/buzzer.svg', 52*options.zoom, 35*options.zoom));
+ this.appendValueInput('PIN')
+ .appendField(Facilino.locales.getKey('LANG_PIEZO_BUZZER_PIN')).appendField(new Blockly.FieldImage("img/blocks/pwm_signal.svg",24*options.zoom,24*options.zoom))
+ .setCheck(Number)
+ .setAlign(Blockly.ALIGN_RIGHT);
+ this.appendDummyInput('').appendField(new Blockly.FieldImage('img/blocks/speaker.svg', 24*options.zoom, 24*options.zoom))
+ .appendField(new Blockly.FieldDropdown([
+ ['CONNECTION', '0'],
+ ['DISCONNECTION', '1'],
+ ['BUTTON PUSHED', '2'],
+ ['MODE 1', '3'],
+ ['MODE 2', '4'],
+ ['MODE 3', '5'],
+ ['SURPRISE', '6'],
+ ['OHOOH', '7'],
+ ['OHOOH2', '8'],
+ ['CUDDLY', '9'],
+ ['SLEEPING','10'],
+ ['HAPPY','11'],
+ ['SUPER_HAPPY','12'],
+ ['HAPPY_SHORT','13'],
+ ['SAD','14'],
+ ['CONFUSED','15'],
+ ['FART1','16'],
+ ['FART2','17'],
+ ['FART3','18'],
+ ['PIRATES','19']
+ ]), 'OPTION').setAlign(Blockly.ALIGN_RIGHT);
+ this.setInputsInline(false);
+ this.setPreviousStatement(true,'code');
+ this.setNextStatement(true,'code');
+ this.setTooltip(Facilino.locales.getKey('LANG_PIEZO_BUZZER_PREDEF_SOUNDS_TOOLTIP'));
+ }
+ };
diff --git a/src/SimpleExpressions.cpp b/src/SimpleExpressions.cpp
index 0b13ebe..14a9790 100755
--- a/src/SimpleExpressions.cpp
+++ b/src/SimpleExpressions.cpp
@@ -18,6 +18,21 @@ void SimpleExpressionsClass::init(int aMouthPin, int aBuzzerPin) {
clearMouth();
}
+void SimpleExpressionsClass::init(int aMouthPin, int aBuzzerPin) {
+ mouth = Adafruit_NeoPixel(7, aMouthPin, NEO_GRB + NEO_KHZ800);
+ mouth.begin();
+ clearMouth();
+}
+
+void SimpleExpressionsClass::initBuzzer(int aBuzzerPin) {
+ buzzerPin = aBuzzerPin;
+
+ #if defined(ESP32)
+ ledcSetup(ledc_channel, 2000, 8); // channel, max frequency, resolution
+ ledcAttachPin(aBuzzerPin, ledc_channel);
+ #endif
+}
+
///////////////////////////////////////////////////////////////////
//-- MOUTHS ----------------------------------------//
///////////////////////////////////////////////////////////////////
diff --git a/src/SimpleExpressions.h b/src/SimpleExpressions.h
index 0b7fd6c..ca77e94 100755
--- a/src/SimpleExpressions.h
+++ b/src/SimpleExpressions.h
@@ -16,6 +16,8 @@ class SimpleExpressionsClass
public:
// General
void init(int mouthPin, int buzzerPin);
+ void initMouth(int mouthPin);
+ void initBuzzer(int buzzerPin);
// Mouths
void printMouth(int number, int r, int g, int b);