/** * @license Licensed under the Apache License, Version 2.0 (the "License"): * http://www.apache.org/licenses/LICENSE-2.0 */ /** * @fileoverview Arduino code generator for the Time blocks. * Arduino built-in function docs: http://arduino.cc/en/Reference/HomePage */ 'use strict'; goog.provide('Blockly.Python.time'); goog.require('Blockly.Python'); /** * Code generator for the delay Arduino block. * Arduino code: loop { delay(X); } * @param {!Blockly.Block} block Block to generate the code from. * @return {string} Completed code. */ Blockly.Python['time_delay'] = function(block) { // var time_type = block.getFieldValue('type'); Blockly.Python.includes_['import_time'] = 'import time'; var delayTime = Blockly.Python.valueToCode( block, 'DELAY_TIME_MILI', Blockly.Python.ORDER_ATOMIC) || '0'; var code = 'time.sleep_ms(' + delayTime + ')\n'; return code; }; /** * Code generator for the delayMicroseconds block. * Arduino code: loop { delayMicroseconds(X); } * @param {!Blockly.Block} block Block to generate the code from. * @return {string} Completed code. */ Blockly.Python['time_delaymicros'] = function(block) { // var time_type = block.getFieldValue('type'); Blockly.Python.includes_['import_time'] = 'import time'; var delayTimeMs = Blockly.Python.valueToCode( block, 'DELAY_TIME_MICRO', Blockly.Python.ORDER_ATOMIC) || '0'; var code = 'time.sleep(' + delayTimeMs + ')\n'; return code; }; /** * Code generator for the elapsed time in milliseconds block. * Arduino code: loop { millis() } * @param {!Blockly.Block} block Block to generate the code from. * @return {array} Completed code with order of operation. */ Blockly.Python['time_millis'] = function(block) { // var time_type = block.getFieldValue('type'); Blockly.Python.includes_['import_time'] = 'import time'; // if (time_type == 'on_esp32') { // var code = 'time.ticks_ms()'; //} else if (time_type == 'on_ai') { var code = 'time.ticks_ms()'; //} return [code, Blockly.Python.ORDER_ATOMIC]; }; /** * Code generator for the elapsed time in microseconds block. * Arduino code: loop { micros() } * @param {!Blockly.Block} block Block to generate the code from. * @return {array} Completed code with order of operation. */ Blockly.Python['time_micros'] = function(block) { // var time_type = block.getFieldValue('type'); Blockly.Python.includes_['import_time'] = 'import time'; // if (time_type == 'on_esp32') { // var code = 'time.time()'; // } else if (time_type == 'on_ai') { var code = 'time.ticks_us()'; // } return [code, Blockly.Python.ORDER_ATOMIC]; }; /** * Code generator for the wait forever (end of program) block * Arduino code: loop { while(true); } * @param {!Blockly.Block} block Block to generate the code from. * @return {string} Completed code. */ Blockly.Python['infinite_loop'] = function(block) { return 'while(true)\n'; }; Blockly.Python['time_chrono_setup'] = function(block) { Blockly.Python.addInclude("chrono.h", "#include \n"); Blockly.Python.addDeclaration("chrono_dec", "Chrono myChrono\n"); } Blockly.Python['time_chrono_reset'] = function(block) { var code = "myChrono.restart()\n"; return code; } Blockly.Python['time_chrono_elapsed'] = function(block) { var code = "myChrono.elapsed()"; return [code, Blockly.Python.ORDER_ATOMIC]; } Blockly.Python['time_chrono_timeCheck'] = function(block) { var time = Blockly.Python.valueToCode(this, "TIME", Blockly.Python.ORDER_ATOMIC); var code = "myChrono.hasPassed(" + time + ")"; return [code, Blockly.Python.ORDER_ATOMIC]; } Blockly.Python['time_everySecond'] = function(block) { // var time = Blockly.Python.valueToCode(this, "TIME", Blockly.Python.ORDER_ATOMIC); // Blockly.Python.addDeclaration("everySecondState_"+time ,"int everySecondState_"+time+" = 0;") // var stack_statements = Blockly.Python.statementToCode(block, "STACK", Blockly.Python.ORDER_ATOMIC) // if (time >= 2) // var code = "if ((millis() / 1000) % " + time + " == " + (time - 2) + " && everySecondState_"+time+" == 0) {\n"+ // " "+stack_statements+"\n"+ // " everySecondState_"+time+" = 1\n"+ // "} else if ((millis() / 1000) % " + time + " == " + (time-1) +") {\n"+ // " everySecondState_"+time+" = 0\n"+ // "}\n" // else { // var code = "if ((millis() / 100) % 10 == 1 && everySecondState_"+time+" == 0) {\n"+ // " "+stack_statements+"\n"+ // " everySecondState_"+time+" = 1\n"+ // "} else if ((millis() / 100) % 10 == 2 && everySecondState_"+time+" == 1) {\n"+ // " everySecondState_"+time+" = 0\n"+ // "}\n" // } code = ""; return code; } Blockly.Python['time_everyMilliSecond'] = function(block) { // var time = Blockly.Python.valueToCode(this, "TIME", Blockly.Python.ORDER_ATOMIC); // Blockly.Python.addDeclaration("timePeriodExecutionState_" + time, "int timePeriodExecutionState_" + time + " = 0;") // var stack_statements = Blockly.Python.statementToCode(block, "STACK", Blockly.Python.ORDER_ATOMIC) // var code = "if ((millis()) % " + time + " == " + (time - 1) + " && timePeriodExecutionState_" + time + " == 0) {\n" + // " " + stack_statements + "\n" + // " timePeriodExecutionState_" + time + " = 1\n" + // "} else if ((millis()) % " + time + " == " + 0 + ") {\n" + // " timePeriodExecutionState_" + time + " = 0\n" + // "}\n" code = ""; return code; }