123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- /**
- * @license Licensed under the Apache License, Version 2.0 (the "License"):
- * http://www.apache.org/licenses/LICENSE-2.0
- */
- /**
- * @fileoverview Code generator for Arduino Digital and Analogue input/output.
- * Arduino built in function docs: http://arduino.cc/en/Reference/HomePage
- */
- 'use strict';
- goog.provide('Blockly.Python.IO');
- goog.require('Blockly.Python');
- /**
- * Function for 'set pin' (X) to a state (Y).
- * Arduino code: setup { pinMode(X, OUTPUT); }
- * loop { digitalWrite(X, Y); }
- * @param {!Blockly.Block} block Block to generate the code from.
- * @return {string} Completed code.
- */
- Blockly.Python['io_digitalwrite'] = function(block) {
- var pin = Blockly.Python.valueToCode(
- block, 'PIN', Blockly.Python.ORDER_ATOMIC) || '1';
- var stateOutput = Blockly.Python.valueToCode(
- block, 'STATE', Blockly.Python.ORDER_ATOMIC) || 'LOW';
- Blockly.Python.reservePin(
- block, pin, Blockly.Python.PinTypes.OUTPUT, 'Digital Write');
- var pinSetupCode = 'pinMode(' + pin + ', OUTPUT);';
- Blockly.Python.addSetup('io_' + pin, pinSetupCode, false);
- var code = 'digitalWrite(' + pin + ', ' + stateOutput + ');\n';
- return code;
- };
- /**
- * Function for reading a digital pin (X).
- * Arduino code: setup { pinMode(X, INPUT); }
- * loop { digitalRead(X) }
- * @param {!Blockly.Block} block Block to generate the code from.
- * @return {array} Completed code with order of operation.
- */
- Blockly.Python['io_digitalread'] = function(block) {
- var pin = Blockly.Python.valueToCode(
- block, 'PIN', Blockly.Python.ORDER_ATOMIC) || '1';
- Blockly.Python.reservePin(
- block, pin, Blockly.Python.PinTypes.INPUT, 'Digital Read');
- var pinSetupCode = 'pinMode(' + pin + ', INPUT);';
- Blockly.Python.addSetup('io_' + pin, pinSetupCode, false);
- var code = 'digitalRead(' + pin + ')';
- return [code, Blockly.Python.ORDER_ATOMIC];
- };
- /**
- * Function for setting the state (Y) of a built-in LED (X).
- * Arduino code: setup { pinMode(X, OUTPUT); }
- * loop { digitalWrite(X, Y); }
- * @param {!Blockly.Block} block Block to generate the code from.
- * @return {string} Completed code.
- */
- Blockly.Python['io_builtin_led'] = function(block) {
- var pin = block.getFieldValue('BUILT_IN_LED');
- var stateOutput = Blockly.Python.valueToCode(
- block, 'STATE', Blockly.Python.ORDER_ATOMIC) || 'LOW';
- Blockly.Python.reservePin(
- block, pin, Blockly.Python.PinTypes.OUTPUT, 'Set LED');
- var pinSetupCode = 'pinMode(' + pin + ', OUTPUT);';
- Blockly.Python.addSetup('io_' + pin, pinSetupCode, false);
- var code = 'digitalWrite(' + pin + ', ' + stateOutput + ');\n';
- return code;
- };
- /**
- * Function for setting the state (Y) of an analogue output (X).
- * Arduino code: setup { pinMode(X, OUTPUT); }
- * loop { analogWrite(X, Y); }
- * @param {!Blockly.Block} block Block to generate the code from.
- * @return {string} Completed code.
- */
- Blockly.Python['io_analogwrite'] = function(block) {
- var pin = Blockly.Python.valueToCode(
- block, 'PIN', Blockly.Python.ORDER_ATOMIC) || '0';
- var stateOutput = Blockly.Python.valueToCode(
- block, 'ANALOGNUM', Blockly.Python.ORDER_ATOMIC) || '0';
- var reg=/A[0-9]/g;
- var isAnalogInput = true;
- isAnalogInput = reg.test(pin);
- // console.log("io.js-input isAnalogInput: "+ isAnalogInput);
- var pinI='';
- if (!isAnalogInput){
- Blockly.Python.addDeclaration('io_analogPinList','const int analogPIN[8]={A0,A1,A2,A3,A4,A5,A6,A7};');
- Blockly.Python.addSetup('io_A0','pinMode(A0, OUTPUT);');
- Blockly.Python.addSetup('io_A1','pinMode(A1, OUTPUT);');
- Blockly.Python.addSetup('io_A2','pinMode(A2, OUTPUT);');
- Blockly.Python.addSetup('io_A3','pinMode(A3, OUTPUT);');
- Blockly.Python.addSetup('io_A4','pinMode(A4, OUTPUT);');
- Blockly.Python.addSetup('io_A5','pinMode(A5, OUTPUT);');
- Blockly.Python.addSetup('io_A6','pinMode(A6, OUTPUT);');
- Blockly.Python.addSetup('io_A7','pinMode(A7, OUTPUT);');
-
- pinI = "analogPIN["+pin+"]";
-
- } else {
- Blockly.Python.reservePin(
- block, pin, Blockly.Python.PinTypes.OUTPUT, 'Analogue Write');
- var pinSetupCode = 'pinMode(' + pin + ', OUTPUT);';
- Blockly.Python.addSetup('io_' + pin, pinSetupCode, false);
- }
- // Warn if the input value is out of range
- if ((stateOutput < 0) || (stateOutput > 255)) {
- block.setWarningText('The analogue value set must be between 0 and 255',
- 'pwm_value');
- } else {
- block.setWarningText(null, 'pwm_value');
- }
- if (isAnalogInput) {
- var code = 'analogWrite(' + pin + ', ' + stateOutput + ');\n';
- } else {
- var code = 'analogWrite(' + pinI + ', ' + stateOutput + ');\n';
- }
- return code;
- };
- /**
- * Function for reading an analogue pin value (X).
- * Arduino code: setup { pinMode(X, INPUT); }
- * loop { analogRead(X) }
- * @param {!Blockly.Block} block Block to generate the code from.
- * @return {array} Completed code with order of operation.
- */
- Blockly.Python['io_analogread'] = function(block) {
- var pin = Blockly.Python.valueToCode(
- block, 'PIN', Blockly.Python.ORDER_ATOMIC) || '0';
- Blockly.Python.reservePin(
- block, pin, Blockly.Python.PinTypes.INPUT, 'Analogue Read');
- var pinSetupCode = 'pinMode(' + pin + ', INPUT);';
- Blockly.Python.addSetup('io_' + pin, pinSetupCode, false);
- var code = 'analogRead(' + pin + ')';
- return [code, Blockly.Python.ORDER_ATOMIC];
- };
- Blockly.Python['io_pwmwrite'] = function(block) {
- var pin = Blockly.Python.valueToCode(
- block, 'PIN', Blockly.Python.ORDER_ATOMIC) || '0';
- var stateOutput = Blockly.Python.valueToCode(
- block, 'PWMVALUE', Blockly.Python.ORDER_ATOMIC) || '0';
- var reg=/[0-9]/g;
- var isVarInput = false;
- isVarInput = !reg.test(pin);
- // console.log("io.js-input isPwmInput: "+ isVarInput);
- Blockly.Python.reservePin(
- block, pin, Blockly.Python.PinTypes.OUTPUT, 'PWM Write');
- var pinSetupCode = 'pinMode(' + pin + ', OUTPUT);';
- Blockly.Python.addSetup('io_' + pin, pinSetupCode, false);
- var code = 'analogWrite(' + pin + ', ' + stateOutput + ');\n';
- return code;
- };
- /**
- * Value for defining a digital pin state.
- * Arduino code: loop { HIGH / LOW }
- * @param {!Blockly.Block} block Block to generate the code from.
- * @return {array} Completed code with order of operation.
- */
- Blockly.Python['io_highlow'] = function(block) {
- var code = block.getFieldValue('STATE');
- return [code, Blockly.Python.ORDER_ATOMIC];
- };
- Blockly.Python['io_pulsein'] = function(block) {
- var pin = block.getFieldValue("PULSEPIN");
- var type = Blockly.Python.valueToCode(block, "PULSETYPE", Blockly.Python.ORDER_ATOMIC);
- Blockly.Python.reservePin(
- block, pin, Blockly.Python.PinTypes.INPUT, 'Pulse Pin');
- var pinSetupCode = 'pinMode(' + pin + ', INPUT);\n';
- Blockly.Python.addSetup('io_' + pin, pinSetupCode, false);
- var code = 'pulseIn(' + pin + ', ' + type + ')';
- return [code, Blockly.Python.ORDER_ATOMIC];
- };
- Blockly.Python['io_pulsetimeout'] = function(block) {
- var pin = block.getFieldValue("PULSEPIN");
- var type = Blockly.Python.valueToCode(block, "PULSETYPE", Blockly.Python.ORDER_ATOMIC);
- var timeout = Blockly.Python.valueToCode(block, "TIMEOUT", Blockly.Python.ORDER_ATOMIC);
- Blockly.Python.reservePin(
- block, pin, Blockly.Python.PinTypes.INPUT, 'Pulse Pin');
- var pinSetupCode = 'pinMode(' + pin + ', INPUT);\n';
- Blockly.Python.addSetup('io_' + pin, pinSetupCode, false);
- var code = 'pulseIn(' + pin + ', ' + type + ', ' + timeout + ')';
- return [code, Blockly.Python.ORDER_ATOMIC];
- };
- Blockly.Python['io_dropdown_digital']= function(block) {
- var code = block.getFieldValue('SELECTPIN');
- return [code, Blockly.Python.ORDER_ATOMIC];
- };
- Blockly.Python['io_dropdown_analog']= function(block) {
- var code = block.getFieldValue('SELECTPIN');
- return [code, Blockly.Python.ORDER_ATOMIC];
- };
- Blockly.Python['io_dropdown_pwm']= function(block) {
- var code = block.getFieldValue('SELECTPIN');
- return [code, Blockly.Python.ORDER_ATOMIC];
- };
|